Compare commits

...

1311 Commits

Author SHA1 Message Date
nabeelio
db34d0e3e7 Add test for METAR string 2021-03-15 09:14:39 -04:00
Nabeel S
fffbab7201 Merge branch 'dev' into patch-2 2021-03-15 08:30:29 -04:00
exciler
b9e7a2efc9 Add unit conversion handling for block_fuel like for fuel_used (#1076)
* Add unit conversion handling for block_fuel like for fuel_used, add further checks in PIREPTest->testUnitFields

* Remove accidentially added "use"

Co-authored-by: Andreas Palm <ap@ewsp.de>
2021-03-15 08:30:14 -04:00
B.Fatih KOZ
76a2a16fa6 Merge branch 'dev' into patch-2 2021-03-14 03:54:53 +03:00
Nabeel Shahzad
73f88fce0c Fix permissions with modules 2021-03-13 18:31:09 -05:00
B.Fatih KOZ
cfbd1c901a Merge branch 'dev' into patch-2 2021-03-10 04:53:25 +03:00
Nabeel S
e70ee5aa6f Add web cron ability #821 (#1073)
* Use database for kvp storage

* Read kvpstore

* Add web cron ability through API #821

* Style fixes

* Fix text
2021-03-09 11:36:56 -05:00
B.Fatih KOZ
617813bdbf Fix Metar Decoding / Wind check for Wind Chill
PR aims to fix the bug #1071 by checking both the wind speed and it's value for starting Wind Chill calculation.
2021-03-09 16:06:39 +03:00
nabeelio
f1c54bcc7c Add Postmark package #1067 2021-03-08 11:35:11 -05:00
nabeelio
d94d754961 Block user if they're not active #1066 2021-03-08 11:24:09 -05:00
nabeelio
9abfbd6c8c Remove unneeded import #1066 2021-03-08 11:21:55 -05:00
nabeelio
97fc1dd43d Don't block API logins #1066 2021-03-08 11:19:31 -05:00
Nabeel Shahzad
edc37f40fa Show either create/view simbrief button, not both 2021-03-06 16:48:50 -05:00
Nabeel S
950c7788be Restrict Simbrief to user who generated it (#1064)
* Restrict simbrief to user

* Style fixes

* Add tests

* Style fix
2021-03-06 13:49:42 -05:00
nabeelio
b3af50ac5a Add ignored solution provider 2021-03-05 08:00:34 -05:00
nabeelio
8a9b68d9ec Disable ignition runnable solutions 2021-03-05 07:59:50 -05:00
nabeelio
70a4cf9f90 Remove the laravel-backup library 2021-03-05 07:33:42 -05:00
Nabeel Shahzad
c3465851b2 Rename backups folder 2021-03-05 06:24:23 -05:00
Nabeel Shahzad
b13c4df338 laravel-backup changes 2021-03-05 06:00:36 -05:00
Nabeel Shahzad
c736a9b639 Disable encryption by default for backups 2021-03-05 05:44:04 -05:00
nabeelio
d2e1004e08 Undo composer downgrades 2021-03-04 17:17:39 -05:00
Nabeel S
3800c01d94 Update to Laravel 8 (#1058)
* Update Laravel and other dependencies

* Composer version in CI

* Remove the PHP exit from env file

* Add PHP 8 to testing matrix

* Update doctrine

* Update doctrine

* Update faker lib

* Rewrite TLD check to remove deprecated library

* Update version lib

* Remove PHP 8 for now

* Style fixes
2021-03-04 17:08:51 -05:00
Nabeel S
922e754c9e Check for valid reference object in recurring finance (#1056) 2021-03-02 16:19:54 -05:00
Nabeel S
936cd2efd3 Implement PIREP deletion #1014 (#1055)
* Implement PIREP deletion #1014

* Style fixes

* Add delete button to PIREP listing page

* Remove extra import
2021-03-02 15:43:34 -05:00
Nabeel S
e22d6d5996 Refactoring Simbrief fares and aircraft (#1054)
* Refactoring simbrief fares and aircraft

* Hide user full name/email

* Sort PIREP fields desc; fix cargo counts

* Change the sorting

* Extra logs

* Fix tests

* Return fare information through the API

* Style fixes

* Test fix

* Another test fix

* More fixes

* Set aircraft and fares in prefile

* Formatting
2021-03-02 12:29:04 -05:00
B.Fatih KOZ
efcb7e8895 Fix Advanced Fuel Calculations (#1053)
Due to an error on the settings check advanced fuel calculations was not working and defaulting to fuel used always.
2021-03-01 15:03:27 -05:00
Nabeel S
43fbe9e943 Update composer dependencies (#1047) 2021-02-26 12:23:50 -05:00
nabeelio
8fc0aec800 Set cache driver to array for tests 2021-02-25 13:50:37 -05:00
Nabeel Shahzad
bb84fa82a4 Default to file storage for sesions 2021-02-24 13:37:46 -05:00
B.Fatih KOZ
4fe323a763 Advanced Fuel Calculations (#1044)
* Advanced Fuel Calculations

PR aims to have realistic fuel debit calculations as in the real ops. When enabled, remaining fuel amounts from previous flight will be reduced from block fuel and airline will only pay for uplifted fuel amount.

If onboard fuel is enough for the flight or exceeds the required amount no fuel debit will be issued.

If this is the first flight of the aircraft or the tanks are dry, full block fuel will be treated as uplifted.

Disabled / uses current default (fuel_used will be debited)

Aircraft table also will hold the fuel_onboard value (not needed for calculations, just saving for displaying purposes)

* Style Fix

* Another Style Fix

Love StyleCi

* Fix Settings

Moved new setting under other pirep settings

* Fix Setting Check

* Fix EOF settings.yml

* Fix Settings
2021-02-24 12:22:52 -05:00
B.Fatih KOZ
e3b4a0ed2e SimBrief integration enhancements (#1045)
* SimBrief Integration Update

* Added SimBrief Type field to subfleets, can be used to assign simbrief airframes to subfleets and fix non existing or wrong types. If not used simbrief form will use aircraft's icao type code

* Added Passenger and Baggage weights to settings

* Added setting for using PhpVms Pilot/User  Ident as simbrief atc callsign

* SimBrief form code cleaned up a bit and improved. Now form supports both cargo and passenger fares to be used at the same time.

Generated passenger baggage weight will be reduced from aircraft's cargo capacity and remaining amount will be used for random cargo generation.

Also multiple cargo fares or any mix is possible now (like only cargo, only passenger, multiple cargo and passenger fares)

* StyleFix (SimBrief Controller)

* Fix Callsign Setting Check

* Code Cleanup

Reduced loops and removed if's in loops, getting fares from aircraft instead of flight/subfleets.

No need to go through getReconciledFaresForFlight anymore. Aircraft provides all fare info we need.

Removed unnecessary html elements, added some comments.

* Update Simbrief Controller

Fixed setting checks.

Removed non used $subfleet and from main form and $aircraft from aircraft selection form blade.

Added/fixed comments.

* StyleFix for Controller
2021-02-24 09:32:29 -05:00
Nabeel Shahzad
a4c431d39f Set missing value from default 2021-02-23 11:25:06 -05:00
Nabeel Shahzad
a52e0410a7 Force default to the value when syncing settings 2021-02-23 11:23:40 -05:00
B.Fatih KOZ
baf63361a0 Fix findUsersOnleave Function (#1042)
Query was checking status field instead of state field to find active users.
2021-02-22 11:23:50 -05:00
B.Fatih KOZ
b4d5c0fbcd Weather METAR/TAF enhancements (#964)
* Update AviationWeather.php

Added the ability to fetch latest TAF report of given icao from ADDS/NOAA

* Update Weather.php

Used updated Metar\AviationWeather service to improve the widget ability and provide raw TAF data for the view

* Style Fix 1

* Update weather.blade.php

Updated blade to match updated Metar\AviationWeather service and the Weather widget controller.

Also fixed the order of temp - dewpoint - humidity - visibility display according to aviation usage.

Widget now displays raw TAF data just below raw METAR data.

* Update Metar inferface and wrap TAF retrieval in cache

* Styles fix

* Add call to getTaf. Don't call AviationWeather directly

* Fix cache lookup strings

* Fix recursion error

* Update weather.blade.php

Used latest weather.blade , added $taf['raw'] after raw metar.

* Compatibility Update

Updated the widget controller to match latest dev (added raw_only to config)

* Update Weather Widget Blade

Made the widget blade compatible with the TAF reports, widget will display raw metar and taf after the decoder, if no metar or taf recieved it will be displayed in its own row. Also added the new option of raw_only to blade, if it is true, metar decoding will be skipped and only raw values will be displayed. ( Useful when displaying multiple wx widgets at the same page for departure, destination and alternate etc )

Co-authored-by: Nabeel Shahzad <nshahzad@live.com>
Co-authored-by: Nabeel S <nabeelio@users.noreply.github.com>
2021-02-19 12:45:39 -05:00
B.Fatih KOZ
6b7eab05e2 Assign subfleets from ranks when there are no subfleets on a flight
If no subfleets are assigned to a flight, vmsacars was not allowing the flight to be loaded and used 'cause the subfleets was returning null. With this pr, users will be able to use the aircrafts which they have access to by their ranks. ( Same logic was used in SimBrief Controller to populate the aircraft list for flight plan generation )

Co-authored-by: Nabeel S <nabeelio@users.noreply.github.com>
2021-02-19 08:20:17 -05:00
Jannis D
4c8e31ac6f Update installer.php (#1038)
Co-authored-by: Jannis D <Mail@JannisD.de>
2021-02-19 08:13:08 -05:00
B.Fatih KOZ
fe41e61c02 Fix for SimBrief VATSIM Prefile errors (#1037)
Speed is now checked and leading zero is removed, also changed the initial altitude to full feet value like 23000 instead of just 230.
2021-02-18 18:02:33 -05:00
Nabeel Shahzad
bd85a04530 Fix internal event for ON_LEAVE 2021-02-17 18:57:16 -05:00
Nabeel S
cbb7d6e274 Fix pilot leave calculation #1022 (#1035)
* Fix pilot leave calculation #1022

* Remove unused imports

* Add logging where fares are being saved
2021-02-17 18:54:18 -05:00
Nabeel Shahzad
8907527872 Remove invalid bids #1034 2021-02-17 18:03:07 -05:00
Nabeel Shahzad
942c060c99 Added opcache package 2021-02-17 14:44:41 -05:00
Nabeel Shahzad
68a9421445 Shrink backup sizes 2021-02-17 14:38:47 -05:00
Nabeel Shahzad
4e652c91ae Account for localhost/testing sites in domain checks 2021-02-13 15:59:19 -05:00
Nabeel Shahzad
a6f62045c4 Extend cron check for 12 hours 2021-02-13 15:17:16 -05:00
Nabeel Shahzad
3f3b63da6f Fix session database configuration 2021-02-12 11:43:00 -05:00
Nabeel Shahzad
dd7812e5c5 Undo primary idx change 2021-02-11 08:57:43 -05:00
Nabeel S
447d02bd4f Update the sessions table (#1030)
* Update the sessions table

* Add index on user_id
2021-02-11 08:50:49 -05:00
Nabeel Shahzad
be9b698f14 Merge branch 'dev' of https://github.com/nabeelio/phpvms into dev 2021-02-10 15:47:42 -05:00
Nabeel S
d110c2d951 ACARS table vs int to double (#1028)
* mail config - "driver" to "default"

* Change VS type from int to double

* Migration fix

* Fix type
2021-02-10 13:39:40 -05:00
Nabeel Shahzad
4d20998368 mail config - "driver" to "default" 2021-02-10 13:18:02 -05:00
Nabeel Shahzad
4a20b41b25 Rename driver to default in mail config 2021-02-10 13:15:18 -05:00
Olli
8c2513eb3d Update style.css for better mobile experience (#1018)
This edit hides the dropdown menu while being closed on mobile view
2021-02-05 08:38:32 -05:00
Nabeel Shahzad
2dbd58e59e Merge branch 'dev' of https://github.com/nabeelio/phpvms into dev 2021-02-04 14:54:20 -05:00
Nabeel Shahzad
bf77f7dd96 Add 'phase' as response output, deprecate "status" 2021-02-04 14:54:16 -05:00
B.Fatih KOZ
5a570989de Failsafe for SimBrief random pax generation (#1015)
* Failsafe for SimBrief random pax generation

PR fixes the problem for 0 load generation where va admins do not set load factor and variance values for their flights and also leave the general settings empty. In such cases, both loadmin and loadmax was returning 0 , resulting zero load.

Thanks @macofallico for figuring this out.

* StyleFix
2021-02-01 15:27:22 -05:00
B.Fatih KOZ
6b3207377a Fix Profile Fields (#1013)
* Fix Profile Fields

PR fixes two issues ;

1. Profile Fields not showing up on user profile
2. Profile Fields not showing up on user.profile.edit

Profile.index was looking for "public" to be true, while controller was sending "private" and it was not boolean.

Also profile controller was not sending the fields to the blade. Both fixed and working now

* Update index.blade.php
2021-01-28 08:31:29 -05:00
B.Fatih KOZ
ac1d5e1555 Fix PilotHoursAwards (#1011)
!is_int was causing the check always return false even when user enters a proper value like 6000 or 30000 in admin/award settings.

We should use !is_numeric instead to see if it is a valid numeric value.
2021-01-26 19:48:43 -05:00
B.Fatih KOZ
0d45fc287b AwardController text correction (#1010)
Fixed the flash message texts
2021-01-26 16:31:54 -05:00
B.Fatih KOZ
4911f6799d Fix for ACARS config download button not working #919 (#1009)
* Fix For Acars Config Download Button No Working Bug #919

PR fixes the Acars Config Download button not showing up at user profile.

Also fixes the problem where Generate New Api Key button not following user selections and generating a new key even if user clicks cancel.

* Style Fix for ? and !

Fix the typo :)
2021-01-25 16:04:43 -05:00
Nabeel Shahzad
5821067231 Default settings to false 2021-01-25 07:06:27 -05:00
Nabeel S
fc7ad7eb6a Simbrief attachment not working #1005 (#1006)
* Refactoring for Simbrief not working #1005

* Style fixes

* Update tests for new briefing URL

* Check the OFP user

* Comment out user check temporarily
2021-01-25 06:54:17 -05:00
Nabeel S
101b3261f5 Move loadmin/max into the controller (#1003) 2021-01-22 09:02:15 -05:00
Nabeel Shahzad
fb0027b140 Update Discord message 2021-01-22 08:38:54 -05:00
Nabeel Shahzad
066702e490 Switch to http until I can get the certificates sorted 2021-01-22 08:30:25 -05:00
Nabeel Shahzad
b4e0515405 Add tar/zip reference to Discord build message 2021-01-22 08:29:22 -05:00
B.Fatih KOZ
f5ca8ce6e3 Fix For Load Factor and Variance Bug (#1002)
PR fixes the issue where load factor and variance being reported 0 to simbrief form, where user does not provide any values for each and wants to use general settings per flight.

Quick fix for issue #1001
2021-01-22 08:14:34 -05:00
Nabeel Shahzad
7e9196c7e6 Check if simbrief is valid 2021-01-21 11:57:44 -05:00
Nabeel S
a2916bf536 Cleanup visible flight logic (#1000)
* Cleanup visible flight logic

* Add transfer_time to API response
2021-01-21 11:11:11 -05:00
Nabeel Shahzad
0578f98b58 Force flight to visible before day checks 2021-01-21 10:57:51 -05:00
Nabeel Shahzad
2e0f0b00ef Ensure simbrief id is assigned 2021-01-21 09:21:39 -05:00
Daniel Ortez
d5d9010134 Fix error in webpack file (#994) 2021-01-20 09:24:27 -05:00
Nabeel Shahzad
bd8e13e78f Cleanup Simbrief Briefing pages 2021-01-17 21:52:22 -05:00
Nabeel Shahzad
c4dee07b7f Cleanup flight search code 2021-01-17 21:25:44 -05:00
dependabot[bot]
f8a44d8c6d Bump ini from 1.3.5 to 1.3.8 (#955)
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.8.
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.8)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nabeel S <nabeelio@users.noreply.github.com>
2021-01-17 16:01:04 -05:00
B.Fatih KOZ
617cea5df7 SimBrief Planning System Update (#991)
* SimBrief Planning System Update

Replaces outdated old pr.

Same improvements apply to both controller and simbrief_form.blade.

* Style Fix for SimBrief.Controller

* strict equals fix and some comments

changed equals to strict equals and put in some comments about the loadarray and manualrmk generation.

* Formatting/separate out secstohhmm

* Formatting

* Removed duplicates

We have the $wakecat, $equipment and $transponder in the controller, removed them from the blade.

Fixed a harmless typo in the IVAO Prefile DEPTIME line

Co-authored-by: Nabeel S <nabeelio@users.noreply.github.com>
Co-authored-by: Nabeel Shahzad <nabeel@nabeel.sh>
2021-01-17 15:59:32 -05:00
B.Fatih KOZ
3a99fe9e0e SimBrief Briefing Display Fix (#992)
Fixed Estimate Enroute Time (EET) display (it was using Scheduled Enroute Time)
2021-01-17 14:26:03 -05:00
B.Fatih KOZ
a952071cb4 Subfleet Hubs / Base Airports (#978)
* Update SubFleet Model

Add hub_id for storing subfleet's main base/hub airport, define a relationship with airport model to get details of the base/hub airport when needed.

* Update Admin / SubFleetController

Added the ability to read and pass hub airports to admin view for create/edit options.

* Update Admin/SubFleets.fields.blade

Added the dropdown for adding/editing main base/hub of a subfleet.

* Add migration for the hub_id column

Co-authored-by: Nabeel S <nabeelio@users.noreply.github.com>
Co-authored-by: Nabeel Shahzad <nshahzad@live.com>
2021-01-17 12:43:06 -05:00
dependabot[bot]
157e0d830c Bump axios from 0.18.1 to 0.21.1 (#979)
Bumps [axios](https://github.com/axios/axios) from 0.18.1 to 0.21.1.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v0.21.1/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.18.1...v0.21.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nabeel S <nabeelio@users.noreply.github.com>
2021-01-17 12:27:54 -05:00
B.Fatih KOZ
a5b83185f5 Search Flights By Flight Type (#987)
Flight Controller : Added flight_type to return

Flight Repository : Made flight_type searchable and added its where criteria

Flight.Search.Blade : Added the flight types in a reasonable order as a dropdown (like schedule pax,charter pax,cargo,others)

Co-authored-by: Nabeel S <nabeelio@users.noreply.github.com>
2021-01-17 12:23:23 -05:00
Maximiliano Fallico
29ff0758a7 Add filter/search by airline in admin (#990)
Add filter/search by Airline
2021-01-17 11:59:34 -05:00
Nabeel Shahzad
be74d99ae8 Run on pull request 2021-01-17 11:54:46 -05:00
Nabeel Shahzad
53de2e3229 Only run workflows on main repo 2021-01-17 11:52:49 -05:00
Nabeel S
80a90c6e3c Fix github badge 2021-01-16 22:15:32 -05:00
Nabeel S
854ed9b92c Remove travis-ci badge 2021-01-16 22:14:28 -05:00
Nabeel S
46b17b5c04 Use GitHub actions (#989) 2021-01-16 20:25:58 -05:00
Andrew Roberts
0068b1215a Remove existing fares when importing (#988)
Delete all existing fares and overwrite with new import when Delete Existing Data is checked/true.
2021-01-16 13:09:56 -05:00
B.Fatih KOZ
984c1e0cec SimBrief : Generate New Briefing (#986)
* Add SB Briefing Removal Route

Route will be called from simbrief.briefing.blade

* SimBrief Controller and Briefing Blade Update

Added the remove function to controller, which removes the simbrief ofp if no pirep_id is present, else it just nulls the flight_id for to be able to create a new SB pack

Also added the button to blade for it to work

* Style Fix

love styleci
2021-01-15 17:36:46 -05:00
Daniel Ortez
ad8b8e8945 Fix for deleting flights when importing (#984) 2021-01-14 07:07:35 -05:00
B.Fatih KOZ
2b0056b7c5 Added the ability to enable/disable flight table display below the map (#983)
* LiveMap Widget Upgrade

Added the ability to enable/disable flight table display below the map.

Default is on

* Update LiveMap.php

* Update LiveMap.php

* Update live_map.blade.php
2021-01-12 08:24:50 -05:00
B.Fatih KOZ
319a9fc8e1 Weather widget additions/fixes (#981)
Fixed the problem where values are not displayed when the reported wind,temp and dewpoint are 0 (zero).
Fixed the hPa number formatting, there is no need to add 2 more digits to it, it is a plain 4 digit value always (like 1013 or 1024, it is never reported nor used as 1013,58 or 1024,35 etc).
Corrected the display order, as it should be read (or say decoded).
Also added decoded Current and Recent Weather Situations, RVR and Runway Condition reports.

RVR report needs improvement in the Support / Metar.php too, it only reports nmi as the distance as far as i saw but it should be able to report meters too.
2021-01-07 09:09:05 -05:00
B.Fatih KOZ
a037597a21 Airline > Subfleet Relationship (#970) 2021-01-03 08:05:48 -05:00
Andrew Roberts
4026fe9149 Fix location of configservice (#977)
Pointing to wrong location of file which is throwing errors as a result
2021-01-03 07:39:02 -05:00
B.Fatih KOZ
18e1d63760 Update User.php (#968)
We should be able to send the private name with the api too.
2020-12-23 11:27:01 -05:00
Nabeel S
4bda494c6b Add helpers kvp() and kvp_save() (#966) 2020-12-21 11:30:44 -05:00
B.Fatih KOZ
a5513b6fbb Fixes for reported pressure in METAR parsing (#965)
* Update Metar.php

The reported pressure was always being assigned as hPa thus resulting display and conversion errors when the reported pressure was inHg.

Also the VFR/IFR (VMC/IMC) determination was using minimum 5 nmi and 3000 ft cloud base, it must be 5 km and 3000 ft.

With this state, this PR should fix issue #948 and partly fixes issue #963

* MetarTest Fix for inHg/hPa
2020-12-21 10:53:50 -05:00
B.Fatih KOZ
e4972eaae3 Download screen enhancements
Changed the group name according to its category , aircrafts will show icao type and registration , airports will be displayed with their icao codes names and countries. Rest will be showed with their names (exp airlines)

This will result a much better look on the downloads page for end users while looking for a specific type's files (like a repaint for a B738).
2020-12-18 14:34:05 -05:00
Nabeel Shahzad
e95e61d4b4 Fix tests #807 2020-12-07 10:19:43 -05:00
Nabeel Shahzad
f92912dff4 Fix test 2020-12-07 09:50:00 -05:00
Nabeel Shahzad
f62c607138 Change fuel calculation to fuel used #807 2020-12-07 09:46:07 -05:00
B.Fatih KOZ
d1a3155653 Fixed EET and ENDURANCE values at IVAO & VATSIM prefile (#954)
Fixed wrong EET and ENDURANCE values at IVAO & VATSIM prefile forms with a php function converting seconds to HHmm format. 

Also added View Route At SkyVector link (uses auto zoom to fpl route on High Enroute Charts) , thx Maco for his idea and original link.
2020-12-06 17:18:55 -05:00
B.Fatih KOZ
883e8786e0 Formatting on admin pirep page #952
* Fix For Issue #952 / Admin Pirep Display

Removed unnecessary div tags to fix the broken display problem, defined the div class with a php code

* Fix and Update for Admin Pirep Index

Fixed the page width problem and search error , added the ability to also search for Rejected and Accepted pireps.
2020-12-05 20:27:03 -05:00
B.Fatih KOZ
fb44b73f44 Fix METAR decoding (text correction only) (#950)
* Update Metar Decoding (Text Correction Only)

SKC means Sky Clear or Clear Skies.

Rest is ok

* Update MetarTest.php
2020-12-04 12:47:42 -05:00
B.Fatih KOZ
7379e93c46 Update simbrief_briefing.blade.php (#944)
1. Added ATC Prefile options for IVAO and VATSIM
2. Added TAF reports for Orig, Dest and Altn airports. (Technically TAF reports are required for flights more than 1 hour, so we need to see them on the briefing page too)
3. Adjusted the height of OFP division to match the page with the WX section changes
2020-12-04 11:20:12 -05:00
B.Fatih KOZ
d4bb5605de Update search.blade.php (#943)
Added the ability to select and search an airline's flights. Will be usefull in multiple airline installations/configs.

Co-authored-by: Nabeel S <nabeelio@users.noreply.github.com>
2020-12-04 11:12:41 -05:00
B.Fatih KOZ
8ecc096bf7 Update Latest Pireps Widget (#945)
Added flight number, used aircraft registration (and icao type) instead of name
2020-12-04 11:04:47 -05:00
Nabeel S
6b5cf38224 Calculate percentage properly instead of adding to the base value #925 (#942)
* Calculate percentage properly instead of adding to the base value #925
2020-11-26 16:44:57 -05:00
Nabeel S
2ecf366670 Add missing columns from subfleet export #926 (#941) 2020-11-26 13:34:04 -05:00
Nabeel Shahzad
a7981c0a87 Redirect to the subfleet aircraft list on save #932 2020-11-26 13:15:56 -05:00
Nabeel Shahzad
9cf07c47c7 Fix notifications error for collect() #937 2020-11-26 13:08:32 -05:00
Nabeel S
8f4219bc95 Download path size too small; fix migrations #935 (#940) 2020-11-26 13:03:59 -05:00
Nabeel Shahzad
eae345efa7 Fix dropping of unique index when table prefix is present #934 2020-11-26 12:27:26 -05:00
Nabeel Shahzad
be15426b5b Fix public path in application bootstrap #887 2020-11-23 13:39:26 -05:00
Nabeel Shahzad
7e4c652330 Log for avatar upload 2020-11-22 09:59:09 -05:00
Nabeel S
ced2c150b7 Change the body size to medium text #920 (#930)
Change the body size to medium text (16MB) #920
2020-11-20 12:00:37 -05:00
Nabeel Shahzad
a2de532f72 Merge branch 'dev' of https://github.com/nabeelio/phpvms into dev 2020-11-02 11:57:27 -05:00
Nabeel Shahzad
a52d844719 Set flight_id to be fillable 2020-11-02 11:57:25 -05:00
Timothy Sturm
fd814bc79e * Fixed broken links on README
* Fixed broken links on README

* Misc. edits to markdown formatting, Title Grammer, and Stylizing the phpVMS brand.
2020-10-31 18:43:00 -04:00
Nabeel Shahzad
0fa00206ce Make sure stdclass is returned in flight fields 2020-10-29 12:38:40 -04:00
Nabeel Shahzad
a58237b04b Allow flight_id to be nullable 2020-10-27 21:47:19 -04:00
Nabeel S
dc7efc981c Refactor fares inheritance #905 (#906) 2020-10-27 18:46:15 -04:00
Yash Govekar
060bebf8fe Accept Pirep button not changing row inline #598 (#880) 2020-10-26 10:18:00 -04:00
Nabeel Shahzad
aaaf2e7c00 Make sure capacity is an integer 2020-10-24 16:04:09 -04:00
Nabeel S
1be68d1e63 Flight/Subfleet fares not returning in API #899 (#900)
Make sure proper fares are returned from the API #899
2020-10-24 15:11:08 -04:00
Nabeel Shahzad
b83f7dcac8 Updated seed data for dev 2020-10-24 09:26:14 -04:00
Nabeel S
c5de2fd8b1 Fix for base map/providers #895 (#897) 2020-10-23 08:08:41 -04:00
Nabeel S
b85d0e6a3e Expose Leaflet base options to templates #895 (#896) 2020-10-23 07:35:44 -04:00
Nabeel S
b37bd2cd7b Change award events handler to subscription #888 (#894) 2020-10-23 07:28:22 -04:00
Nabeel S
584d37f230 FlightRouteAwards - fix if last pirep is empty/other error conditions (#886) 2020-10-22 16:25:52 -04:00
Nabeel Shahzad
1c9d1c1733 Extra logs/skip module seed pending 2020-10-21 14:12:38 -04:00
Nabeel S
cd18442207 Fixes for installer/modules race condition (#883) 2020-10-21 13:28:54 -04:00
Yash Govekar
716ba38b6d Default values for automatically added airports #829 (#878) 2020-10-20 15:25:13 -04:00
Yash Govekar
c0514b381b Fixed exporting expenses (#877) 2020-10-19 15:22:06 -04:00
Yash Govekar
5803487d51 Installing and managing modules from admin panel (#847) 2020-10-19 10:10:28 -04:00
Snyk bot
ca220f1cdf fix: package.json & package-lock.json to reduce vulnerabilities (#873)
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-AJV-584908
- https://snyk.io/vuln/SNYK-JS-JQUERY-565129
- https://snyk.io/vuln/SNYK-JS-JQUERY-567880
- https://snyk.io/vuln/SNYK-JS-SELECT2-456562
- https://snyk.io/vuln/SNYK-JS-SOCKJS-575261
- https://snyk.io/vuln/SNYK-JS-WEBPACKDEVSERVER-72405
- https://snyk.io/vuln/SNYK-JS-YARGSPARSER-560381
- https://snyk.io/vuln/npm:mem:20180117
2020-10-16 11:01:24 -04:00
Nabeel Shahzad
75a0a4c87a Update FareService.php 2020-10-13 18:12:52 -04:00
Nabeel Shahzad
3b6800077f Preload fares with PIREP 2020-10-13 18:12:14 -04:00
Nabeel Shahzad
bf878a98a4 Extra logging around fares 2020-10-13 18:10:31 -04:00
DaGeek
d001704880 Adding a new AwardClass for Flight Time (#869)
Adding a new AwardClass for Flight Time
2020-10-13 17:07:12 -04:00
DaGeek
5371989921 Cosmetic Fix to display Award Images in Admin View (#870)
Fix to correctly display the Award image in the admin UI
2020-10-13 15:41:16 -04:00
DaGeek
6c553569bf Create FlightRouteAwards.php (#865)
Award - FlightRoute- this allows the Admins to create an Award that will be granted if a Pilot completes a flight with a defined Departure and Arrival Airport
2020-10-12 18:54:42 -04:00
Nabeel Shahzad
9eb7dd6913 Update doc links 2020-10-12 15:15:05 -04:00
Nabeel S
dc007f6d9e Bids are missing subfleets in API response #867 (#868)
Bids are missing subfleets in API response #867
2020-10-12 12:49:11 -04:00
Nabeel S
193fbd369d Show awards on user profile #703 (#866) 2020-10-11 16:06:09 -04:00
Botric
151f188886 Update pirep_card.blade.php (#857)
Update pirep_card.blade.php
2020-10-10 15:24:28 -04:00
Nabeel S
69d89511be Inherited value can't be removed #811 (#863)
Inherited value can't be removed #811
2020-10-10 15:24:10 -04:00
Nabeel S
48087fb05f Metar: TEMPO and trend causing issue with values being overwritten (#862)
Metar: TEMPO and trend causing issue with values being overwritten
2020-10-10 14:55:12 -04:00
Nabeel S
c702b01a87 Add tests that rank shouldn't auto change (#840) 2020-10-10 14:50:00 -04:00
DaGeek
0a5194b92e Small Cosmetic Change to Rank & Home Airport Display (#852)
Cosmetic Change to Rank & Home Airport Display
2020-10-09 17:45:16 -04:00
Nabeel Shahzad
24aca506fc Update UserController.php 2020-10-06 19:26:52 -04:00
Nabeel Shahzad
365e33f5f8 Redirect show() to edit() 2020-10-06 19:10:42 -04:00
Nabeel Shahzad
7a75e0f5ad Fix missing $countries 2020-10-06 18:52:34 -04:00
Botric
93da2ca061 Cosmetic change to standardise boxes on profile (#853) 2020-10-04 12:48:12 -04:00
vgpastor
5363e4aa0f Add API Key visual protection (#851)
Add API Key visual protection
2020-10-03 11:13:28 -04:00
Nabeel S
95a40d3565 Make sure proper subfleets are returned as part of the user profile #848 (#849)
* Make sure proper subfleets are returned as part of the user profile #848

* Formatting
2020-09-30 12:58:45 -04:00
Nabeel S
98aa362935 Fix subfleets not returning proper fare counts #831 (#846)
Fix subfleets not returning proper fare counts #831
2020-09-29 13:21:24 -04:00
Yash Govekar
b6603bd178 Updated Route Service Provider that was mismatching API and ADMIN Section (#845) 2020-09-29 13:09:00 -04:00
Yash Govekar
2c539d349d Fix controller namespace in module generation #714
Updated Module Files
2020-09-28 16:04:51 -04:00
Nabeel Shahzad
5df28eb027 Fix module main service provider name 2020-09-27 12:13:24 -04:00
yashris
0dbf8b8652 Public JS files Updated! (#839) 2020-09-27 09:03:46 -04:00
yashris
5856f88a0c Updated index.js inside Map folder (#837) 2020-09-24 09:56:52 -04:00
Nabeel Shahzad
5f9b9399e9 Use $current_airport 2020-09-23 14:39:10 -04:00
Nabeel S
77fe6679ce Update module generation #714 (#716)
* Update module generation #714

* Fix method signatures

* Fix paths within stubs, use single provider.stub file

* Add separate index controller

* Update module generation #714

* Fix method signatures

* Fix paths within stubs, use single provider.stub file

* Update module generation

Disable/lower the cache time as found as a workaround in https://github.com/nWidart/laravel-modules/issues/995

* Update editorconfig for line endings

* Formatting

* Formatting
2020-09-20 19:10:52 -04:00
Nabeel Shahzad
435fa32663 Fix aircraft field name #824 2020-09-15 15:41:53 -04:00
Nabeel Shahzad
78ca06e9dc Add optional() around aircraft info #824 2020-09-14 16:17:03 -04:00
Nabeel Shahzad
2dd3dd5814 Make sure we're getting only active expenses 2020-09-12 15:17:10 -04:00
Nabeel Shahzad
ac7a5a65e5 Update cron path 2020-09-11 16:57:50 -04:00
Nabeel Shahzad
c5ab0978db Force visible flag to true for imports #818 2020-09-11 09:18:27 -04:00
dependabot[bot]
8398d94c0a Bump js-yaml from 3.11.0 to 3.13.1 (#810)
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 3.11.0 to 3.13.1.
- [Release notes](https://github.com/nodeca/js-yaml/releases)
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/3.11.0...3.13.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-10 17:06:01 -04:00
Nabeel S
1db3295213 Disable autocomplete in admin forms #816 (#817) 2020-09-10 16:42:11 -04:00
Nabeel Shahzad
5dcbd01c00 Update links to some docs 2020-09-04 14:08:14 -04:00
Nabeel Shahzad
c6d12802a4 Fix link to assets docs 2020-09-04 13:32:39 -04:00
Nabeel Shahzad
07de33605b Switch toolchain from yarn to npm 2020-09-04 13:28:17 -04:00
Nabeel Shahzad
ec9ef9c1c2 Add notes to refer to docs when modifying the JS files 2020-09-04 11:50:05 -04:00
Nabeel Shahzad
23962a1abb Add fileinfo ext to requirements #735
closes #735
2020-09-04 11:28:33 -04:00
Nabeel Shahzad
9a735d2935 Update language for subfleet fare 2020-09-04 10:09:53 -04:00
Nabeel Shahzad
51004b143c Fix validator type for aircraft #805 2020-09-03 15:14:26 -04:00
Nabeel S
50a0b89caa Add MTOW and ZFW to aircraft editor #775 (#805)
Add MTOW and ZFW to aircraft editor #775
2020-09-03 13:29:24 -04:00
Nabeel S
e99c22b007 Notifications fixes (#804)
* Emails not sending #795 #722

* Fix for news items not being sent; refactor some events; check for opt-in #722

* Formatting

* Remove extra parameter
2020-09-03 12:50:42 -04:00
Nabeel Shahzad
55fa01478d Fix path for bootstrap file #798 2020-09-02 18:52:52 -04:00
Nabeel Shahzad
552196ce57 Fix root detection #798 2020-09-02 18:47:38 -04:00
Nabeel S
7aa089bd88 Update Laravel/composer dependencies (#803) 2020-09-02 18:15:05 -04:00
Nabeel S
1e4b0d629a Detect the phpvms folder one root level above #798 (#799) 2020-09-01 10:38:45 -04:00
Timothy Sturm
febfff5f12 Update MailChannel.php (#793)
Update from email #792
2020-08-21 15:54:26 -04:00
Nabeel S
cdf7b13b5b Allow any airport to be flown from #783 (#788)
Allow any airport to be flown from #783
2020-08-17 17:06:02 -04:00
Nabeel S
51186bed7c Fix for aircraft not being detected at departure airport #781 (#789)
Aircraft not being checked/detected at departure airport #781
2020-08-17 16:44:31 -04:00
Nabeel Shahzad
ac1dc49377 Replace IP in test 2020-08-15 13:54:01 -04:00
Nabeel Shahzad
be72571185 Check if the root domain is an IP address 2020-08-15 13:50:58 -04:00
Nabeel Shahzad
d3e6d2c49a Add extra logging for user not being at proper airport 2020-08-14 10:26:21 -04:00
Nabeel S
4fa58cec5a Fix clear cache errors with duplicate route names #759 (#787) 2020-08-13 17:53:30 -04:00
Nabeel S
27316f96e8 Fix missing user fields #785 (#786) 2020-08-13 17:44:41 -04:00
Nabeel Shahzad
e5ed66b372 Fix attribute type for PIREP status 2020-08-12 22:02:20 -04:00
Nabeel Shahzad
ee6982f558 Build fix/StyleCI 2020-08-12 14:46:08 -04:00
Nabeel Shahzad
4f46e75515 Check for active flag for user fields in registration 2020-08-12 14:39:00 -04:00
dependabot[bot]
3ac03d9716 Bump elliptic from 6.5.2 to 6.5.3 (#780)
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.2...v6.5.3)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nabeel S <nabeelio@users.noreply.github.com>
2020-08-12 09:26:22 -04:00
Nabeel Shahzad
ace7c42557 Fix typo for unique email check 2020-08-12 09:06:18 -04:00
Nabeel S
3ebf4f2924 Custom user fields #711 (#772)
Custom user fields during registration and profile edit #711
2020-08-11 17:48:51 -04:00
dependabot[bot]
3739cc8e91 Bump lodash from 4.17.15 to 4.17.19 (#770)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-11 17:48:16 -04:00
Nabeel S
bbb5f1d13c Check for null values when checking pilot ID #760 (#768) 2020-07-14 22:02:35 -04:00
Nabeel S
64e4c91e7e Check public pages for authorization #761 2020-07-10 13:11:38 -04:00
Nabeel S
3e2b1fe42b Add spacing to fare labels #763 (#766) 2020-07-10 09:51:33 -04:00
Nabeel S
420bd7e4ae Add ability to use a link instead of a page #750 (#757)
Add ability to use a link instead of a page #750
2020-06-11 08:27:38 -04:00
Nabeel S
e4b1c238f3 Add ACARS update event #755 (#756) 2020-06-09 09:10:40 -04:00
Nabeel S
57e91027c8 Fix the search route for pending PIREPs #752 (#754) 2020-06-08 09:55:57 -04:00
dependabot[bot]
475ad3a66d Bump websocket-extensions from 0.1.3 to 0.1.4 (#753)
Bumps [websocket-extensions](https://github.com/faye/websocket-extensions-node) from 0.1.3 to 0.1.4.
- [Release notes](https://github.com/faye/websocket-extensions-node/releases)
- [Changelog](https://github.com/faye/websocket-extensions-node/blob/master/CHANGELOG.md)
- [Commits](https://github.com/faye/websocket-extensions-node/compare/0.1.3...0.1.4)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-06-08 08:56:31 -04:00
Nabeel S
340f52112d Fix public pages not showing properly #708 (#749) 2020-06-05 12:49:22 -04:00
Nabeel Shahzad
c6482bd160 Add last_pirep test 2020-06-05 09:19:18 -04:00
Nabeel Shahzad
df15053b75 Remove trailing comma 2020-06-04 14:05:51 -04:00
Nabeel S
04b8be1649 Add show_datetime_format(); optional default timezone parameter #741 (#746) 2020-06-04 11:34:30 -04:00
Nabeel S
3d211535f7 Remove Google Analytics #728 (#745)
* Remove Google Analytics #728

* Remove config file

* Don't set the vacentral url
2020-06-04 10:36:55 -04:00
Nabeel S
c1408cb8fe Fleet properties not saving #731 (#744) 2020-06-04 08:39:20 -04:00
Nabeel S
519ae600d5 Fix METAR invalid parameter #738 (#743) 2020-06-04 06:30:35 -04:00
Nabeel S
82bae9cc74 Update the flash messages #739 (#742) 2020-06-04 06:11:57 -04:00
Nabeel S
3a07e34259 Add pt-br language #736 (#737)
Add pt-br language #736
2020-06-02 09:10:26 -04:00
Nabeel S
89ca0b49a2 Merge pull request #730 from nabeelio/729-Multi-Expenses
All airports' expenses being applied to PIREP #729
2020-05-26 19:39:29 -04:00
Nabeel Shahzad
5b16c88bcb Fix for all airport expenses being applied #729 2020-05-26 19:13:15 -04:00
Nabeel S
c67e45e98e Merge pull request #727 from nabeelio/724-Db-Memory-Syntax-Error
Fix params for launching process #724
2020-05-23 13:02:34 -04:00
Nabeel Shahzad
688be6f75a Fix params for launching process #724 2020-05-23 12:53:39 -04:00
Nabeel S
8527b39fe2 Merge pull request #725 from nabeelio/718-Airline-Active
Check for airline being active; fix tests for L7 #718
2020-05-23 11:55:26 -04:00
Nabeel Shahzad
a443908bed Frontend flight controller for active airlines 2020-05-23 11:48:48 -04:00
Nabeel Shahzad
c46fc9171c Check for airline being active; fix tests for L7 #718 2020-05-23 11:45:07 -04:00
Nabeel S
71c09aaeb1 Merge pull request #721 from nabeelio/715-Error-Page-Skins
Use theme in error handlers #715
2020-05-23 09:18:07 -04:00
Nabeel Shahzad
5046d26032 Explicitly set theme in error handler, refactor middleware #715 2020-05-23 09:05:38 -04:00
Nabeel S
4cd7eef937 Merge pull request #720 from nabeelio/719-Login-On-Leave
Allow on-leave user to login
2020-05-23 07:47:10 -04:00
Nabeel Shahzad
f17cd15b01 Allow on-leave user to login; show alert message and ensure status is updated #719 2020-05-23 07:20:55 -04:00
Nabeel S
5f8053226e Merge pull request #717 from nabeelio/715-Theme
Apply theme globally; add mail templates into theme folder #715
2020-05-22 21:49:22 -04:00
Nabeel Shahzad
09cd7adb6b Apply theme globally; add mail templates into theme folder #715 2020-05-22 19:00:54 -04:00
Nabeel S
fb7d988032 Merge pull request #712 from nabeelio/707-Module-Enable
Make sure the Updater module is enabled #707
2020-05-21 22:44:59 -04:00
Nabeel Shahzad
eb90d08761 Make sure the Updater module is enabled #707 2020-05-21 22:12:09 -04:00
Nabeel S
1ebb181c36 Merge pull request #710 from nabeelio/707-Update-Error
Auto-Update fixes #707
2020-05-21 12:28:52 -04:00
Nabeel Shahzad
975ee9b88e Fix for update showing available when one isn't #707 2020-05-21 11:50:13 -04:00
Nabeel S
52379c3789 Merge pull request #705 from nabeelio/704-Acars-Map-Center
Fix error with map centering on invalid layers #704
2020-05-19 18:47:27 -04:00
Nabeel Shahzad
bcf7acf957 Fix error with map centering on invalid layers #704 2020-05-19 18:07:38 -04:00
Nabeel S
3b1936e110 Merge pull request #699 from nabeelio/698-Login-Pilot-Id
Enable logins using pilot ID #698
2020-05-16 11:59:03 -04:00
Nabeel Shahzad
b9aeda1cba Enable logins using pilot ID #698 2020-05-16 11:52:05 -04:00
Nabeel S
00505a1607 Merge pull request #697 from nabeelio/673-Laravel-7
Laravel 7 support #673
2020-05-16 09:37:36 -04:00
Nabeel Shahzad
6ebbe0209e Formatting 2020-05-15 18:38:43 -04:00
Nabeel Shahzad
5754103a17 Bump minimum PHP version to 7.3 2020-05-15 18:22:24 -04:00
Nabeel Shahzad
6078163d75 Initial pass at Laravel 7 support #673 2020-05-15 18:20:23 -04:00
Nabeel S
885e1d599e Merge pull request #696 from nabeelio/693-Public-Folder-Permissions
Installer: Use absolute paths for permissions check #693
2020-05-15 15:56:07 -04:00
Nabeel Shahzad
876457af71 Use absolute paths for permissions check #693 2020-05-15 15:45:54 -04:00
Nabeel S
8c75bd098e Merge pull request #695 from sebiecker/dev
Update Permissions Seed
2020-05-15 12:21:30 -04:00
Sebastian Ecker
585c9578e8 Update Permissions Seed
Aircraft is missing in Permissions Seed
2020-05-15 17:51:41 +02:00
Nabeel S
78ee1a9769 Merge pull request #690 from nabeelio/7.0.0-beta.4
7.0.0-beta.4
2020-05-09 12:31:35 -04:00
Nabeel Shahzad
7cd01a24d6 Update CHANGELOG 2020-05-09 12:24:23 -04:00
Nabeel Shahzad
d5ea0952f5 Merge branch '7.0.0-beta.4' into dev 2020-05-09 11:57:23 -04:00
Nabeel S
1054d53826 Emails/notifications not sending #675 (#686)
* Add test call to test notification #675

* Fix queue driver with emails not sending; formatting #675
2020-05-09 11:31:25 -04:00
foo barf
69fb5a537e typo in dependency on 'leaflet.geodesic' (#687) 2020-05-09 10:37:58 -04:00
Nabeel S
5b771be653 Fix flight hours field #683 (#684) 2020-05-05 14:36:14 -04:00
Nabeel S
9135337186 Blank/null IATA code isn't unique when added #679 (#681) 2020-05-03 18:23:46 -04:00
Nabeel S
95608dbb79 Merge pull request #682 from nabeelio/680-METAR-Parse-Error
METAR: KM as unit in visibility #680
2020-05-03 11:48:42 -04:00
Nabeel Shahzad
a8fb8e93c8 METAR: KM as unit in visibility #680 2020-05-03 11:08:06 -04:00
Nabeel S
2ea18ae1c6 Fix airline creation logic in installer #677 (#678) 2020-05-02 15:09:27 -04:00
Nabeel S
99f4f3b3d8 Change currency from settings #671 (#672) 2020-04-26 11:55:20 -04:00
Nabeel S
03cfc648b0 Create journal when new airline is created #667 (#670) 2020-04-26 10:31:58 -04:00
Nabeel S
866d95c945 Check for SB being avail before filing #668 (#669) 2020-04-26 10:23:42 -04:00
Nabeel Shahzad
b21201c122 Fix test 2020-04-15 15:16:54 -04:00
Nabeel Shahzad
209b2790b6 Fix URL to briefing 2020-04-15 15:12:57 -04:00
Nabeel Shahzad
90a0a8cfee Add mock SB API key 2020-04-15 10:28:21 -04:00
Nabeel S
8e97a7cc5c Load Simbrief and flight data when getting bids #664 (#665) 2020-04-15 10:11:06 -04:00
Nabeel S
b1bdd40da7 Fix pilots page now showing up #655 (#660) 2020-04-06 18:12:55 -04:00
Nabeel S
40a94cb9ad Add privatized version of name #656 (#658) 2020-04-06 12:03:19 -04:00
Nabeel Shahzad
3c0cd34071 Trim list_to_assoc items 2020-04-02 17:54:40 -04:00
Nabeel S
261984ee90 Fix PirepComment response; 201 to 200 (#654) 2020-04-01 01:05:09 -04:00
Nabeel Shahzad
e8037c7d69 Return full PIREP when updating 2020-03-31 23:42:33 -04:00
Nabeel Shahzad
6f05dd6c86 Add full user response to PIREP API call 2020-03-31 23:32:50 -04:00
Nabeel Shahzad
072d5f76bb Formatting for StyleCI 2020-03-31 17:34:10 -04:00
Nabeel Shahzad
d1d243ef06 Update response objects 2020-03-31 17:26:55 -04:00
Nabeel S
819d3bcb47 Upgrade packages with security alerts (#653) 2020-03-31 12:36:33 -04:00
Nabeel S
60f378f584 Add Simbrief entries as sample data for load #651 (#652) 2020-03-31 12:32:11 -04:00
Nabeel Shahzad
6978fbf2e0 Fix API tests 2020-03-29 15:35:40 -04:00
Nabeel Shahzad
11b1c2b763 Fix tests for API 2020-03-29 15:19:23 -04:00
Nabeel Shahzad
655ac66b52 Formatting 2020-03-29 15:05:56 -04:00
Nabeel Shahzad
e9b30fbe30 Make sure user and acars data is sent from API 2020-03-29 13:33:14 -04:00
Nabeel S
82b873c071 Domain detection failing for .co.uk, etc #647 (#648)
* Fix domain name detection #647

* Ignore page links check if no DB configured #641
2020-03-28 19:07:46 -04:00
Nabeel S
3e7d5f6195 Use theme check in all frontend routes #638 (#645) 2020-03-28 14:45:25 -04:00
Nabeel Shahzad
ba0ae05c2a Make icon column nullable #641 2020-03-28 14:01:53 -04:00
Nabeel S
45873431e4 Add public/private pages #641 (#644)
* Add public/private pages #641

* Cleanup the form requests
2020-03-28 13:03:52 -04:00
Nabeel S
4a3ec38919 Option for SB only on bids; add the new file type #642 (#643)
Option for SB only on bids; add the new file type #642
2020-03-27 11:49:19 -04:00
Nabeel S
f3fe3a56ba Don't return bids by default, fix user flight column #639 (#640)
Fix the user api response, don't return bids by default, fix flights column #639
2020-03-25 18:04:26 -04:00
Nabeel Shahzad
88e8ea6ed1 Add total flights 2020-03-25 17:02:48 -04:00
Nabeel Shahzad
cce575c1a6 Fix avatar/gravatar call throwing error 2020-03-25 10:58:03 -04:00
Nabeel Shahzad
eafea01e22 Fix gravatar url check 2020-03-24 18:54:04 -04:00
Nabeel Shahzad
62cea3eb0c Load the user airline/bid ahead of time; SB XML name fix 2020-03-24 16:17:28 -04:00
Nabeel Shahzad
3f7a7d0f2e Remove empty fields from user return, add avatar 2020-03-24 15:53:59 -04:00
Nabeel S
877d5a5479 Account for admin role, don't error out on null rows #632 (#637) 2020-03-23 11:50:15 -04:00
Nabeel S
9e5386264f SimBrief integration #405 (#635)
* SimBrief integration #405

* Add briefing as API response; add acars_xml field #405
2020-03-23 09:31:35 -04:00
Nabeel Shahzad
04b9e37e1d Fix formatting 2020-03-09 16:40:06 -04:00
Nabeel Shahzad
8998dabb3d Drop the unique index from subfleets.type #628 2020-03-09 16:39:07 -04:00
Nabeel Shahzad
e458a761d3 Include airline name in subfleet name #628 2020-03-09 16:20:04 -04:00
Nabeel Shahzad
3443f6b31e Check for empty on airline id #628 2020-03-09 16:06:54 -04:00
Nabeel S
2a03d53b3f Fix airline mapping for aircraft #628 (#633) 2020-03-09 15:06:36 -04:00
Nabeel S
412919fe21 Account ICAO for subfleet, airline/location if columns exist #628 (#632) 2020-03-09 13:40:10 -04:00
Nabeel S
80b20a8b25 Increase ID column size; seed ID generator with uniqid() #630 (#631) 2020-03-09 13:16:10 -04:00
Nabeel S
2c238763cb Disable using apc/opcache by default if found #625 (#629) 2020-03-09 13:08:07 -04:00
Nabeel S
2846a78d2a Fix saving of fare #621 (#624) 2020-03-06 16:54:53 -05:00
Nabeel S
632c5782de Add fare type for pax/cargo/mixed flights #621 (#623) 2020-03-06 15:10:03 -05:00
Nabeel S
9f3ddd5dbd Add fixed pilot pay for a flight #487 (#622) 2020-03-06 11:36:02 -05:00
Nabeel S
16c977c769 Add load_factor and load_factor_variance to flights #352 (#620) 2020-03-05 20:19:12 -05:00
Nabeel S
9ed2e3f9f4 API: Flight fields are an array when empty #618 (#619)
* Ensure 'fields' field is return as an object for flights #618
* Eager loading for flight fields
2020-03-04 18:14:03 -05:00
Nabeel S
174b602d7c Remove the flight fields link from admin #614 (#615)
* Remove the flight fields link from admin #614

* Change flight_field_value col to be nullable

* Fix updater design
2020-03-04 09:49:51 -05:00
Nabeel Shahzad
b1e745844a Restore theme db lookup 2020-03-04 08:54:55 -05:00
Nabeel S
89481b5fa1 HTTP/HTTPS mixed content errors #612 (#613)
* Configure TrustProxies middleware
* Add trusted proxies to deps
* Replace jquery request with axios request code
* Trust current user IP for forwarded headers
* Update dependencies
* Downgrade self-updater package for PHP 7.2
2020-03-03 10:20:13 -05:00
Nabeel Shahzad
dcf9f48364 Add ID column to fare #608 2020-03-02 17:38:48 -05:00
Nabeel Shahzad
f1902a5faa Fix setting repo resolution 2020-03-02 16:21:53 -05:00
Nabeel Shahzad
3cd6c8ee82 Fix cost/code field #608 2020-03-02 16:08:58 -05:00
Nabeel Shahzad
83a0007b7d Return response from middleware 2020-03-02 15:58:53 -05:00
Nabeel S
b78c1b935e Include fare information in subfleet response #608 (#609) 2020-03-02 15:36:01 -05:00
Nabeel Shahzad
fa89416e5b Fix docs/comments 2020-03-02 10:50:39 -05:00
Nabeel S
4a14e83c88 Performance improvements #602 (#607)
* Update gitignore

* Save theme to the session to avoid a lookup #602

* Formatting

* Move routes into main service provider

* Move Observers into their own service provider
2020-03-01 15:51:00 -05:00
Nabeel S
21e2e48a6e Center on active flights #605 (#606) 2020-03-01 12:41:09 -05:00
Nabeel Shahzad
a040e288de Merge branch 'dev' of github.com:nabeelio/phpvms into dev 2020-03-01 11:18:39 -05:00
Nabeel S
f78d065858 Aircraft status field blank causes error #603 (#604)
* Update composer lock file

* Require aircraft status #603
2020-03-01 11:18:23 -05:00
Nabeel Shahzad
660c5303cb Update composer lock file 2020-02-29 22:21:03 -05:00
Nabeel S
ea9ee985e8 METAR parsing infinite loop bugfix #599 (#600)
METAR parsing infinite loop bugfix #599
2020-02-28 22:50:41 -05:00
Nabeel S
b0f122a301 Table prefixes not being added to indexes (#597)
* Enabled prefixes on any created indexes (multi-site install in single db)

* Formatting

* Check if enum label is looking for a translation

* Return value

* Fix view namespace across modules
2020-02-28 18:56:01 -05:00
Nabeel S
2f40f4737c Installer fixes, remove bcmath, fix design (#596)
* Installer cleanup

* Installer design fixes
2020-02-28 18:00:56 -05:00
Nabeel S
7e742518bc Module/plugin installation working #593 (#594)
* Remove the Sample module

* 593-Fix-Modules-From-Composer

* Fix pre/post install scripts in composer #593

* Formatting
2020-02-28 16:06:45 -05:00
Nabeel S
dbaac04eea Remove airport length restrictions #590 (#592) 2020-02-27 11:37:05 -05:00
Nabeel S
f2b216c404 Remove 4 char restriction from ICAO; use decimal type for lat/lon #590 (#591)
* Remove 4 char restriction from ICAO; use decimal type for lat/lon #590

* Reorder imports
2020-02-26 17:06:39 -05:00
Nabeel S
14aacdfb75 Import expense and ledger entries #443 (#588)
* Fix rank importing with PIREP pay #443

* Import ledger information #443

* Uncomment out testing importers

* Import expense log and settings #443

* Formatting
2020-02-25 14:45:23 -05:00
Nabeel S
07a75de0bf Recalcuate aircraft stats in nightly cron and importer #585 #443 (#587) 2020-02-24 19:35:28 -05:00
Nabeel S
30786b7b27 Set the payrate for the ranks #443 (#586) 2020-02-24 17:52:49 -05:00
Nabeel S
11bbcd1df7 User country mapping; ignore unused groups #443 (#584)
* Fix the user country import #443

* Ignore the old "core" groups because they're unused #443

* Properly sync roles and individual permissions #443
2020-02-24 15:12:36 -05:00
Nabeel Shahzad
342fe31ceb Move full version check below the version write 2020-02-23 21:15:44 -05:00
Nabeel Shahzad
c6f46ee4cb Debug output for version 2020-02-23 21:08:59 -05:00
Nabeel Shahzad
574768262d Include full build id 2020-02-23 20:59:09 -05:00
Nabeel Shahzad
24e2576645 Write out full version to log 2020-02-23 20:49:11 -05:00
Nabeel S
dfbaa1afd3 Fix rowmapper generator, check for fields, map users #443 (#583)
* Fix rowmapper generator, check for fields, map users #443

* Formatting

* Remove value store at the end of the import

* Update the notes for the importer about users

* Uncomment importers disabled during testing
2020-02-23 19:48:28 -05:00
Nabeel S
a1d6fa17ad Respect home hubs setting for registration #580 (#581)
Respect home hubs setting for registration #580
2020-02-23 17:21:26 -05:00
Nabeel S
b34dc4868e Change fuel used to optional #512 (#582) 2020-02-23 16:01:09 -05:00
Nabeel S
0e13905098 Upstream null version; build version tags not being saved properly #575 (#578)
* Check for null version from upstream #575

* Fix for pre-release version numbering

* Move popup to right

* Split get/generate build ID #575
2020-02-23 12:23:19 -05:00
Nabeel S
b9fe8bf738 Fix edit pilot error #576 (#577) 2020-02-23 09:56:43 -05:00
Nabeel S
9ed07da9c3 Upsert on ACARS positions #572 (#573) 2020-02-22 16:03:01 -05:00
Nabeel S
6e87f7804c Fix the namespace path on updater templates #570 (#571) 2020-02-21 20:36:27 -05:00
Nabeel S
cc23c32db7 Route not found error for Pirep::resource() call #559 (#565) 2020-02-20 12:42:22 -05:00
Nabeel S
0297ec3746 Add bcmath to the required extensions list #558 (#564) 2020-02-20 11:36:47 -05:00
Nabeel S
da575932a7 Add extra check for being set #560 (#563) 2020-02-20 11:36:26 -05:00
Nabeel S
c0fbc7d491 Missing on bids page #561 (#562) 2020-02-20 10:49:15 -05:00
Nabeel S
0060f794ae Refresh theme cache on settings page load #554 (#557) 2020-02-18 17:10:31 -05:00
Nabeel S
9304daea7a Add the argc_argv flag for the cgi exec #553 (#556) 2020-02-18 17:01:00 -05:00
Nabeel S
8300a69ad5 Fix migrations when table prefix is involved #442 (#555)
* Fix migrations when table prefix is involved #442

* Formatting
2020-02-18 08:23:32 -05:00
Nabeel S
2d36376e29 Add logo to the flights page if its set #417 (#550) 2020-02-14 18:54:05 -05:00
Nabeel S
77f2138a1c Add Google Analytics tracking ID to settings and to main template #382 (#551) 2020-02-12 18:28:11 -05:00
Nabeel S
b9993b9c23 Set expenses on specific flight types #348 (#549)
* Set expenses on specific flight types #348

* Formatting

* Use strict check for in_array
2020-02-12 10:40:52 -05:00
Nabeel Shahzad
f16af4d9b1 Remove extraneous flight time text 2020-02-11 13:59:42 -05:00
Nabeel S
f392bf1cb8 Add additional events for PIREP states #436 (#548) 2020-02-11 13:56:20 -05:00
Nabeel Shahzad
39159e2c2e Travis check condition flipped 2020-02-11 13:25:54 -05:00
Nabeel Shahzad
018f6b62f6 Fix mv command 2020-02-11 13:23:43 -05:00
Nabeel Shahzad
4229366585 Specify file paths 2020-02-11 13:17:56 -05:00
Nabeel Shahzad
9fa395a061 Fix directory for tar file 2020-02-11 13:11:22 -05:00
Nabeel Shahzad
8b417ce1a8 Travis fix 2020-02-11 13:04:15 -05:00
Nabeel Shahzad
1d53497424 Fix cleanup tag 2020-02-11 12:39:21 -05:00
Nabeel Shahzad
07917f4ed2 Enable PHP 7.2/7.3 version 2020-02-11 12:33:21 -05:00
Nabeel S
b36a3009dd Cleanup Utils #467 (#547)
* Remove Utils Facade
2020-02-11 12:32:41 -05:00
Nabeel S
be6c164f03 Add checkbox to clear previous data when importing #490 (#546)
* Add checkbox to clear previous data when importing #490
2020-02-11 10:51:18 -05:00
Nabeel S
99118daad9 Auto update #449 (#545)
* Add custom repository type for updates

* Direct to self update module

* Formatting
2020-02-10 17:47:46 -05:00
Nabeel Shahzad
3fcd378f91 Remove subfolder when building the tar 2020-02-10 15:10:06 -05:00
Nabeel Shahzad
6c0d0e08e3 Zip package upload 2020-02-10 13:01:13 -05:00
Nabeel Shahzad
d234a0beb2 Update required runtime 2020-02-10 12:57:39 -05:00
Nabeel Shahzad
7a0e5f0ef4 Zip file creation fix 2020-02-10 12:54:59 -05:00
Jorge Cabal
2e1bcc1d7a Spanish files translation (#542)
Co-authored-by: Jorge Cabal <jcabala14>
2020-02-10 12:50:54 -05:00
Nabeel S
6b79ad7e58 Auto-update functionality #449 (#544)
* Convert tar to zip file for updater

* Add update section to maintenance
2020-02-10 12:39:59 -05:00
Nabeel S
90e1b3317d Distro zip file from tar file #449 (#543)
* Create zip file from tar file

* Formatting
2020-02-10 10:40:42 -05:00
Nabeel S
073e48c396 7.0.0-beta3 Release (#541)
* 391 Notification refactorings (#441)

* Refactor notifications to allow easier plugins

* Notification refactoring

* Formatting

* Move news to NewsService; cleanup of events

* More refactoring; added send email out for news item and the template

* Formatting

* Formatting

* Fix missing newsRepo (#445)

* Refactor and add importer to Installer module #443 (#444)

* Refactor and add importer to Installer module #443

* Refactor for finances to use in import

* Import groups into roles

* Formatting

* Formatting

* Add interface in installer for import

* Notes about importing

* Check for installer folder

* Formatting

* Fix pirep->user mapping

* Unused import

* Formatting

* Replace importer with AJAX powered; better error handling #443 (#447)

* Replace importer with AJAX powered; better error handling #443

* Formatting

* Fix command line importer

* Remove bootstrap cache (#448)

* Cleanup the bootstrap/cache directory when packaging

* Fix removal of bootstrap cache

* Formatting

* Stricter checks on ACARS API data (#451)

* Stricter checks on ACARS API data

* More checks

* Fix for flight_number check forcing to exist

* Allow nullable on flight_id

* Avoid proc_open use #455 (#456)

* Use PhpExecutableFinder() closes #457 #458 (#460)

* Use DateTimeZone instead of int for creating datetime

closes #461

* Fix CSV imports giving Storage class not found #454 (#462)

* Fix CSV imports giving Storage class not found #454

* Update yarn files for security alert

* Add PHP 7.4 support (#464)

* Add PHP 7.4 to build matrix

* DB fix

* YAML parser fix in test data

* Show versions

* Package updates

* Track used ICAOs

* 7.4 METAR parsing fix

* METAR parser fix

* Formatting

* Add meters to response units

* Call instance for unit conversion

* Return value

* Catch exception for unknown quantity

* Comment fix

* Formatting

* METAR parsing fixes on PHP 7.4

* Package updates

* More random airport ID

* More random airport ID

* Properly disable toolbar

* Semver written out to version file

* Use dev as default identifier

* Fix BindingResolutionError when debug toolbar isn't present (#465)

* Fix BindingResolutionError when debug toolbar isn't present

* Formatting

* Split the importer module out from the installer module (#468)

* Split the importer module out from the installer module

* Cleanup of unused imports

* Move updater into separate module #453

* Remove unused imports/formatting

* Disable the install and importer modules at the end of the setup

* Unused imports; update IJ style

* test explicit stage for php+mysql

* add more to matrix

* Add different MariaDB versions

* undo

* Cleanup Model doc

* Pilots cannot use the dashboard or flights without admin rights (#481)

* Use auth middleware instead of specific groups for logged in state

* Auth check for admin access

* Check user admin access for updates

* Formatting

* Allow nullable field and calculate distance if nulled for flight import #478 (#482)

* Check for no roles being attached #480 (#483)

* Return the flight fares if there are no subfleet fares #488 (#489)

* Return the flight fares if there are no subfleet fares #488

* Formatting

* Formatting

* Account for units when entering fuel amounts #493

* Search for ICAO not working properly (#496)

* /flights and /flights/search direct to the same endpoint

* Properly set the distance/planned_distance on save (#497)

* 491 Installation Error (#495)

* Disable CSRF token

* Add error handling around looking up the theme and set a default

* Note about logs in issue template

* Formatting

* Fix GeoService errors when viewing PIREP #498 (#499)

* Add new command to export a specific PIREP for debugging (#501)

* Set a default model value for airports on PIREP (#500)

* Set a default model value for airports on PIREP

* Fix airport icao reference

* Default airport models

* Catch broader exception writing out config files #491

* style

* Add reference to docs on doc site (#502)

* Properly create/update rows importing #486 (#503)

* Add base Dockerfile for Dockerhub builds (#504)

* New subfleet not being attached to an airline on import #479 (#505)

* Fix subfleet not being attached to an airline on creation in import #479

* Call airline name with optional() around subfleet

* Minor cleanup

* Search flights by subfleet #484 (#506)

* API level search of flights #484

* Add Subfleet to flights page for search

* Make the fuel used optional (#512)

* Add make to Docker container

* Add getRootDomain() to Utils (#514)

* Show admin dropdown for admin-access ability (#515)

* Show admin dropdown for admin-access ability closes #509

* Formatting

* Check user permissions on the routes #508 (#516)

* Check user permissions on the routes #508

* Formatting

* Return default value on exception for setting()

* Correct text for no subfleets #507 (#518)

* Add a public_url() helper #513 (#519)

* Reduce number of queries for update check (#520)

* Try to clear caches before updating (#522)

* Try to clear caches before updating

* Add clear-compiled to maintenance cache list

* Formatting

* Set PIREPs page to public (#526)

Set PIREPs page to public

* Fix live and route map errors #527 (#528)

* Add menu bar for mobile (#529)

* Format all blade templates to 2 spaces #530 (#531)

* Fix PIREP edit endpoint closes #533 (#534)

* Fix import during flight cron #532 (#535)

* PIREPS resource except for show (#536)

* Use optional() around the airport fields (#537)

* Use optional() around the airport fields

* Add null-coalesce around full_name

* Add link to download ACARS config from profile (#539)

* Add link to download ACARS config from profile

* Formatting

* Update xml config file template (#540)
2020-02-08 13:29:34 -05:00
Nabeel S
989e86ecd3 Update xml config file template (#540) 2020-02-07 21:25:59 -05:00
Nabeel S
dd9fbdb6f1 Add link to download ACARS config from profile (#539)
* Add link to download ACARS config from profile

* Formatting
2020-02-07 13:29:43 -05:00
Nabeel S
94cfbd4748 Use optional() around the airport fields (#537)
* Use optional() around the airport fields

* Add null-coalesce around full_name
2020-02-03 12:23:58 -05:00
Nabeel S
5e4a003a92 PIREPS resource except for show (#536) 2020-02-01 14:14:37 -05:00
Nabeel S
893e28eb3a Fix import during flight cron #532 (#535) 2020-02-01 13:54:30 -05:00
Nabeel S
8cde3c93b0 Fix PIREP edit endpoint closes #533 (#534) 2020-02-01 13:37:40 -05:00
Nabeel S
59d09c0cec Format all blade templates to 2 spaces #530 (#531) 2020-02-01 13:05:56 -05:00
Nabeel S
06b47d97e0 Add menu bar for mobile (#529) 2020-01-31 14:32:43 -05:00
Nabeel S
03184db2fe Fix live and route map errors #527 (#528) 2020-01-31 13:57:21 -05:00
Nabeel S
45b8d737e4 Set PIREPs page to public (#526)
Set PIREPs page to public
2020-01-31 09:35:33 -05:00
Nabeel S
51b50972c8 Try to clear caches before updating (#522)
* Try to clear caches before updating

* Add clear-compiled to maintenance cache list

* Formatting
2020-01-30 14:59:48 -05:00
Nabeel S
3c1b433c29 Reduce number of queries for update check (#520) 2020-01-30 12:44:59 -05:00
Nabeel S
f0719d4d8d Add a public_url() helper #513 (#519) 2020-01-30 11:06:51 -05:00
Nabeel S
f5bc087f38 Correct text for no subfleets #507 (#518) 2020-01-30 11:04:22 -05:00
Nabeel S
02b16d5e57 Return default value on exception for setting() 2020-01-30 10:54:51 -05:00
Nabeel S
63b574181a Check user permissions on the routes #508 (#516)
* Check user permissions on the routes #508

* Formatting
2020-01-30 09:23:31 -05:00
Nabeel S
ff913e5304 Show admin dropdown for admin-access ability (#515)
* Show admin dropdown for admin-access ability closes #509

* Formatting
2020-01-30 09:00:41 -05:00
Nabeel S
e431f75ad4 Add getRootDomain() to Utils (#514) 2020-01-28 12:42:46 -05:00
Nabeel Shahzad
819ebece6d Add make to Docker container 2020-01-28 10:12:40 -05:00
Nabeel S
df832088d5 Make the fuel used optional (#512) 2020-01-22 10:33:10 -05:00
Nabeel S
2415caab54 Search flights by subfleet #484 (#506)
* API level search of flights #484

* Add Subfleet to flights page for search
2020-01-16 17:36:03 -05:00
Nabeel S
d03a77bd4b New subfleet not being attached to an airline on import #479 (#505)
* Fix subfleet not being attached to an airline on creation in import #479

* Call airline name with optional() around subfleet

* Minor cleanup
2020-01-16 14:23:23 -05:00
Nabeel S
6fcbd603ba Add base Dockerfile for Dockerhub builds (#504) 2020-01-16 11:49:22 -05:00
Nabeel S
c2f7c5e421 Properly create/update rows importing #486 (#503) 2020-01-16 10:40:42 -05:00
Nabeel S
fa01c61677 Add reference to docs on doc site (#502) 2020-01-16 09:49:28 -05:00
Nabeel Shahzad
b7b0ac0a73 style 2020-01-15 13:59:02 -05:00
Nabeel Shahzad
bf24ffb1ba Catch broader exception writing out config files #491 2020-01-15 13:57:56 -05:00
Nabeel S
831b72fb2b Set a default model value for airports on PIREP (#500)
* Set a default model value for airports on PIREP

* Fix airport icao reference

* Default airport models
2020-01-15 13:00:58 -05:00
Nabeel S
de8046288b Add new command to export a specific PIREP for debugging (#501) 2020-01-15 11:50:42 -05:00
Nabeel S
7d07008871 Fix GeoService errors when viewing PIREP #498 (#499) 2020-01-15 09:09:58 -05:00
Nabeel S
d4da0a6d6a 491 Installation Error (#495)
* Disable CSRF token

* Add error handling around looking up the theme and set a default

* Note about logs in issue template

* Formatting
2020-01-14 13:55:24 -05:00
Nabeel S
aafc9680bf Properly set the distance/planned_distance on save (#497) 2020-01-14 13:45:22 -05:00
Nabeel Shahzad
9aded3a552 /flights and /flights/search direct to the same endpoint 2020-01-10 10:17:11 -05:00
Nabeel S
03284959d6 Search for ICAO not working properly (#496) 2020-01-10 09:41:32 -05:00
Nabeel Shahzad
4844692bd9 Account for units when entering fuel amounts #493 2020-01-09 07:34:05 -05:00
Nabeel S
74052e4542 Return the flight fares if there are no subfleet fares #488 (#489)
* Return the flight fares if there are no subfleet fares #488

* Formatting

* Formatting
2020-01-06 13:44:43 -05:00
Nabeel S
282cb4be95 Check for no roles being attached #480 (#483) 2019-12-26 09:42:03 +05:00
Nabeel S
4f4d0c266a Allow nullable field and calculate distance if nulled for flight import #478 (#482) 2019-12-25 17:16:34 +05:00
Nabeel S
17637c32d4 Pilots cannot use the dashboard or flights without admin rights (#481)
* Use auth middleware instead of specific groups for logged in state

* Auth check for admin access

* Check user admin access for updates

* Formatting
2019-12-25 13:31:09 +05:00
Nabeel Shahzad
66a1192739 Cleanup Model doc 2019-12-22 09:46:41 +05:00
Nabeel S
e862537a20 Split the importer module out from the installer module (#468)
* Split the importer module out from the installer module

* Cleanup of unused imports

* Move updater into separate module #453

* Remove unused imports/formatting

* Disable the install and importer modules at the end of the setup

* Unused imports; update IJ style

* test explicit stage for php+mysql

* add more to matrix

* Add different MariaDB versions

* undo
2019-12-12 15:07:35 -05:00
Nabeel S
a58bca390b Fix BindingResolutionError when debug toolbar isn't present (#465)
* Fix BindingResolutionError when debug toolbar isn't present

* Formatting
2019-12-11 15:12:31 -05:00
Nabeel S
e6d38f9338 Add PHP 7.4 support (#464)
* Add PHP 7.4 to build matrix

* DB fix

* YAML parser fix in test data

* Show versions

* Package updates

* Track used ICAOs

* 7.4 METAR parsing fix

* METAR parser fix

* Formatting

* Add meters to response units

* Call instance for unit conversion

* Return value

* Catch exception for unknown quantity

* Comment fix

* Formatting

* METAR parsing fixes on PHP 7.4

* Package updates

* More random airport ID

* More random airport ID

* Properly disable toolbar

* Semver written out to version file

* Use dev as default identifier
2019-12-11 12:57:18 -05:00
Nabeel S
1f65b744a0 Fix CSV imports giving Storage class not found #454 (#462)
* Fix CSV imports giving Storage class not found #454

* Update yarn files for security alert
2019-12-10 13:53:55 -05:00
Nabeel S
d9a1e6aba7 Use DateTimeZone instead of int for creating datetime
closes #461
2019-12-09 22:11:20 -05:00
Nabeel S
8cb0021b9f Use PhpExecutableFinder() closes #457 #458 (#460) 2019-12-09 15:26:30 -05:00
Nabeel S
8042c4ffc1 Avoid proc_open use #455 (#456) 2019-12-05 14:17:36 -05:00
Nabeel Shahzad
cc8662445c Allow nullable on flight_id 2019-12-03 15:52:00 -05:00
Nabeel Shahzad
64a04f70a3 Fix for flight_number check forcing to exist 2019-12-03 15:45:18 -05:00
Nabeel S
b06287da23 Stricter checks on ACARS API data (#451)
* Stricter checks on ACARS API data

* More checks
2019-12-02 18:27:58 -05:00
Nabeel S
83821d1e04 Remove bootstrap cache (#448)
* Cleanup the bootstrap/cache directory when packaging

* Fix removal of bootstrap cache

* Formatting
2019-12-02 10:29:16 -05:00
Nabeel S
68eff40753 Replace importer with AJAX powered; better error handling #443 (#447)
* Replace importer with AJAX powered; better error handling #443

* Formatting

* Fix command line importer
2019-12-02 09:57:35 -05:00
Nabeel S
50dc79bc8d Refactor and add importer to Installer module #443 (#444)
* Refactor and add importer to Installer module #443

* Refactor for finances to use in import

* Import groups into roles

* Formatting

* Formatting

* Add interface in installer for import

* Notes about importing

* Check for installer folder

* Formatting

* Fix pirep->user mapping

* Unused import

* Formatting
2019-11-27 09:19:20 -05:00
Nabeel S
f95a3f336b Fix missing newsRepo (#445) 2019-11-23 12:58:48 -05:00
Nabeel S
ea3ab21beb 391 Notification refactorings (#441)
* Refactor notifications to allow easier plugins

* Notification refactoring

* Formatting

* Move news to NewsService; cleanup of events

* More refactoring; added send email out for news item and the template

* Formatting

* Formatting
2019-11-20 10:16:01 -05:00
Nabeel S
a335ed8e9b Merge pull request #440 from nabeelio/dev
Merge 7.0.0-beta.2 to master
2019-11-19 11:45:13 -05:00
Nabeel Shahzad
02973a0f22 Use GITHUB_TOKEN variable in release 2019-11-19 11:21:12 -05:00
Nabeel S
bffa5ebde2 Refactor the upgrade pending check to see if there are settings/permissions yaml changes (#438) 2019-11-19 10:54:42 -05:00
Nabeel S
3ec64c989b Fixes (#435)
* Add flight level field to PIREP field closes #401

* Default value for distance 0 closes #400

* Block airline deletion if assets exist #367

* Formatting

* Move some of the base exception classes

* Fix skin references to use settings table

* Set default for theme name if setting is wrong
2019-11-19 10:06:07 -05:00
Nabeel Shahzad
c643833496 Update stalebot 2019-11-06 11:42:01 -05:00
Nabeel Shahzad
759979fc10 Random cache prefix closes #374 2019-11-06 11:31:33 -05:00
Nabeel Shahzad
8859682366 Set debug=true for new installs 2019-11-06 11:29:25 -05:00
Nabeel S
f5183babf6 #406 Refactor bids (#432)
* Add flight_id column to pireps table

* Refactor PIREPs and bids closes 406

* Formatting
2019-11-05 11:44:31 -05:00
voipmeister
db087d0ccb fixes for issue #419 (#429)
* fixes for issue #419

* no spaces

* no spaces
2019-11-01 08:33:43 -04:00
Nabeel S
70d43e6e53 Wrap values in travis env (#426)
* Wrap values in travis env

* Inline CronService
2019-10-30 10:23:31 -04:00
Nabeel S
a45770732a Show a message about setting up the cron and if there was an error running it (#425) 2019-10-30 09:55:32 -04:00
Nabeel S
ec4f10d43a 359 Select theme in settings (#423)
* Update composer package versions

* Laravel version

* Change theme in the admin settings page closes #359

* Fix comment
2019-10-30 09:05:18 -04:00
Nabeel S
eff9f6fec6 Fix blank aircraft field causing error closes #414 (#422) 2019-10-29 13:57:17 -04:00
Nabeel Shahzad
96394228ea Select box formatting 2019-10-29 13:09:23 -04:00
Nabeel S
ae68550448 Move telemetry option into settings; checkbox in install refs #415 (#416) 2019-10-29 13:07:53 -04:00
Nabeel S
a2ea9b29ba Bundle CSS changes (#421)
* Bundle CSS changes

* Edit language

* Clickable flight IDs #419

* Fix dropdown menu going offscreen

* formatting
2019-10-29 13:03:04 -04:00
Benjamín Buske
1725ea5a9e Some minor CSS fixes as discussed on Discord (#420)
* Minor CSS Changes

Minor CSS changes to the original. 

#1: Added button to show own bids. 
#2: Added padding to Search buttons and fields  
#3: Fixed search fields leaving the search box

* Minor CSS Changes to Search Fields

Search Fields have been changed from round to square for better look.
2019-10-28 13:21:21 -04:00
Nabeel Shahzad
12679e85a8 Updated changelog 2019-10-23 15:29:34 -04:00
Nabeel Shahzad
79d4928e18 Fix for http auth in htaccess 2019-10-23 12:36:21 -04:00
Nabeel S
7a34756188 Issue fixes (#413)
* Auto lookup missing airports closes #404

* Ensure flight ICAOs are capitalized closes #404

* Update htaccess in root closes #412

* Update htaccess in root closes #412

* StyleCI fix
2019-10-23 12:01:31 -04:00
Nabeel Shahzad
97baf98d04 Formatting 2019-09-20 09:11:34 -04:00
Nabeel Shahzad
eb27c94637 Fix for bad unit conversions in API responses 2019-09-20 09:05:09 -04:00
Nabeel S
5f9e7d5754 Catch error messages in notifying (#403)
* Catch error messages in notifying

* Formatting
2019-09-17 19:11:02 -04:00
Nabeel S
6e9dcf8a31 Design and file upload issues (#399)
* Fix some styling issues/edit button on PIREP overview page

* Fix validation for file/url upload

* Formatting
2019-09-16 15:17:51 -04:00
Nabeel S
aedb1f22b6 Don't allow cancels from certain states (#396)
* Don't allow cancels from certain states

* Unused imports

* Don't reset the state doubly

* Move SetUserActive into listener; code cleanup

* Unused imports

* Add missing files into htaccess

* Move Command contract to correct folder
2019-09-16 13:08:26 -04:00
Nabeel Shahzad
41baefbf4a Fix styler 2019-09-14 11:18:09 -04:00
Nabeel Shahzad
3c21047c15 Fix playback file path 2019-09-14 11:15:42 -04:00
Nabeel Shahzad
52332c250b Fix the route() calls for L6 2019-09-13 18:20:50 -04:00
Nabeel Shahzad
0c89d36a16 Remove remnants of Timezonelist library 2019-09-13 17:54:46 -04:00
Nabeel S
4ac781a20d Fix map checkout call (#394) 2019-09-13 15:10:47 -04:00
Nabeel S
d68d8791bd 389 API Changes (#393)
* Update PHPUnit to 8

* Fix API endpoints closes #389

* Update pagination method in Repository contract to look at the page number closes #390

* Remove unused imports

* Fix tests in FlightTests

* Typecast page

* Don't register factories

* Remove Factory loading

* Remove unused imports
2019-09-13 11:21:40 -04:00
Nabeel S
23eb9dcbda 384 Laravel 6 changes (#385)
* 384 Laravel 6 changes

* Library versions

* Update package versions

* Add keyType to models

* Remove unused dependencies

* StyleCI fixes

* Fix models for test

* Fix tests output and update test runner

* Unused imports

* Update exceptions handler

* Fix login page
2019-09-13 08:05:02 -04:00
Nabeel S
7a76ac4226 CSS Libraries and style updates (#388)
* Update now-ui frontend lib to latest instead of the beta

* Update to bootstrap 4 lib

* Fix flights and profile pages
2019-09-12 11:48:41 -04:00
Nabeel S
37fc761567 380 vacentral library (#381)
* Update vaCentral library for new API server format

* Formatting

* Remove missing/unused import
2019-09-05 16:55:51 -04:00
Nabeel Shahzad
1b82ef6c88 Fix mix error for admin.css 2019-09-04 08:03:39 -04:00
Nabeel S
7ace8bccd6 Use Notification/Notifiable (#379)
* Add migrations for notifiables

* Configure spatie-backup to run as part of cron

* Convert Mailer to Notification; add pirep notifications

* Styling
2019-08-30 15:59:17 -04:00
Nabeel S
b213f2bb4c Add maintenance section to admin, clear caches #376 (#377)
* Add maintenance section to admin, clear caches #376

* Formatting
2019-08-30 15:59:08 -04:00
Nabeel S
0d1f38cf85 Refactor all JS API calls #360 (#375)
* Refactor all JS API calls #360

* Remove unused imports

* Lint JS

* Fix doubled api key

* Formatting

* Added extra logging to distance lookup

* Remove the .editorconfig file in distrib

* shell check fixes

* Remove the .editorconfig file in distrib
2019-08-30 08:08:00 -04:00
Nabeel Shahzad
e62e4a865d Rename mix_public() to public_mix() for consistency with public_asset() 2019-08-28 10:52:35 -04:00
Nabeel S
09f3e3cfdf Set the baseURL for ajax requests (#373)
* Set the baseURL for ajax requests

* Use async/await on AJAX calls

* Add mix_public() cache generated asset cache busting

* Move storage container into separate class

* Fix some styling
2019-08-27 15:08:42 -04:00
Nabeel S
fd2f4f2150 Move airline transaction code into service layer (#371)
* Move airline transaction code into service layer

* Remove unused import
2019-08-26 14:55:59 -04:00
Nabeel S
651174bda8 229 url for downloads (#369)
* Allow file uploads for subfleet

* Allow URL to be used for a download

* Remove old FileUploadRequest

* Move file removal logic to service layer

* Remove unused import

* Remove unused packages
2019-08-26 14:43:50 -04:00
Nabeel S
bbec276da8 #355 Calculate distance button (#366)
* #355 Calculate distance button in add/edit Flight page

* Styling

* Move add/edit flight logic out of controller and into service layer

* Styling

* Formatting

* Run styleci against modules dir

* Styleci config

* Style fixes in /modules
2019-08-26 12:32:46 -04:00
Nabeel Shahzad
25999d55a3 Update dep versions 2019-08-26 09:09:12 -04:00
Nabeel S
6018a6dcaa Add Contract interface for airport lookup functionality (#365)
* Add Contract interface for airport lookup functionality

* style ci fixes
2019-08-22 14:32:49 -04:00
Nabeel Shahzad
94ba5d8680 Disable the requests throttler 2019-08-22 12:45:15 -04:00
Nabeel Shahzad
3d6a29795b Carry headers through the handler 2019-08-22 12:26:46 -04:00
Nabeel Shahzad
dd2b297cc5 Carry headers when rethrowing errors to REST 2019-08-22 12:12:44 -04:00
Nabeel Shahzad
7fdaf62ef5 Add 'status' field to error response 2019-08-21 08:19:49 -04:00
Nabeel S
182aabf426 Refactor error handling internally to follow RFC7807 (#362)
* Refactor error handling internally to follow RFC7807

* style fixes
2019-08-21 08:17:44 -04:00
Nabeel Shahzad
91a5eb535d Add abstract class for route finding mechanism 2019-08-20 08:48:45 -04:00
Nabeel Shahzad
b6189bab7e Remove the table prefix on importer 2019-08-10 21:12:18 -04:00
Nabeel S
dc51897314 Additional logging for the stats recalculation (#358)
* Additional logging for the stats recalculation

* style fix
2019-08-10 20:42:35 -04:00
Nabeel S
c1103afe8f Add missing expiry time for PIREP API (#356) 2019-08-09 22:49:25 -04:00
Nabeel Shahzad
39fbdcb787 Add the airline back into seed data 2019-08-09 13:57:56 -04:00
Nabeel S
47be7507f0 Fix/metar reading (#354)
* Account for empty ICAO; added tests

* Fix null returns

* Fix typo in volume units display

* Add version field for bug report template

* Some more changes to the bug report template
2019-08-08 17:41:53 -04:00
Nabeel S
5cafebe4d6 Fix/metar reading (#353)
* Fix reading of the METAR information for AviationWeather. Fix the DI

* StyleCI fixes
2019-08-08 14:52:34 -04:00
Nabeel Shahzad
becf6c95f0 StyleCI fixes 2019-08-08 13:44:18 -04:00
Nabeel Shahzad
380c9d13b6 Error handling around reset install; clear cache 2019-08-08 13:42:43 -04:00
Nabeel S
a08c9db284 Add setting to include transfer hours in calculations (#350)
* Add setting to include transfer hours in calculations

* Add some extra tests to check versions

* A couple of more version test cases
2019-08-08 12:50:43 -04:00
Nabeel S
ff6ba4c29a Remove ext-cal from requirements list (#349)
* Remove ext-cal from requirements list

* Fix the travis phpunit config
2019-08-08 12:50:32 -04:00
Nabeel Shahzad
f6465bea58 Add error logging around metar parsing call 2019-08-07 13:25:40 -04:00
Nabeel S
5cce1b3040 Multiple ticket crash fixes (#347)
* Fix for initial seed data not being run during install closes #346

* StyleCI keepin' me honest

* Tooltips for ranks
2019-08-07 12:32:49 -04:00
Nabeel S
e12188b7d3 Issue/327 versioning (#345)
* Switch to semver format

* Rewrite new version check to use Github Releases and cron

* Styling

* Remove v from in front of version

* New version check test fix

* Uncomment test case
2019-08-06 17:48:00 -04:00
Nabeel S
092b9fc9dc Add step fields to enable decimal points on fields #342 (#343)
* Add step fields to enable decimal points on fields #342

* Update js-yaml version due to vulnerability scan

* Don't seed dev files when env == local

* Fix

* Fix  to be static

* Add visibilty keyword
2019-08-06 15:54:21 -04:00
Nabeel S
6292b05ad5 Update issue templates (#344) 2019-08-06 15:26:37 -04:00
Nabeel Shahzad
732a0c4088 Merge branch 'dev' of github.com:nabeelio/phpvms into dev 2019-08-06 07:39:41 -04:00
Nabeel S
753804b71b Issue fixes (#341)
* Better error handling around ACARS position updates

* Add step for decimals on fuel block/used fields closes #340

* Styling

* Rename AcarsController to LiveMapController; update JS dependencies
2019-08-05 13:07:22 -04:00
Nabeel S
9f3ba05880 Issue/329 refactor seeding (#337)
* Fix Contracts class names

* Refactoring of the file seeds so it's not a mess

* StyleCI fixes
2019-08-05 08:27:53 -04:00
Nabeel Shahzad
3a97071fcf Fix Contracts class names 2019-08-02 09:02:23 -04:00
Nabeel Shahzad
d4c172e734 Fix the role creation #334 2019-08-02 08:05:03 -04:00
Nabeel S
95147e31bf Fix issue where user stats aren't incremented on PIREP auto accept (#335)
* Fix issue where user stats aren't incremented on PIREP auto accept

* Formatting
2019-08-01 15:23:59 -04:00
Nabeel Shahzad
63485d5a0f Make hours and minutes fields required 2019-08-01 13:15:33 -04:00
Nabeel Shahzad
aa57997ff5 PIREP fields not showing up and blocking PIREP submission 2019-08-01 13:13:11 -04:00
Nabeel Shahzad
f31d6a00ec Remove log tail 2019-08-01 13:12:54 -04:00
Nabeel Shahzad
e307da36b5 Brute force directory creation 2019-08-01 13:12:33 -04:00
Nabeel Shahzad
be5dd68c81 Directories still not being retained #333 2019-08-01 13:04:10 -04:00
Nabeel Shahzad
e9e2e12e4e Fix avatars dir name #333 2019-08-01 12:47:17 -04:00
Nabeel S
981a5915e3 Merge pull request #331 from nabeelio/313/fuel-finances
Account for fuel in the finance calculations #313
2019-07-23 10:29:05 -04:00
Nabeel Shahzad
224cfaf603 Remove debugging that stops execution 2019-07-23 10:17:51 -04:00
Nabeel Shahzad
71f5d33af7 Formatting in FlightExporter 2019-07-23 09:42:31 -04:00
Nabeel Shahzad
70f470d64e Formatting 2019-07-23 09:08:05 -04:00
Nabeel Shahzad
fcc6295a77 Remove unused/dead code 2019-07-23 09:00:39 -04:00
Nabeel Shahzad
c5007f2928 Formatting 2019-07-23 08:43:40 -04:00
Nabeel Shahzad
62a10224a0 Account for fuel in the finance calculations #313 2019-07-23 08:41:20 -04:00
Nabeel S
ee1c8ee3fa Merge pull request #328 from nabeelio/328/pending-updates
Middleware to detect is update is pending; move Routes into HTTP
2019-07-18 11:07:22 -04:00
Nabeel Shahzad
823325d049 Styling 2019-07-18 10:54:28 -04:00
Nabeel Shahzad
b2cf7acfb6 Middleware to detect is update is pending; move Routes into HTTP 2019-07-18 10:51:05 -04:00
Nabeel Shahzad
c6547ac7fc Style fix 2019-07-18 09:55:10 -04:00
Nabeel Shahzad
748601064c Fix Validator import 2019-07-18 09:54:03 -04:00
Nabeel Shahzad
a9c5be1c70 Add opcache option; change detection during install for cache driver 2019-07-18 09:26:33 -04:00
Nabeel S
a0a6ab027f Merge pull request #325 from nabeelio/282-import-special-chars
Change exporter to use utf-8 close #282
2019-07-17 14:01:49 -04:00
Nabeel Shahzad
e97ae78e47 Fix for tests 2019-07-17 13:54:44 -04:00
Nabeel Shahzad
89a01afc7c Fix throws pathing for tests 2019-07-17 13:40:56 -04:00
Nabeel Shahzad
9475a737f0 Change exporter to use utf-8 close #282 2019-07-17 13:36:16 -04:00
Nabeel S
0225a84a81 Merge pull request #324 from nabeelio/265-editable-pilot-id
Backend changes separating id from pilot_id
2019-07-17 12:49:22 -04:00
Nabeel Shahzad
bb15119bf0 Append rules for Create/Update 2019-07-17 11:00:30 -04:00
Nabeel Shahzad
95ae3aacb3 Unique email check 2019-07-17 10:59:11 -04:00
Nabeel Shahzad
482a9cb04f formatting 2019-07-17 10:04:22 -04:00
Nabeel Shahzad
f5dcd06838 Remove the NotNull checks 2019-07-17 09:57:05 -04:00
Nabeel Shahzad
9c8c06ef28 Fix metar clouds test 2019-07-17 09:56:16 -04:00
Nabeel Shahzad
567ff91de0 Add pilot ID change fields to the admin screen 2019-07-17 09:48:20 -04:00
Nabeel Shahzad
337fe5cfaa Rename "Administration" to "Admin" 2019-07-17 08:58:10 -04:00
Nabeel Shahzad
ec81a6d157 Fix errors in the METAR parsing for clouds; display error for pressure units 2019-07-17 08:57:45 -04:00
Nabeel Shahzad
15e6226511 Fix the avatars directory #316 2019-07-17 08:56:38 -04:00
Nabeel Shahzad
80560ec20c Formatting 2019-07-16 14:06:13 -04:00
Nabeel Shahzad
3e1d9080df Backend changes separating id from pilot_id 2019-07-16 13:54:14 -04:00
Nabeel S
454776ecd4 Merge pull request #323 from nabeelio/fix/rename-interfaces
Rename Interfaces to Contracts to better match Laravel conventions
2019-07-15 15:59:34 -04:00
Nabeel Shahzad
dd946d4cdd Reorder imports 2019-07-15 15:51:35 -04:00
Nabeel Shahzad
a720f12e0b Rename Interfaces to Contracts to better match Laravel conventions 2019-07-15 15:44:31 -04:00
Nabeel S
31f16d693b Merge pull request #322 from nabeelio/fix-unit-classes
Cleanup SI Unit classes; METAR fixes
2019-07-15 15:36:54 -04:00
Nabeel Shahzad
ed91ddb5a8 Formatting again 2019-07-15 15:19:22 -04:00
Nabeel Shahzad
08a2be165c Formatting 2019-07-15 15:18:49 -04:00
Nabeel Shahzad
c04bfb78c6 Formatting 2019-07-15 15:17:51 -04:00
Nabeel Shahzad
06d8f11ca3 Cleanup SI Unit classes and interface for REST responses; fixes to a few METAR parsing issues 2019-07-15 15:14:40 -04:00
Nabeel S
466d04caf7 Merge pull request #321 from nabeelio/dependabot/npm_and_yarn/lodash-4.17.13
Bump lodash from 4.17.11 to 4.17.13
2019-07-15 08:02:10 -04:00
dependabot[bot]
02674f6ecb Bump lodash from 4.17.11 to 4.17.13
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.11 to 4.17.13.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.11...4.17.13)

Signed-off-by: dependabot[bot] <support@github.com>
2019-07-13 00:09:08 +00:00
Nabeel S
d8795e66da Merge pull request #320 from nabeelio/laravel-update
Update composer library versions
2019-07-09 08:03:17 -04:00
Nabeel Shahzad
8cdf47f7b3 Update composer library versions 2019-07-08 14:41:10 -04:00
Nabeel S
331b9133a8 Merge pull request #319 from nabeelio/issue/316-missing-folders
Add missing folders under storage/public #316
2019-07-08 13:51:53 -04:00
Nabeel Shahzad
783c06d811 Add missing folders under storage/public #316 2019-07-08 13:31:28 -04:00
Nabeel Shahzad
8a4516f1ba Remove gmp requirement from installer 2019-06-21 19:29:25 -04:00
Nabeel Shahzad
6543728478 Merge pull request #314 from nabeelio/issue/296-permissions
Add interface to additional roles/permissions #296
2019-06-21 14:51:43 -04:00
Nabeel Shahzad
54347c6706 Set default for read_only to false 2019-06-20 23:24:08 -04:00
Nabeel Shahzad
b169337fb6 Styling 2019-06-20 23:19:35 -04:00
Nabeel Shahzad
b28ace970c Add interface to additional roles/permissions 2019-06-20 16:52:37 -04:00
Nabeel Shahzad
29ca9711f8 Merge pull request #312 from nabeelio/issue/295-fuel-in-pireps
Fix pax count fields; add fuel used field #295
2019-06-19 15:14:29 -05:00
Nabeel Shahzad
313c0b0c80 Show fuel units in form 2019-06-19 16:05:29 -04:00
Nabeel Shahzad
f9ecabdccc Fix start order 2019-06-19 16:05:24 -04:00
Nabeel Shahzad
abb1eb332d styling 2019-06-19 15:30:47 -04:00
Nabeel Shahzad
faf51de9a9 Fix pax count fields; add fuel used field #295 2019-06-19 15:29:27 -04:00
Nabeel Shahzad
ae464b7601 Add stale check for github issues 2019-06-19 13:15:31 -04:00
Nabeel Shahzad
79c60d34c2 Some admin cleanup 2019-06-19 13:07:03 -04:00
Nabeel Shahzad
fb9c1c3681 Check for calendar extension in installer 2019-06-19 13:02:06 -04:00
Nabeel Shahzad
4653eb20ad don't remove the docker resources 2019-06-19 12:43:09 -04:00
Nabeel Shahzad
c7376a59f0 Move around docker storage folders/config 2019-06-19 12:41:42 -04:00
Nabeel Shahzad
09307443f9 ordering 2019-06-18 19:48:03 -04:00
Nabeel Shahzad
4259533958 Move artisan calls into the install phase 2019-06-18 19:32:05 -04:00
Nabeel Shahzad
da87a35a69 Reordering ops for travis 2019-06-18 19:30:08 -04:00
Nabeel Shahzad
7a468b2c16 Fix php-cs-fixer for build 2019-06-18 19:16:29 -04:00
Nabeel Shahzad
a39549d597 Merge pull request #311 from nabeelio/analysis-zDr9J5
Apply fixes from StyleCI
2019-06-18 17:58:33 -05:00
Nabeel Shahzad
a176ed2dae Apply fixes from StyleCI 2019-06-18 22:58:09 +00:00
Nabeel Shahzad
4ae17f65c8 Upgrade for vulnerabilities 2019-06-18 18:56:35 -04:00
Nabeel Shahzad
be441dacd9 Update for vulnerabilities 2019-06-18 18:54:19 -04:00
Nabeel Shahzad
5210c78d5e Update Laravel version 2019-06-18 18:51:56 -04:00
Nabeel Shahzad
e1bdef98d6 Keep uploaded avatar images within the same aspect ratio #309 2019-05-13 07:52:07 -05:00
Nabeel Shahzad
defd78e5c2 Add the avatars/files folders to the permissions check list 2019-05-12 23:45:07 -05:00
Nabeel Shahzad
27944b8235 don't create env/config files by default 2019-05-12 23:42:35 -05:00
Nabeel Shahzad
f0ef723854 Add blank env and config files, check those permissions in the installer 2019-05-12 18:36:41 -05:00
Nabeel Shahzad
889ed06acc Put note about permissions for directories 2019-05-12 18:33:22 -05:00
Nabeel Shahzad
267a0e21ba Merge pull request #308 from nabeelio/laravel-58
Laravel 5.8 Update
2019-05-12 18:20:34 -05:00
Nabeel Shahzad
7e461f401b Remove .php_cs from dist 2019-05-12 18:13:42 -05:00
Nabeel Shahzad
2ca1f33e68 Formatting 2019-05-12 18:05:36 -05:00
Nabeel Shahzad
dbd7c5e90b Style fixes 2019-05-12 17:49:58 -05:00
Nabeel Shahzad
d65b74d7a0 Formatting 2019-05-12 17:37:22 -05:00
Nabeel Shahzad
8d6621e2a8 Add additional rules 2019-05-12 17:25:52 -05:00
Nabeel Shahzad
88957f4071 Add php-cs-fixer to build 2019-05-12 13:26:44 -05:00
Nabeel Shahzad
75eaec2f11 phpcs standards 2019-05-12 12:08:31 -05:00
Nabeel Shahzad
a79f28caa4 Bump minimum required php version to 7.2 2019-05-12 11:40:03 -05:00
Nabeel Shahzad
25a9ca9b90 styleci fixes 2019-05-12 11:35:03 -05:00
Nabeel Shahzad
d5a3328130 Style fix 2019-05-12 11:31:48 -05:00
Nabeel Shahzad
18c5cf766d Force env vars in travis tests for phpunit 2019-05-12 11:31:16 -05:00
Nabeel Shahzad
1c935998fb Fix nginx command 2019-05-12 11:20:42 -05:00
Nabeel Shahzad
1b1cf2a891 Add redis; use alpine images 2019-05-12 10:51:06 -05:00
Nabeel Shahzad
047a72f3da Force cache to array 2019-05-12 10:50:52 -05:00
Nabeel Shahzad
87aa6ed1da Fix tests for 5.8 2019-05-12 10:50:38 -05:00
Nabeel Shahzad
7f0fb16dc3 Update to Laravel 5.8 2019-05-12 10:10:31 -05:00
Nabeel Shahzad
82f6dfbece Fix not found debug() call 2019-05-11 17:39:58 -05:00
Nabeel Shahzad
b8d4f4e5c4 Merge pull request #306 from nabeelio/issue-297/search-options
Add more search criteria/dev environment via docker-compose #297
2019-05-11 14:47:37 -05:00
Nabeel Shahzad
df814edafe Add the symfony/polyfill-iconv package 2019-05-11 14:11:15 -05:00
Nabeel Shahzad
1ec866d4dc Style fixes 2019-05-11 11:38:56 -05:00
Nabeel Shahzad
7fce5421b4 Reset the criterea before a new search 2019-05-11 11:37:06 -05:00
Nabeel Shahzad
65bd6888e8 Only mount storage folder 2019-05-11 09:20:05 -05:00
Nabeel Shahzad
2ca4393c5a Adjust tail command 2019-05-11 09:14:31 -05:00
Nabeel Shahzad
099600cf4c Fix the PHP Docker image 2019-05-10 19:46:50 -05:00
Nabeel Shahzad
4dd3fc5244 Show if there are database errors 2019-05-10 19:31:11 -05:00
Nabeel Shahzad
a90d9aac39 Save the data files locally 2019-05-10 18:55:24 -05:00
Nabeel Shahzad
81652cf70e Add swagger docs for search 2019-05-10 18:54:10 -05:00
Nabeel Shahzad
5f0db96fc4 Working docker-compose files for development 2019-05-10 18:40:07 -05:00
Nabeel Shahzad
2b45b9fd70 Fix the searchable fields 2019-05-10 16:24:34 -05:00
Nabeel Shahzad
5b061ba636 Add greater than/less than search options #297 2019-05-10 16:03:04 -05:00
Nabeel Shahzad
1dae81b707 Package updates for vulnerabilities 2019-05-08 11:31:57 -05:00
Nabeel Shahzad
3ceb5fbe5b node package vulnerability updates 2019-05-08 11:30:45 -05:00
Nabeel Shahzad
5fac731a57 Remove the github issue templates 2019-05-08 11:27:49 -05:00
Nabeel Shahzad
d00115fc1a Restrict builds to main phpvms repo 2019-05-08 11:20:43 -05:00
Nabeel Shahzad
d2c20f97fd Specify to run on all branches 2019-05-08 11:18:50 -05:00
Nabeel Shahzad
400e4854e8 Docs and matrix to strings 2019-05-08 11:17:38 -05:00
Nabeel Shahzad
12c66e2681 Install 'artifacts' from the shell script 2019-05-08 11:03:52 -05:00
Nabeel Shahzad
56c2115144 Use artifacts plugin 2019-05-08 10:50:46 -05:00
Nabeel Shahzad
de6420ad59 Configure test matrix 2019-05-08 10:41:27 -05:00
Nabeel Shahzad
93b03bb5ab Travis fixes 2019-05-08 10:36:04 -05:00
Nabeel Shahzad
86b68fb515 Add PHP 7.4 to travis 2019-05-08 10:27:05 -05:00
Nabeel Shahzad
52ed248f7d Only generate test autoloaders in dev mode 2019-05-08 07:07:24 -05:00
Nabeel Shahzad
bc58a2b076 Merge pull request #301 from nabeelio/fix/285
Add gmp to requirements in install #285
2019-05-05 09:43:41 -05:00
Nabeel Shahzad
fd96bb49f6 Add gmp to requirements in install #285 2019-04-07 22:36:17 -05:00
Nabeel Shahzad
30a53670fe Merge branch 'dev' of github.com:nabeelio/phpvms into dev 2019-04-07 22:29:13 -05:00
Nabeel Shahzad
204f3a7397 Add github issue templates 2019-04-07 22:29:00 -05:00
Nabeel Shahzad
3a6e3e0e24 Style fixes 2019-04-07 22:27:10 -05:00
Nabeel Shahzad
3bea54136b PHPUnit version fixing 2019-04-07 22:27:10 -05:00
Nabeel Shahzad
655dc39c63 Downgrade PHPUnit again for PHP 7.1 2019-04-07 22:27:10 -05:00
Nabeel Shahzad
e2637ce0a7 Downgrade PHPUnit again for PHP 7.1 2019-04-07 22:27:10 -05:00
Nabeel Shahzad
c8c3e2bb79 Update PHPUnit version 2019-04-07 22:27:10 -05:00
Nabeel Shahzad
ec662243d8 Style fixes 2019-04-07 22:27:10 -05:00
Nabeel Shahzad
93b738be79 Fix for phpunit on 7.1 2019-04-07 22:27:10 -05:00
Nabeel Shahzad
54c4e017cc Add PHP 7.3 to travis build 2019-04-07 22:27:10 -05:00
Nabeel Shahzad
1d0e6cc10e Update composer require t ype 2019-04-07 22:27:10 -05:00
Nabeel Shahzad
29a578ea6a Move the MigrationService to the main package 2019-04-07 22:27:10 -05:00
Nabeel Shahzad
905be6ffc3 Direct composer packages called 'phpvms-plugin' to the modules/ folder 2019-04-07 22:27:10 -05:00
Nabeel Shahzad
2d002e5cc5 Update npm packages 2019-04-07 22:27:10 -05:00
Nabeel Shahzad
2132b50ede Dependency updates 2019-04-07 22:27:10 -05:00
Nabeel Shahzad
8d8857e552 Turn closure into static 2019-04-07 22:27:10 -05:00
Nabeel Shahzad
6816c77845 Cleanup array_merge call 2019-04-07 22:27:09 -05:00
Nabeel Shahzad
2f2eb2e5b2 Mark ID as fillable for ACARS 2019-04-07 22:27:09 -05:00
Nabeel Shahzad
d2257095da Remove block_time from seed file 2019-04-07 22:27:09 -05:00
Nabeel Shahzad
53d4380339 Merge pull request #300 from nabeelio/revert-299-issue-templates
Revert "Update issue templates"
2019-04-07 22:26:20 -05:00
Nabeel Shahzad
4e9ea9aa3c Revert "Update issue templates" 2019-04-07 22:26:09 -05:00
Nabeel Shahzad
a6a52ef7bb Merge pull request #299 from nabeelio/issue-templates
Update issue templates
2019-04-07 22:25:50 -05:00
Nabeel Shahzad
239483dfc4 Update issue templates 2019-04-07 22:25:27 -05:00
Nabeel Shahzad
e4b8707e34 Style fixes 2019-04-07 22:12:45 -05:00
Nabeel Shahzad
c0afb2ea8f PHPUnit version fixing 2019-04-07 21:59:12 -05:00
Nabeel Shahzad
e367bd9a2e Downgrade PHPUnit again for PHP 7.1 2019-04-07 19:46:08 -05:00
Nabeel Shahzad
62871c8a7d Downgrade PHPUnit again for PHP 7.1 2019-04-07 19:37:30 -05:00
Nabeel Shahzad
9bc6fd23b9 Update PHPUnit version 2019-04-07 19:25:06 -05:00
Nabeel Shahzad
9d762df946 Style fixes 2019-04-07 19:23:44 -05:00
Nabeel Shahzad
e48f25d0ba Fix for phpunit on 7.1 2019-04-07 19:17:44 -05:00
Nabeel Shahzad
20a6e0ffb6 Add PHP 7.3 to travis build 2019-04-07 19:10:52 -05:00
Nabeel Shahzad
4b39b44dab Update composer require t ype 2019-04-07 19:07:16 -05:00
Nabeel Shahzad
8c358948e5 Move the MigrationService to the main package 2019-04-07 18:53:24 -05:00
Nabeel Shahzad
3cafe20736 Direct composer packages called 'phpvms-plugin' to the modules/ folder 2019-04-07 18:51:34 -05:00
Nabeel Shahzad
0014a4254d Update npm packages 2019-04-07 18:51:08 -05:00
Nabeel Shahzad
9f226fe574 Dependency updates 2019-04-07 18:43:13 -05:00
Nabeel Shahzad
e23caec9f3 Turn closure into static 2019-04-07 18:09:29 -05:00
Nabeel Shahzad
64bee1b238 Cleanup array_merge call 2019-04-07 17:35:55 -05:00
Nabeel Shahzad
1b1eb1539e Mark ID as fillable for ACARS 2018-12-27 09:35:40 -06:00
Nabeel Shahzad
4bc0a786ab Remove block_time from seed file 2018-12-27 09:23:35 -06:00
Nabeel Shahzad
6f7735afa7 Formatting 2018-10-25 18:10:37 -05:00
Nabeel Shahzad
3aef1a0aae Merge branch 'dev' of github.com:nabeelio/phpvms into dev 2018-10-25 17:56:03 -05:00
Nabeel Shahzad
cd327502d9 API: Call submit() for the PIREP 2018-10-08 09:01:35 -05:00
Nabeel Shahzad
900e8ffe26 Merge pull request #284 from arv187/es-translations
More acceptable translation to opt-in (es)
2018-10-02 13:50:42 -05:00
Nabeel Shahzad
270556eb1c Merge pull request #283 from tripph/master
Fix 404s to requirements/setup in README.md
2018-10-02 13:40:16 -05:00
arv187
e319f8eba4 More acceptable translation to opt-in (es) 2018-10-02 20:25:18 +02:00
Tripp Hill
48b14091c4 Fixed link to installation details page, was 404'd 2018-10-01 18:42:38 -04:00
Tripp Hill
88122c14d2 Fixed link to requirements page, 404'd before 2018-10-01 18:40:53 -04:00
Nabeel Shahzad
3911d95107 Set the currect aircraft location #277 2018-09-21 22:40:30 -04:00
Nabeel Shahzad
61c7a3d54d Merge pull request #280 from nkevins/expired_flight_cleaning
Hide expired live flight from live map and remove from DB
2018-09-20 18:44:42 -05:00
Kevin
075d4b3069 Add missing php extension 2018-09-21 06:46:44 +08:00
Nabeel Shahzad
c5498937dc Merge pull request #278 from nabeelio/laravel-57
[WIP] Laravel 5.7 Update
2018-09-20 14:20:25 -05:00
Nabeel Shahzad
f8b21c99e2 Use ClassMapGenerator from composer, symfony 4.x removed theirs 2018-09-20 14:08:42 -05:00
Nabeel Shahzad
8b6c44de6f StyleCI fixes 2018-09-20 13:55:58 -05:00
Nabeel Shahzad
b852bdc411 Merge pull request #276 from nkevins/admin_css_update
Make admin input outline darker
2018-09-20 13:55:21 -05:00
Nabeel Shahzad
2e0cc10ded Move redirect configs into phpvms config 2018-09-20 13:55:08 -05:00
Nabeel Shahzad
7707d8816e Laravel 5.7 versions 2018-09-20 13:55:08 -05:00
Nabeel Shahzad
a3239e78db Default install doesn't enable debug mode 2018-09-20 13:55:07 -05:00
Nabeel Shahzad
bbce735e31 Fix ordering for styleci 2018-09-20 13:55:07 -05:00
Nabeel Shahzad
262aad2d7a Add the Laravel 5.7 email verification 2018-09-20 13:55:07 -05:00
Nabeel Shahzad
99e472f99c Dependencies updated for Laravel 5.7 2018-09-20 13:55:07 -05:00
Kevin
d40c9ba91f Hide expired live flight from live map and remove from DB 2018-09-21 02:27:39 +08:00
Nabeel Shahzad
ab5480fdc9 Add explicit TOC accepted checkbox #244 2018-09-20 11:14:18 -05:00
Nabeel Shahzad
fbcaa382f4 add the opt-in button for emails #244 2018-09-20 10:00:23 -05:00
Nabeel Shahzad
aebb517791 Form close 2018-09-20 09:38:56 -05:00
Nabeel Shahzad
2de900eaa8 Minor JS cleanup 2018-09-20 09:36:15 -05:00
Nabeel Shahzad
e878168d4c Add eslint and styleci files 2018-09-10 09:25:45 -05:00
Nabeel Shahzad
d04565919b Allow admin to set a user's airport to be anywhere 2018-09-08 14:07:31 -05:00
Nabeel Shahzad
146fe05bdc Remove return nulls 2018-09-08 11:40:03 -05:00
Nabeel Shahzad
daffd1017f Add alt airport to pirep tables 2018-09-08 11:38:30 -05:00
Kevin
b66f10510e Make admin input border darker 2018-09-05 21:13:16 +08:00
Nabeel Shahzad
9e55f8ecf0 Merge pull request #275 from nkevins/transfer_hours
capture & display pilot transfer hours
2018-09-05 08:01:06 -04:00
Kevin Susanto
bac6396b19 Fix styleci checking 2018-09-05 09:27:16 +08:00
Kevin
b73182f830 Capturing pilot transfer hours 2018-09-05 08:09:33 +08:00
Nabeel Shahzad
ec873f2b82 Merge pull request #273 from nkevins/fix_repo_saving
Fix SettingsController saving boolean value as 'on'
2018-09-04 17:35:40 -04:00
Nabeel Shahzad
24fb55872f Merge pull request #274 from nkevins/fix_eager_loading
Optimize query with eager loading
2018-09-04 17:35:23 -04:00
Kevin
f7ae027156 Optimize query with eager loading 2018-09-04 20:02:16 +08:00
Kevin Susanto
f46e5090ae Fix SettingsController saving boolean value as 'on' 2018-09-04 16:11:51 +08:00
Nabeel Shahzad
c95fe3c971 Merge pull request #271 from nkevins/hide_inactive_pilot
Hide inactive pilot from pilot list page
2018-09-03 00:21:19 -04:00
Kevin
5992dad5a3 Hide inactive pilot from pilot list page 2018-09-03 08:12:11 +08:00
Nabeel Shahzad
646987764f Styleci annoying 2018-09-02 15:10:43 -04:00
Nabeel Shahzad
ebac18ebef Make sure created ICAO in factory is unique otherwise tests fail 2018-09-02 15:07:54 -04:00
Nabeel Shahzad
f2f0873b2e Merge branch 'dev' of github.com:nabeelio/phpvms into dev 2018-09-02 14:52:21 -04:00
Nabeel Shahzad
f14f7c1a5e Move the settings into a yml seed file and sync during install/update 2018-09-02 13:18:32 -04:00
Nabeel Shahzad
fbe3804658 Merge pull request #270 from nkevins/fix_search_flight_restriction
Fix flight search restriction
2018-09-02 11:04:41 -05:00
Nabeel Shahzad
1c1c0d55f4 Force truth state on pilot acceptance value #269 2018-09-02 10:47:37 -04:00
Kevin
20d8a2d0a7 Fix flight search restriction 2018-09-02 22:20:52 +08:00
Nabeel Shahzad
e71f12311a Merge pull request #268 from nabeelio/analysis-z4KMan
Apply fixes from StyleCI
2018-09-01 22:37:01 -05:00
Nabeel Shahzad
19a206f4ac Apply fixes from StyleCI 2018-09-02 03:31:16 +00:00
Nabeel Shahzad
8171d681a6 Fix METAR parsing for runway visibility 2018-09-01 16:58:38 -04:00
Nabeel Shahzad
aba23f99bd Merge pull request #264 from nkevins/fix_metar_issue
Fix METAR issue
2018-08-28 19:07:31 -05:00
Kevin
525e8ba8bb Adding cloud height assertion 2018-08-29 07:58:57 +08:00
Kevin
75ef658d8f Fix metar parsing issue 2018-08-29 07:27:53 +08:00
Nabeel Shahzad
e5935507c8 Merge pull request #262 from nabeelio/analysis-Xl4mPr
Apply fixes from StyleCI
2018-08-26 13:52:07 -05:00
Nabeel Shahzad
3c32f2d89d Apply fixes from StyleCI 2018-08-26 18:51:47 +00:00
Nabeel Shahzad
e95b3eb366 Code cleanup from inspection results 2018-08-26 13:50:08 -05:00
Nabeel Shahzad
0f3424f41e Fix datetime parser 2018-08-26 12:25:51 -05:00
Nabeel Shahzad
046dac5db5 Merge pull request #261 from nabeelio/analysis-8Kyry9
Apply fixes from StyleCI
2018-08-26 12:19:08 -05:00
Nabeel Shahzad
9596d88b48 Apply fixes from StyleCI 2018-08-26 16:40:04 +00:00
Nabeel Shahzad
20f46adbc4 Merge pull request #259 from nkevins/enable_eager_loading
Enable eager loading
2018-08-26 09:07:35 -05:00
Kevin
7b8e20f348 Enable eager loading 2018-08-26 21:43:47 +08:00
Nabeel Shahzad
996ebde501 Merge pull request #258 from nkevins/add_remove_expired_bids
Implement cron to remove expired bids
2018-08-24 12:16:50 -05:00
Kevin
36d91265d3 Adding newline at end of file 2018-08-25 01:14:35 +08:00
Kevin
796053cfa5 Implement cron to remove expired bids 2018-08-25 01:07:14 +08:00
Nabeel Shahzad
1c32ef838d Merge pull request #257 from nkevins/fix_timezone_list_encoded
Fix timezone list HTML Escaped
2018-08-24 10:39:59 -05:00
Kevin
a62c938099 Update attrSet initializer to empty string 2018-08-24 23:39:08 +08:00
Kevin
a9536064d3 Fix timezone list HTML Escaped 2018-08-24 23:16:23 +08:00
Nabeel Shahzad
543026da18 Nav data import fixed - thanks Kevin S! 2018-08-23 09:27:54 -05:00
Nabeel Shahzad
e77488c66a Fix CronWeekly console task to actually read Weekly 2018-08-23 08:26:39 -05:00
Nabeel Shahzad
91a64113fb Add faker package back 2018-08-20 13:22:42 -05:00
Nabeel Shahzad
25cead3288 Clean temp/cache folder 2018-08-20 12:01:13 -05:00
Nabeel Shahzad
80556dcda3 Remove the tests folder 2018-08-20 11:35:47 -05:00
Nabeel Shahzad
ffccb01670 Try to remove an requires-devs scripts 2018-08-20 11:24:32 -05:00
Nabeel Shahzad
299f391455 Cleanup of deploy script 2018-08-20 10:39:44 -05:00
Nabeel Shahzad
666c5d50d4 Add assets and banner message for EU cookie laws 2018-08-20 10:25:40 -05:00
Nabeel Shahzad
56c1f5ce4d Remove circleci config 2018-08-20 10:17:06 -05:00
Nabeel Shahzad
79806c3b42 Asset rebuild 2018-08-20 09:59:38 -05:00
Nabeel Shahzad
66a9b361cb Cosmetics 2018-08-20 09:48:39 -05:00
Nabeel Shahzad
89baf34824 Initial user stats recalculation #254 2018-08-20 09:42:54 -05:00
Nabeel Shahzad
5ee053cace Fix PIREP field error on file 2018-08-20 09:20:03 -05:00
Nabeel Shahzad
2dee3190ce Update dependencies 2018-08-20 09:19:44 -05:00
Nabeel Shahzad
1f50d2b7f7 check for empty route 2018-08-04 11:47:56 -05:00
Nabeel Shahzad
c40a8c893d Readd bids.disable_flight_on_bid, fixes tests 2018-07-24 15:58:11 -05:00
Nabeel Shahzad
b2cc818b7a Extra logging about cron 2018-07-24 14:58:12 -05:00
Nabeel Shahzad
0ce86e9e44 Rewrite add/remove bids code w additional tests 2018-07-24 14:50:50 -05:00
Nabeel Shahzad
e680f33326 Add more tests for days of week 2018-07-24 11:21:52 -05:00
Nabeel Shahzad
69eebd9370 Remove extra }} 2018-07-18 08:33:09 -05:00
Nabeel Shahzad
fb17159743 Merge branch 'dev' of https://github.com/nabeelio/phpvms into dev 2018-07-16 20:10:47 -05:00
Nabeel Shahzad
0f1a4bbf33 Change lat/lon fields to text 2018-07-16 09:23:50 -05:00
Nabeel Shahzad
68b00f776a Translation fixes 2018-07-15 15:06:25 -05:00
Nabeel Shahzad
87206ed2b4 Merge pull request #255 from arv187/es-translations
Update 07/13/2018 es-translations
2018-07-13 10:46:27 -05:00
arv187
5b233da11b update 07/13/2018
Add new files.
2018-07-13 17:30:54 +02:00
Nabeel Shahzad
28f10eaf41 Validator fix for airport import/export 2018-07-13 07:45:29 -05:00
Nabeel Shahzad
26061deced Fix flight visibility for day 2018-07-13 07:43:27 -05:00
arv187
3f3f0dd81d Merge remote-tracking branch 'upstream/dev' into es-translations 2018-07-13 14:15:32 +02:00
Nabeel Shahzad
4596ddae58 Undo null check for flight 2018-07-12 22:40:39 -05:00
Nabeel Shahzad
91b1fd5dca Add "visible" field to factory 2018-07-12 22:36:13 -05:00
Nabeel Shahzad
1b51bc8c04 Log error 2018-07-12 22:32:56 -05:00
Nabeel Shahzad
0af85a3fff Only show flights if they're also marked as visible 2018-07-12 22:29:50 -05:00
Nabeel Shahzad
4ca58ed754 Extra logging for cron and add flight visible field 2018-07-12 22:23:45 -05:00
Nabeel Shahzad
f640381978 Export extra fields for airports 2018-07-12 22:21:39 -05:00
Nabeel Shahzad
761c845300 Clean up some comments 2018-07-12 21:47:27 -05:00
Nabeel Shahzad
1b62cb7109 Fix extra brackets 2018-07-12 21:37:18 -05:00
Nabeel Shahzad
ad7aa7c8ce Missing flight log translation 2018-07-12 21:29:14 -05:00
Nabeel Shahzad
9cc640b866 Fix PIREP field and non-existant airport errors when editing PIREPs 2018-07-12 21:20:10 -05:00
Nabeel Shahzad
85615300e0 Wrap ifs 2018-07-11 08:35:26 -05:00
Nabeel Shahzad
5caecf9c5f update vacentral lib to fix airport lookup 2018-07-11 08:07:58 -05:00
Nabeel Shahzad
a1868075ed update composer 2018-07-11 08:06:07 -05:00
Nabeel Shahzad
81ecb5673f Merge branch 'dev' of https://github.com/nabeelio/phpvms into dev 2018-07-05 14:07:56 -05:00
Nabeel Shahzad
7c414e5419 (API) Delete the PIREP route before it's posted again 2018-07-05 14:07:54 -05:00
arv187
8b368a3808 upload spanish translation to es-translations branch 2018-06-28 01:08:56 +02:00
Nabeel Shahzad
fef36f89f4 Merge pull request #250 from arv187/master
ES translation
2018-06-27 17:36:59 -05:00
arv187
e9aaa85fc7 ES translation 2018-06-28 00:16:58 +02:00
Nabeel Shahzad
9125cc3d87 Fix updater 2018-06-22 09:26:08 -05:00
Nabeel Shahzad
230d3bebd3 Fix the api controller generation 2018-06-22 08:31:15 -05:00
Nabeel Shahzad
5b227c3a60 fix log 2018-06-21 09:53:14 -05:00
Nabeel Shahzad
316bc14526 Composer update 2018-06-20 11:39:28 -05:00
Nabeel Shahzad
9bc3a67c9a Move some database calls into a support class 2018-06-20 11:18:30 -05:00
Nabeel Shahzad
a083f9c671 Fix PIREP submission and field slug problems on PIREP edit 2018-05-30 14:00:20 -05:00
Nabeel Shahzad
b7a6cb4fbc Add missing flighttime translation 2018-05-29 14:21:44 -05:00
Nabeel Shahzad
d76b264238 Fix saving PIREPs as draft 2018-05-29 11:04:28 -05:00
Nabeel Shahzad
e02ae682a8 lang fixes 2018-05-29 09:16:07 -05:00
Nabeel Shahzad
59b99497a7 Route sorting 2018-05-28 18:15:51 -05:00
Nabeel Shahzad
42fb13294b Lang fixes 2018-05-25 15:37:53 -05:00
Nabeel Shahzad
a515921143 Add opt-in as part of GDPR #244 2018-05-24 22:17:41 -05:00
Nabeel Shahzad
019cf9b4fb Set IDs to unique ints so tests don't occasionally fail 2018-05-21 12:23:26 -05:00
Nabeel Shahzad
17cece598b Fix typos and missing lang 2018-05-21 12:05:22 -05:00
Nabeel Shahzad
8179611cac Remove unneeded migratoin 2018-05-21 12:00:14 -05:00
Nabeel Shahzad
0a7f002217 More organizing for translations 2018-05-21 11:55:40 -05:00
Nabeel Shahzad
36dcd61feb Move downloads into separate files 2018-05-21 11:27:57 -05:00
Nabeel Shahzad
072a7ffe12 split out email files 2018-05-21 11:25:51 -05:00
Nabeel Shahzad
9173558a0b Moved nav to files 2018-05-21 10:32:38 -05:00
Nabeel Shahzad
7cba92d420 move toc files 2018-05-21 10:28:50 -05:00
Nabeel Shahzad
3288467aa1 Move user files 2018-05-21 09:58:31 -05:00
Nabeel Shahzad
2b074ee894 Move widgets/home 2018-05-21 09:58:31 -05:00
Nabeel Shahzad
33ef3dd252 Move widgets into separate file 2018-05-21 09:58:21 -05:00
Nabeel Shahzad
bd84877f0e Move airports into separate file 2018-05-21 09:58:21 -05:00
Nabeel Shahzad
1258b87671 Move profile into separate file 2018-05-21 09:57:49 -05:00
Nabeel Shahzad
ba1bf4581d Move flights into separate file 2018-05-21 09:57:48 -05:00
Nabeel Shahzad
440a0c5425 Move dashboard into separate file 2018-05-21 09:57:46 -05:00
Nabeel Shahzad
74b53b4ba7 Move PIREPs to separate file 2018-05-21 09:57:45 -05:00
Nabeel Shahzad
1a3065b1ca Reformat error and auth translations 2018-05-21 09:57:43 -05:00
Nabeel Shahzad
fb6fc118e3 Move installer_messages.* to installer.* 2018-05-21 09:57:41 -05:00
Nabeel Shahzad
b63c9a8cd4 Move frontend.auth.* to auth.* 2018-05-21 09:57:41 -05:00
Nabeel Shahzad
203b6496fc Move frontend.global.* to common.* 2018-05-21 09:57:40 -05:00
Nabeel Shahzad
a747657642 remove dbal/predis from composer reqs 2018-05-21 09:57:38 -05:00
Nabeel Shahzad
ba9c64f420 Remove airplane image and restore original homepage for now 2018-05-21 09:57:38 -05:00
lordwilbur
c2bcebdb29 rebuilt assets again... 2018-05-21 09:57:38 -05:00
lordwilbur
f4ca576178 rebuilt assets 2018-05-21 09:57:38 -05:00
lordwilbur
459f69f609 frontend translation + other stuff 2018-05-21 09:57:34 -05:00
lordwilbur
06f8322eeb - fixed an error on finance in admin panel
- flight ident now use this format: VA IATA(if empty ICAO) + Flight Number + - + Flight Code (without C) + - + Flight Leg (without L)
- added function __trans_choice in helpers.php for translation
- fixed error in flight edit/insert panel not showing/inserting Tuesday in days
- fixed an error occurring when metar retrieved is empty
- edited now-ui-kit.css to align login fields correctly
- added /public/assets/frontend/js/core/jquery-3.3.1.min.js to fix a missed resource error in authentication pages
- added translations file for en and it locales
- translated all the frontend templates
2018-05-21 09:57:34 -05:00
lordwilbur
84f64f45d9 frontend translation + other stuff 2018-05-21 09:57:32 -05:00
lordwilbur
6899ea1964 - fixed an error on finance in admin panel
- flight ident now use this format: VA IATA(if empty ICAO) + Flight Number + - + Flight Code (without C) + - + Flight Leg (without L)
- added function __trans_choice in helpers.php for translation
- fixed error in flight edit/insert panel not showing/inserting Tuesday in days
- fixed an error occurring when metar retrieved is empty
- edited now-ui-kit.css to align login fields correctly
- added /public/assets/frontend/js/core/jquery-3.3.1.min.js to fix a missed resource error in authentication pages
- added translations file for en and it locales
- translated all the frontend templates
2018-05-21 09:57:26 -05:00
lordwilbur
81c148fc4d More translations 2018-05-21 09:57:10 -05:00
lordwilbur
89ebcbdb10 added predis/predis to composer 2018-05-21 09:57:10 -05:00
lordwilbur
a38bad9648 rebuilt assets again... 2018-05-21 09:57:10 -05:00
lordwilbur
7432ea5cc7 rebuilt assets 2018-05-21 09:57:10 -05:00
lordwilbur
1c84dd1e44 changed Flight model to match update of route_leg column in db. 2018-05-21 09:57:10 -05:00
lordwilbur
078f361a39 added doctrine/dbal to composer.json 2018-05-21 09:57:10 -05:00
lordwilbur
0b1670aae5 frontend translation + other stuff 2018-05-21 09:57:10 -05:00
lordwilbur
10867b2641 - fixed an error on finance in admin panel
- flight ident now use this format: VA IATA(if empty ICAO) + Flight Number + - + Flight Code (without C) + - + Flight Leg (without L)
- added function __trans_choice in helpers.php for translation
- fixed error in flight edit/insert panel not showing/inserting Tuesday in days
- fixed an error occurring when metar retrieved is empty
- edited now-ui-kit.css to align login fields correctly
- added /public/assets/frontend/js/core/jquery-3.3.1.min.js to fix a missed resource error in authentication pages
- added translations file for en and it locales
- translated all the frontend templates
2018-05-21 09:56:53 -05:00
lordwilbur
a346b0df2e frontend translation + other stuff 2018-05-21 09:54:18 -05:00
lordwilbur
ba8a819c7d - fixed an error on finance in admin panel
- flight ident now use this format: VA IATA(if empty ICAO) + Flight Number + - + Flight Code (without C) + - + Flight Leg (without L)
- added function __trans_choice in helpers.php for translation
- fixed error in flight edit/insert panel not showing/inserting Tuesday in days
- fixed an error occurring when metar retrieved is empty
- edited now-ui-kit.css to align login fields correctly
- added /public/assets/frontend/js/core/jquery-3.3.1.min.js to fix a missed resource error in authentication pages
- added translations file for en and it locales
- translated all the frontend templates
2018-05-21 09:53:08 -05:00
Nabeel Shahzad
77a2fd70c3 Merge pull request #242 from LordWilbur/vaflights
flights filtered per va
2018-05-19 14:04:39 -05:00
lordwilbur
1c0c7e0012 removed $flights variable 2018-05-19 09:05:24 +02:00
lordwilbur
e026a8d333 corrected code and replicated in Api/FlightController.php 2018-05-19 02:37:11 +02:00
lordwilbur
650d9884b0 removed tabs
added setting
corrected code
2018-05-19 02:03:06 +02:00
lordwilbur
0d53c5487d pilot unable to place bids on flight if pilots.only_flights_from_current = true and departure airport is not the same pilot's current airport. 2018-05-19 00:55:08 +02:00
lordwilbur
993513c22b flights filtered per va 2018-05-19 00:28:34 +02:00
Nabeel Shahzad
959db2e247 circleci 2018-05-17 08:06:38 -05:00
Nabeel Shahzad
c64dec1080 CircleCI build script 2018-05-17 08:02:52 -05:00
Nabeel Shahzad
da0a7cbe81 Add ACARS live time/coords/default zoom into admin settings 2018-05-16 10:54:01 -05:00
Nabeel Shahzad
a63a784dec Update to use leaflet-providers 2018-05-14 14:17:47 -05:00
Nabeel Shahzad
40c7fd8977 Add leaflet-providers 2018-05-14 14:14:27 -05:00
Nabeel Shahzad
3e96b195a6 Add short timeout to HTTP calls by default; cache METAR lookups 2018-05-14 11:22:20 -05:00
Nabeel Shahzad
c8a9ebd26d Data cleanup; set flight ident in response 2018-05-13 16:59:35 -05:00
Nabeel Shahzad
63897a5666 More cleanup of admin template 2018-05-11 16:02:43 -05:00
Nabeel Shahzad
9332f64284 Cleanup admin pirep form and read-only state 2018-05-11 13:53:24 -05:00
Nabeel Shahzad
3f1bb26ee5 Fix PIREPs not showing in admin 2018-05-11 13:43:33 -05:00
Nabeel Shahzad
9ca8825868 Merge branch 'dev' of https://github.com/nabeelio/phpvms into dev 2018-05-11 13:05:37 -05:00
Nabeel Shahzad
b8424f712d Acars log ordering 2018-05-11 13:05:34 -05:00
Nabeel Shahzad
bc7fccfb95 Cleanup the cancelled PIREP logic 2018-05-11 12:08:55 -05:00
Nabeel Shahzad
605bf477ad More date casting on API 2018-05-10 15:28:42 -05:00
Nabeel Shahzad
df88cb141a Allow draft for PIREPs, separate out the save/submit and delete functionality 2018-05-10 10:35:10 -05:00
Nabeel Shahzad
5230fc9600 change artisan calls 2018-05-10 10:22:45 -05:00
Nabeel Shahzad
62aa825c0f Use artisan for the reload-db dev command 2018-05-10 10:17:41 -05:00
Nabeel Shahzad
42c6a11780 Don't show in progress PIREPs in admin and order the map data 2018-05-09 17:58:51 -05:00
Nabeel Shahzad
4fa024045d refactorings of pirep/acars api calls; separate field calls 2018-05-09 12:45:24 -05:00
Nabeel Shahzad
9542c23717 Fix tests formatting of DateTime/Carbon objects 2018-05-09 09:15:07 -05:00
Nabeel Shahzad
7d2d932f50 remove field block_time 2018-05-08 21:26:57 -05:00
Nabeel Shahzad
bd7bd7e802 Cleanup of sample data and date/time parsing 2018-05-08 20:59:19 -05:00
Nabeel Shahzad
4fc30ec4bc Allow the created_at/updated_at fields to be edited 2018-05-08 17:30:44 -05:00
Nabeel Shahzad
00458ee754 unit test airport id length fix 2018-05-07 15:11:59 -05:00
Nabeel Shahzad
3f1f83438d remove observed_date test from metar code 2018-05-07 14:37:08 -05:00
Nabeel Shahzad
f593c7d92f Fix some more table column sizes 2018-05-07 14:07:41 -05:00
Nabeel Shahzad
feeb4946d1 Add some indexes and tests for airports 2018-05-07 14:07:41 -05:00
Nabeel Shahzad
f671d3f624 Update deploy scripts to remove some extra packages 2018-05-07 14:07:41 -05:00
Nabeel Shahzad
0cd7b3b71f live map updates 2018-05-04 13:59:47 -05:00
Nabeel Shahzad
d80e70e2b1 Fix Unit type conversions in tests 2018-05-03 16:13:25 -05:00
Nabeel Shahzad
f8965f1785 Fix tests for new datatypes 2018-05-03 15:36:26 -05:00
Nabeel Shahzad
23f1a8225a update livemap to use rivets.js bindings for data updates 2018-05-03 15:07:16 -05:00
Nabeel Shahzad
cbb5182cea Add distance/fuel fields to ACARS tables 2018-05-03 15:06:50 -05:00
Nabeel Shahzad
ff8f29be24 Update dev tools to add incremental inserts 2018-05-03 15:06:28 -05:00
José Bustos
64302252c0 Resize settings
Resize method only works with numbers as a parameter, is not necessary to put px at the end.
2018-05-02 18:59:57 -05:00
José Bustos
d768b9cc0e Avatar field on database
corrected the path to user avatar based on get avatar attribute on user model
2018-05-02 18:59:57 -05:00
José Bustos
4bc7d7735d Src avatar
Changed src call for user avatar, this will return the correct url based on avatar attribute of User Model
2018-05-02 18:59:57 -05:00
José Bustos
8aa629fc56 Grammar Error
corrected string
2018-05-02 18:59:57 -05:00
José Bustos
ec273d2928 Add getAvatarAttribute()
refactoring other methods this will work
2018-05-02 18:59:57 -05:00
Jose Miguel Bustos Espinoza
06d767279b Added input fields to upload avatar. 2018-05-02 18:59:57 -05:00
Jose Miguel Bustos Espinoza
b1209712d1 Added isset verification on avatar index at array, to put nullable validator. 2018-05-02 18:59:57 -05:00
Jose Miguel Bustos Espinoza
ecf2307542 Allow files upload in edit profile form for avatar file. 2018-05-02 18:59:57 -05:00
Jose Miguel Bustos Espinoza
24a2467338 Added avatar src in case of avatar exists, else will show default gravatar. 2018-05-02 18:59:57 -05:00
Jose Miguel Bustos Espinoza
4c65bf8142 Added avatar resize config 2018-05-02 18:59:57 -05:00
Jose Miguel Bustos Espinoza
31d0683592 Added avatar upload method into resource controller 2018-05-02 18:59:57 -05:00
Jose Miguel Bustos Espinoza
41f4c76006 Remote getAvatarAttribue() beacuse it cause conflict with final avatar path. 2018-05-02 18:59:57 -05:00
José Bustos
d0485f98a9 Installation of intervetion/image package to manage pilots avatars and others images. 2018-05-02 18:59:57 -05:00
Nabeel Shahzad
ec565fa0de Regen assets 2018-05-02 17:27:56 -05:00
Nabeel Shahzad
4f9c028676 Map fixes/updates 2018-05-02 15:28:57 -05:00
Nabeel Shahzad
5dff563c75 Fixes for API and live map 2018-05-02 15:14:18 -05:00
Nabeel Shahzad
9183e0b2aa Add phar file to gitignore 2018-05-02 09:54:21 -05:00
Nabeel Shahzad
6701ce8c1a comment out superfluous debug statements 2018-05-01 22:53:41 -05:00
Nabeel Shahzad
3a81e2ec27 Fix block_off/on_time and fix the metar date parsing 2018-05-01 22:52:31 -05:00
Nabeel Shahzad
b96f1cd7c4 api fixes/updates 2018-05-01 20:58:05 -05:00
Nabeel Shahzad
50abda71cb Fix if submitted_at blank 2018-04-30 17:51:18 -05:00
Nabeel Shahzad
73ffc9cf44 Fix flight type parameter 2018-04-30 17:29:50 -05:00
Nabeel Shahzad
7decac105f Add another sample flight/airports for testing 2018-04-29 11:29:31 -05:00
Nabeel Shahzad
89f067807b comment out the flight dupe check on import 2018-04-25 12:05:12 -05:00
Nabeel Shahzad
5cd9c608a7 Add score to model and fields 2018-04-25 11:56:05 -05:00
Nabeel Shahzad
531e86f5e7 Fix flight duplicate detection in add/edit/import; fix active checkbox 2018-04-25 11:53:32 -05:00
José Bustos
fb6d5a6a0a Install bug
It shows a blank page on install route in apache, it could be an rewrite error at line 
RewriteBase /
exactly, removing that line sould be fix.
2018-04-24 22:08:13 -05:00
Nabeel Shahzad
fe5400a3bb Add extra fields needed for internal active flags 2018-04-24 12:52:11 -05:00
Nabeel Shahzad
9502dd9835 Fix active/inactive check on flight page 2018-04-24 11:16:16 -05:00
Nabeel Shahzad
203ee72052 google font api from ssl 2018-04-24 11:02:02 -05:00
Nabeel Shahzad
29d206bba3 Merge branch 'dev' 2018-04-23 11:45:22 -05:00
Nabeel Shahzad
110fde34ea Fix subfleet addition error (pikaday missing) 2018-04-23 11:06:17 -05:00
Nabeel Shahzad
2c2b569c6c Fix setting the subfleet pay 2018-04-23 10:36:11 -05:00
Nabeel Shahzad
6c83b539c8 Merge branch 'dev' of github.com:nabeelio/phpvms into dev 2018-04-23 10:25:11 -05:00
Nabeel Shahzad
b7a1c2cb41 Add gitignore into uploads folder 2018-04-23 09:18:07 -05:00
Nabeel Shahzad
cff7e2c4da some cleanup as-per phpstan 2018-04-23 08:46:28 -05:00
Nabeel Shahzad
59302ded0f Fix another flight day test 2018-04-16 16:57:22 -05:00
Nabeel Shahzad
ea32353890 Fix flight on days deactivation test 2018-04-16 16:46:51 -05:00
Nabeel Shahzad
0965465601 add whereNotInOrder() to repository 2018-04-16 16:33:41 -05:00
Nabeel Shahzad
2319a8c9f4 Added more flight phases from ADREP 2018-04-16 09:33:45 -05:00
Nabeel Shahzad
63c5d69e10 Some fixes to trends parsing 2018-04-15 14:14:40 -05:00
Nabeel Shahzad
e369695da5 Fix link highlight color 2018-04-15 12:37:19 -05:00
Nabeel Shahzad
775900bb14 Filter out draft PIREPs 2018-04-15 12:37:04 -05:00
Nabeel Shahzad
9d3d284df7 Check start/end/days of week in cron and active/deactivate flights accordingly 2018-04-12 16:12:32 -05:00
Nabeel Shahzad
395642f69c Add /api/news route 2018-04-11 20:01:41 -05:00
Nabeel Shahzad
8d2fd22e3e Shrink min-height on the card boxes 2018-04-11 13:28:47 -05:00
Nabeel Shahzad
e668a5089e Fix create pirep errors 2018-04-10 07:22:21 -05:00
Nabeel Shahzad
f54f19100c Add a PIREP flag for ready_only; some more METAR cleanup 2018-04-09 22:04:59 -05:00
Nabeel Shahzad
4a19f609fc fix heading stylings within containers 2018-04-09 20:14:29 -05:00
Nabeel Shahzad
e109e00aa8 More styling, banner when nothing is added 2018-04-09 20:04:21 -05:00
Nabeel Shahzad
e1c8174b3f More styling fixes in admin/flight add/edit form 2018-04-09 19:32:38 -05:00
Nabeel Shahzad
0986cddae1 admin styling 2018-04-09 15:16:01 -05:00
Nabeel Shahzad
86d28aafd6 added a few columns for scheduling, styling in admin 2018-04-08 20:51:27 -05:00
Nabeel Shahzad
f842e86885 styling fixes 2018-04-08 16:00:22 -05:00
Nabeel Shahzad
5a30ba683e dependency updates 2018-04-08 09:52:41 -05:00
Nabeel Shahzad
c102a0d858 Refactor all of the unit conversion code 2018-04-07 20:52:12 -05:00
Nabeel Shahzad
eae5989845 Replace METAR data with custom class 2018-04-07 09:05:06 -05:00
Nabeel Shahzad
f4f41cd900 Fix check for block_off_time 2018-04-06 17:25:57 -05:00
Nabeel Shahzad
078f8038e4 quick comment over the ClassLoader 2018-04-06 17:23:55 -05:00
Nabeel Shahzad
d5fba47dc6 Move migration base class entirely into the interface 2018-04-06 17:21:10 -05:00
Nabeel Shahzad
3e89a53fc1 Move cron scripts to root namespace 2018-04-06 17:14:01 -05:00
Nabeel Shahzad
7179910bc6 Backend state for saving PIREP as a draft 2018-04-06 17:12:35 -05:00
Nabeel Shahzad
12a442970e PIREP form styling and improvments 2018-04-06 17:10:45 -05:00
Nabeel Shahzad
42264eb180 More refactoring of metar parser 2018-04-04 23:37:10 -05:00
Nabeel Shahzad
a31b704203 add metar lib and adding some modifications 2018-04-04 20:59:52 -05:00
Nabeel Shahzad
129c551fa0 Reorganized PIREP page 2018-04-04 17:42:43 -05:00
Nabeel Shahzad
d8dad44e43 Add compositional interface for METAR parser class 2018-04-04 17:14:46 -05:00
Nabeel Shahzad
e27f6f1b14 Add addtl fields to pirep - block_off and block_on times, calculate block_off time if not there 2018-04-04 13:03:10 -05:00
Nabeel Shahzad
052813ba4a Fixes in how METARs are parsed 2018-04-04 09:04:14 -05:00
Nabeel Shahzad
7a3a2f3e9a Remove the url generator 2018-04-04 08:46:46 -05:00
Nabeel Shahzad
9ff3c1ab10 remove single entry for pagination testing 2018-04-03 22:45:45 -05:00
Nabeel Shahzad
a0422899a5 redesigning the pirep page a bit 2018-04-03 22:44:11 -05:00
Nabeel Shahzad
6fb66a1d80 Fixing some styling on the frontend 2018-04-03 19:21:42 -05:00
Nabeel Shahzad
4d3fb5b873 removed/update composer dependencies 2018-04-03 18:15:10 -05:00
Nabeel Shahzad
af28156498 Add user balance to dashboard 2018-04-03 12:06:06 -05:00
Nabeel Shahzad
99555539a7 Fix timezone/country not being saved on register #223 2018-04-03 09:43:32 -05:00
Nabeel Shahzad
04d63ca931 Remove medialibrary stuff 2018-04-03 08:16:39 -05:00
Nabeel Shahzad
2351dbe717 Move caching into Metar base class, clean up of caller in the widget 2018-04-02 22:44:31 -05:00
Nabeel Shahzad
717118cfb4 Add METAR interface and use local library for decoding 2018-04-02 22:35:25 -05:00
Nabeel Shahzad
3dba586f83 Add downloads page 2018-04-02 18:37:41 -05:00
Nabeel Shahzad
36a7886668 Add laravel-medialibrary for avatars 2018-04-02 17:49:04 -05:00
Nabeel Shahzad
0f98e729ce Save file asset 2018-04-02 17:34:58 -05:00
Nabeel Shahzad
ccfa904300 change file controller name 2018-04-02 13:42:24 -05:00
Nabeel Shahzad
9e1e0142e9 Route downloads through controller; file IDs as hash to prevent guessing; download count; download list on airport page 2018-04-02 12:55:37 -05:00
Nabeel Shahzad
3ddee56359 Add description field for files 2018-04-02 11:46:33 -05:00
Nabeel Shahzad
bbfad3a0ef Allow uploads for top level airline 2018-04-02 11:08:38 -05:00
Nabeel Shahzad
026a83591d Fixes to file uploading; include disk name, remove clunky redirect code 2018-04-02 11:04:32 -05:00
Nabeel Shahzad
6c516cf4bf metar template change #61 2018-04-02 07:11:02 -05:00
Nabeel Shahzad
c000034cab Some changes to WX template layout and cache the API call out #61 2018-04-02 07:06:00 -05:00
Nabeel Shahzad
f84ff8de92 Add a column for the user avatar #226 2018-04-02 06:47:31 -05:00
Nabeel Shahzad
bb73af3806 Add weather to the dashboard for the current airport 2018-04-02 06:47:05 -05:00
Nabeel Shahzad
cfd0853d79 Convert expense type to char, translations for ExpenseType 2018-04-01 22:26:20 -05:00
Nabeel Shahzad
2a01a935c0 Add enums to language strings file 2018-04-01 21:44:04 -05:00
Nabeel Shahzad
02fa97504e Rename Off-block to Departed 2018-04-01 20:47:44 -05:00
Nabeel Shahzad
eb06c07fdb Update PIREP statuses 2018-04-01 20:37:10 -05:00
Nabeel Shahzad
0f521c3af9 Change PIREP states to follow AIDX guidelines 2018-04-01 20:18:12 -05:00
Nabeel Shahzad
ee077ffa16 Add public/uploads to installer permissions check 2018-04-01 19:28:15 -05:00
Nabeel Shahzad
e358b8706f Backend for file uploads attached to any generic model, initially on aircraft and airports #226 2018-04-01 18:02:12 -05:00
Nabeel Shahzad
793b3e7134 change ref_class to ref_model 2018-04-01 14:32:01 -05:00
Nabeel Shahzad
0bed38c78b Add airport overview page and links to it #225 2018-03-31 15:57:30 -05:00
Nabeel Shahzad
46f9b3d9b9 Typo #96 2018-03-30 22:36:01 -05:00
Nabeel Shahzad
1275d7ebc4 Set user on ON_LEAVE automatically after days in settings() #96 2018-03-30 22:28:19 -05:00
Nabeel Shahzad
3744dbfd5d few more checks on aircraft fields 2018-03-30 21:56:55 -05:00
Nabeel Shahzad
8fb239fb8f tests on all airport fields 2018-03-30 21:51:13 -05:00
Nabeel Shahzad
9eb8ed1804 fix aircraft status field type in model 2018-03-30 21:45:11 -05:00
Nabeel Shahzad
a3bfcf01b7 Fix mock storage for airports 2018-03-30 21:25:54 -05:00
Nabeel Shahzad
71da25eca5 Add mock stock to test the csv round-trip 2018-03-30 21:19:48 -05:00
Nabeel Shahzad
217da07007 Fix column headers 2018-03-30 20:57:30 -05:00
Nabeel Shahzad
70e5ccda6f Add IATA and ZFW to aircraft import/export and tables 2018-03-30 20:21:18 -05:00
Nabeel Shahzad
777167f46e Fix flag icons not showing 2018-03-30 19:05:15 -05:00
Nabeel Shahzad
f2952c6567 Fix blank/empty field being returned as invalid object #222 2018-03-30 18:53:43 -05:00
Nabeel Shahzad
2c726f6c52 Fix error with days input missing from flight create/edit 2018-03-30 18:25:27 -05:00
Nabeel Shahzad
1cbfdbdac5 don't attempt to convert flight type in flight exporter 2018-03-30 18:08:03 -05:00
Nabeel Shahzad
63544088cd Add validation to importers to fix invalid/empty columns #222 2018-03-30 17:27:29 -05:00
Nabeel Shahzad
bd30b1f900 Check for departure airport restrictions #221 2018-03-30 11:08:53 -05:00
Nabeel Shahzad
35fb6f0e52 Fix 404 for airport lookup 2018-03-30 08:12:11 -05:00
Nabeel Shahzad
36063e2ca6 Fix api call to airport lookup 2018-03-29 20:32:08 -05:00
Nabeel Shahzad
08d3578d38 Add cost_block_hour tests; extra logging 2018-03-29 14:55:25 -05:00
Nabeel Shahzad
2090f05236 Composer dep updates 2018-03-29 14:24:36 -05:00
Nabeel Shahzad
7fbcfa391b block on/off times in FormRequest check 2018-03-29 14:12:25 -05:00
Nabeel Shahzad
2ab4db3a2e Add edit for flight type; block_on_time and block_off_time for PIREP API 2018-03-29 14:10:49 -05:00
Nabeel Shahzad
be6fead812 Switch to yarn; add select2 2018-03-29 13:49:04 -05:00
Nabeel Shahzad
badfcb0e76 Switch to yarn; add select2 2018-03-29 13:48:50 -05:00
Nabeel Shahzad
cf43685740 Add/implement subfleet cost_block_hour and block_time for PIREP API 2018-03-29 13:42:16 -05:00
Nabeel Shahzad
0bf1286c3a Fix error in flight importer 2018-03-29 11:47:37 -05:00
Nabeel Shahzad
184123194b Fix column type for flight_type 2018-03-29 11:38:39 -05:00
Nabeel Shahzad
bc013e31c8 Fix charter cargo name 2018-03-29 11:36:08 -05:00
Nabeel Shahzad
b31384f429 Expand flight types to match IATA SSIM 2018-03-29 11:34:36 -05:00
Nabeel Shahzad
ec553f06c8 Switch to yarn instead of npm 2018-03-29 11:32:49 -05:00
Nabeel Shahzad
95fed87ad4 Fix js deps and airport lookup 2018-03-28 23:04:53 -05:00
Nabeel Shahzad
d5452d6517 split out some more vendor files 2018-03-28 15:51:44 -05:00
Nabeel Shahzad
e366ca9375 More organization of web assets 2018-03-28 14:01:38 -05:00
Nabeel Shahzad
12caa3b214 Some more messing with webpack 2018-03-28 13:39:57 -05:00
Nabeel Shahzad
226c3d0ce2 more asset file cleanup 2018-03-27 18:45:25 -05:00
Nabeel Shahzad
a1a8c6f141 strip unnecessary imports from js app files 2018-03-27 18:18:25 -05:00
Nabeel Shahzad
1518b8d4f7 vendor files 2018-03-27 16:34:55 -05:00
Nabeel Shahzad
999b11deb5 Move sass files out of public to resources/sass 2018-03-27 16:34:37 -05:00
Nabeel Shahzad
30a8028827 delete extra files and pull into vendor file 2018-03-27 15:46:54 -05:00
Nabeel Shahzad
8ad83a5f9f asset cleanup 2018-03-27 14:46:32 -05:00
Nabeel Shahzad
504b33ba2a Add AirspaceMap widget; airport overview page 2018-03-27 11:40:37 -05:00
Nabeel Shahzad
5cbb480f6e Remove Google libs 2018-03-26 15:49:07 -05:00
Nabeel Shahzad
46f49048c8 Remove composer deps 2018-03-26 15:45:57 -05:00
Nabeel Shahzad
5cad037d7d version file name 2018-03-26 15:28:28 -05:00
Nabeel Shahzad
75874e1ed0 Don't delete the import folder in build 2018-03-26 15:26:47 -05:00
Nabeel Shahzad
9387ad1891 fix version file generation 2018-03-26 15:20:25 -05:00
Nabeel Shahzad
ca831170f4 Add different version files based on branch/tag 2018-03-26 15:07:24 -05:00
Nabeel Shahzad
c51b074e32 Keep composer install without wiping 2018-03-26 14:56:03 -05:00
Nabeel Shahzad
c9b58a4d9d Change order of cleanup 2018-03-26 14:48:01 -05:00
Nabeel Shahzad
99142f9fec Fixed merge 2018-03-26 09:35:01 -05:00
Nabeel Shahzad
46e956475a Fix comments 2018-03-26 09:33:45 -05:00
Nabeel Shahzad
5ecfc2d437 Switch to autodiscover for console commands 2018-03-25 16:52:13 -05:00
Nabeel Shahzad
ca2f8e1aa5 Move helper generation to new command 2018-03-25 16:50:48 -05:00
Nabeel Shahzad
204f0b7a10 Build package without dev dependencies 2018-03-25 16:20:49 -05:00
Nabeel Shahzad
699883f2fc Update dependencies, remove ide_helper generating always 2018-03-25 16:19:24 -05:00
Nabeel Shahzad
eefce8bab6 updated composer deps 2018-03-25 09:57:15 -05:00
Nabeel Shahzad
02ae2353d4 Stylesheet changes 2018-03-25 09:38:58 -05:00
Nabeel Shahzad
0671742703 Load subfleet page first, can add aircraft from there #217 2018-03-23 20:30:31 -05:00
Nabeel Shahzad
1eb7e5d59a Fix issue with flight fields not adding correctly 2018-03-23 20:29:37 -05:00
Nabeel Shahzad
33daaf4a35 Add an InternalError type that piggybacks ValidationError 2018-03-23 17:29:54 -05:00
Nabeel Shahzad
f5c492bb7e Sort aircraft by registration 2018-03-23 16:41:09 -05:00
Nabeel Shahzad
c81fc5f25b only output airline icao in subfleet export 2018-03-23 16:38:56 -05:00
Nabeel Shahzad
eb64f268d3 Fix flight field bugs 2018-03-23 15:02:26 -05:00
Nabeel Shahzad
f8f5a71564 Move subfleet add/remove to fleet service for a flight 2018-03-23 14:10:18 -05:00
Nabeel Shahzad
1161106d9c Fix airport field row being inserted and check against airport ID 2018-03-23 12:27:28 -05:00
Nabeel Shahzad
c6f423087d fix failed to error 2018-03-23 10:37:34 -05:00
Nabeel Shahzad
182cb2d33b Change flight_number field to uint 2018-03-22 23:11:59 -05:00
Nabeel Shahzad
49dfa7fc17 Sort flights by flight_number 2018-03-22 22:50:41 -05:00
Nabeel Shahzad
28a44631fc add field values to flight api 2018-03-22 22:48:54 -05:00
Nabeel Shahzad
29b84f9281 Reverse the iata/icao columns for airport import 2018-03-22 22:21:54 -05:00
Nabeel Shahzad
7105e82922 Add days of week to flights table; add to import/export for flights 2018-03-22 21:21:35 -05:00
Nabeel Shahzad
8b53ca2fdc Fix types and codes import 2018-03-22 19:59:35 -05:00
Nabeel Shahzad
112a72ac6f Subfleet exporter #194 2018-03-22 17:59:10 -05:00
Nabeel Shahzad
46d8fb125a Add fare import/exporter #194 2018-03-22 17:48:57 -05:00
Nabeel Shahzad
a44204b185 Import/export expenses #194 2018-03-22 17:17:37 -05:00
Nabeel Shahzad
4e3a9fd9ea Export airports 2018-03-22 13:04:13 -05:00
Nabeel Shahzad
d4f79b1331 Add aircraft export 2018-03-22 12:55:56 -05:00
Nabeel Shahzad
78e70fec3b Fix directory creation path 2018-03-22 12:48:27 -05:00
Nabeel Shahzad
fbfd71adcf Cleanup Exporter; use firstOrCreate for any missing data we can infer/setup defaults for 2018-03-22 12:43:58 -05:00
Nabeel Shahzad
9657e8bd40 Rename import/export, fix tests with parser 2018-03-21 19:12:36 -05:00
Nabeel Shahzad
276b93fc57 Export flights to CSV in admin #194 2018-03-21 17:07:30 -05:00
Nabeel Shahzad
95a7365fee remove unique on update #214 2018-03-21 12:35:06 -05:00
Nabeel Shahzad
dad44db0bc Fix table reference for uniques 2018-03-21 10:34:04 -05:00
Nabeel Shahzad
0dca866f11 Fix unique validation 2018-03-21 09:55:02 -05:00
Nabeel Shahzad
bb5bb4d4c7 Fixed scoping rules in Model classes 2018-03-20 19:40:19 -05:00
Nabeel Shahzad
b9beb6c804 Add importers in console and admin for flights/aircraft/subfleets and airport #194 2018-03-20 19:17:11 -05:00
Nabeel Shahzad
782121829a Fix seeder for flight_subfleet 2018-03-20 16:12:33 -05:00
Nabeel Shahzad
5d5565e5a8 rename flight subfleet join table 2018-03-20 16:11:24 -05:00
Nabeel Shahzad
9e43955fbb rename yaml import/export 2018-03-20 16:10:52 -05:00
Nabeel Shahzad
25a299fb74 Add flight fields for templated fields on edit flight #213 2018-03-20 13:47:47 -05:00
Nabeel Shahzad
485c6e86bb add separate flight_fields table and move over to flight_field_values 2018-03-20 13:06:06 -05:00
Nabeel Shahzad
a9454c319a Add helper field() method to Pirep model 2018-03-20 11:46:48 -05:00
Nabeel Shahzad
712cb185b4 Add a helper method in the Flight model to more easily get a custom value 2018-03-20 11:36:28 -05:00
Nabeel Shahzad
4e59bd0442 view flight bids in flights screen #203 2018-03-20 11:28:06 -05:00
Nabeel Shahzad
06e1cd15c0 Fix database connection test in installer 2018-03-20 09:29:45 -05:00
Nabeel Shahzad
273ccc648d Set some more methods as final in interfaces 2018-03-19 21:01:32 -05:00
Nabeel Shahzad
ccf56ddec1 Fix formatting and interfaces in nearly every file 2018-03-19 20:50:40 -05:00
Nabeel Shahzad
04c5b9e7bf Move Enum base class to App\Interfaces 2018-03-18 21:24:41 -05:00
Nabeel Shahzad
36ea12e135 Move the model callbacks into Observables; reduce caching since it held balances incorrectly 2018-03-18 20:37:35 -05:00
Nabeel Shahzad
6b002f24a8 Store full datetime in post_date; recalculate finances on every pirep 2018-03-17 22:20:08 -05:00
Nabeel Shahzad
6fa724d7b7 Reduce the number of flights created in tests to reduce collisions 2018-03-17 18:45:18 -05:00
Nabeel Shahzad
02a6d0d056 Change the PilotFlightAwards parameter name to be more descriptive #155 2018-03-17 18:38:09 -05:00
Nabeel Shahzad
28d180e850 Change the parameter name into the award check() method #155 2018-03-17 18:19:05 -05:00
Nabeel Shahzad
3a1ee94acf Ordering in ClassLoader 2018-03-17 18:07:42 -05:00
Nabeel Shahzad
776cea7055 Add error handler when trying to invoke in ClassLoader 2018-03-17 18:07:13 -05:00
Nabeel Shahzad
4b7cd6ce6e Splice the logger to use the cron stack for the console 2018-03-17 18:05:51 -05:00
Nabeel Shahzad
67ef6872af Call the AwardListener in the proper UserStatsChanged event #155 2018-03-17 12:55:50 -05:00
Nabeel Shahzad
3c39aeee43 Change rank field from image_link to image_url for consistency 2018-03-17 12:19:26 -05:00
Nabeel Shahzad
e9baf4acb5 Add/edit the award class in Admin #155 2018-03-17 12:17:38 -05:00
Nabeel Shahzad
a21e2dd412 Clean up Award controller in admin #155 2018-03-17 11:39:51 -05:00
Nabeel Shahzad
7feecb507d Add ability to pass in parameters to an Award class #155 2018-03-17 11:35:34 -05:00
Nabeel Shahzad
26f00ccaae Add the event listener for the awards #155 2018-03-17 00:55:39 -05:00
Nabeel Shahzad
31b9195a6e Implement the other functionality for awards #154 2018-03-17 00:18:03 -05:00
Nabeel Shahzad
45a22e26be Merge #154 Awards into dev 2018-03-17 00:03:17 -05:00
Nabeel Shahzad
7dd6a7e7f3 Awards base class and scaffolding #155 2018-03-16 23:59:53 -05:00
Nabeel Shahzad
067fb0f9f0 Implement events for cron expenses; add processing of daily/monthly expenses #136 2018-03-16 20:12:56 -05:00
Nabeel Shahzad
d34de098e5 Add separate redirect config after registration 2018-03-16 11:42:01 -05:00
Nabeel Shahzad
428d016e26 Customize redirect after login 2018-03-16 11:41:18 -05:00
Nabeel Shahzad
15d483b332 Add config to change redirect after login 2018-03-16 11:40:09 -05:00
Nabeel Shahzad
92bb56e344 Add recaptcha implementation #212 2018-03-16 11:38:06 -05:00
Nabeel Shahzad
b9380b2c3a Dependencies for captcha #212 2018-03-16 10:50:04 -05:00
Nabeel Shahzad
ccbc109db2 Add setting to automatically remove bid on PIREP accept #200 2018-03-15 18:20:07 -05:00
Nabeel Shahzad
58fbbd98a4 url param was missing 2018-03-14 19:54:58 -05:00
Nabeel Shahzad
2aae789e2a Make sure inline scripts in admin all have the full base url 2018-03-14 18:14:35 -05:00
Nabeel Shahzad
e5ff927f7d Add bid was missing url() call to put the URL correctly 2018-03-14 10:40:57 -05:00
Nabeel Shahzad
afd7aebe20 Allow the fares to be submitted via API for ACARS #125 2018-03-14 10:34:41 -05:00
Nabeel Shahzad
7148f27d33 Find/replace the LoadConfiguration class #163 2018-03-14 09:46:02 -05:00
Nabeel Shahzad
6975167a77 formatting to js standard 2018-03-14 09:07:41 -05:00
Nabeel Shahzad
57cddee3fd Cleanup the api_key and csrf_token setters 2018-03-13 01:55:14 -05:00
Nabeel Shahzad
684ee545cf include csrf token and fix escaping for admin scripts 2018-03-13 01:48:47 -05:00
Nabeel Shahzad
bff80c2dc7 Change user bid to POST 2018-03-13 01:26:27 -05:00
Nabeel Shahzad
acb289f6d0 Make sure login uses Form to get the csrf token 2018-03-12 22:17:58 -05:00
Nabeel Shahzad
05655632cc Update ssri npm package bc of vulnerability 2018-03-12 20:20:59 -05:00
Nabeel Shahzad
1896e1cc35 Configure axios library and read the api-key dynamically 2018-03-12 20:14:55 -05:00
Nabeel Shahzad
0f9ce8bbb9 Frontend maps to use the commonjs compiled files 2018-03-12 18:10:35 -05:00
Nabeel Shahzad
8076c2d8c1 Fixing XSS vulnerability by using the proper output tags 2018-03-12 17:58:12 -05:00
Nabeel Shahzad
17f9464208 first pass splitting js into commonjs modules 2018-03-12 17:30:52 -05:00
Nabeel Shahzad
843cf26140 Add Axios dependency 2018-03-12 11:00:12 -05:00
Nabeel Shahzad
a3264c1cd1 re-enable csrf token for forms 2018-03-12 10:33:46 -05:00
Nabeel Shahzad
46452edf55 Include Theme as facade 2018-03-11 22:26:19 -05:00
Nabeel Shahzad
d90e118f56 Move vaCentral config to its own config file and ServiceProvider 2018-03-11 18:14:34 -05:00
Nabeel Shahzad
7cc3fc6a3a Remove the phpvms.skin config, use theme instead 2018-03-11 18:05:53 -05:00
Nabeel Shahzad
98ebd5e358 Remove the skin_view() call from base Controller class 2018-03-11 18:03:15 -05:00
Nabeel Shahzad
f05e37767f Update skinning with more flexible theme module 2018-03-11 18:00:42 -05:00
Nabeel Shahzad
03c15473b9 remove with() 2018-03-11 17:22:25 -05:00
Nabeel Shahzad
df8f6372f1 Fix issue with SKIN_NAME being undefined 2018-03-11 10:55:20 -05:00
Nabeel Shahzad
2ec7bc1caa dependency updates 2018-03-11 10:39:49 -05:00
Nabeel Shahzad
4f8f82f69f find proper rank when assigning subfleet 2018-03-09 13:03:43 -06:00
Nabeel Shahzad
724daabc5a Fix error with adding rank 2018-03-09 10:24:22 -06:00
Nabeel Shahzad
83f0f1bfe3 Fix notification events callers 2018-03-09 08:52:55 -06:00
Nabeel Shahzad
aac355b077 Fix boot magic name in trait 2018-03-08 08:56:27 -06:00
Nabeel Shahzad
f13c961863 Fix flight page errors and some naming fixes 2018-03-08 08:51:36 -06:00
Nabeel Shahzad
fefc6bc22a Add back in --base-only to version generation 2018-03-08 08:16:42 -06:00
Nabeel Shahzad
d42bfc7aae Fix version number generation 2018-03-07 10:24:29 -06:00
Nabeel Shahzad
dc2570a408 Rename the PirepService class 2018-03-06 17:36:06 -06:00
Nabeel Shahzad
a325470b8f Aircraft can have its own expenses #130 2018-03-06 17:32:56 -06:00
Nabeel Shahzad
c7925db0e7 Add field to charge an expense to a user #130 2018-03-06 17:15:42 -06:00
Nabeel Shahzad
dad923489b Set tags on transactions #130 2018-03-06 06:40:49 -06:00
Nabeel Shahzad
453ca5b180 Cleanup the transaction memos 2018-03-06 06:17:45 -06:00
Nabeel Shahzad
9d3953f3ac Refactor expenses; move finance service classes; add daily/monthly skeletons #130 #136 2018-03-05 22:49:42 -06:00
Nabeel Shahzad
db10ebf807 Add expenses on airports as well #130 #136 2018-03-05 22:10:00 -06:00
Nabeel Shahzad
88a8fd2bbd Remove subfleet_expenses and combine into main expenses table; select expense type on subfleet #130 #136 2018-03-05 21:24:49 -06:00
Nabeel Shahzad
8c05ad134e Move images to right directory 2018-03-05 21:23:17 -06:00
Nabeel Shahzad
505931736c Finance overview page added to admin with monthly breakdown #130 2018-03-05 19:55:48 -06:00
Nabeel Shahzad
01af6f6855 finance link on menu 2018-03-05 14:36:14 -06:00
Nabeel Shahzad
8b163348a2 Cleanup comments 2018-03-05 14:19:14 -06:00
Nabeel Shahzad
53e4bf533f Add finance controller; morphable expense type so they can be applied to any model #130 2018-03-05 14:18:54 -06:00
Nabeel Shahzad
33c2ee702b Cleanup subfleet expense name; reload page on recalculate #130 2018-03-05 13:15:47 -06:00
Nabeel Shahzad
a7a70ce423 Added refresh finances button to transactions list #130 2018-03-05 13:07:10 -06:00
Nabeel Shahzad
96e8fbfa78 Add subfleet specific expenses, fixed bug for pirep fares #130 #136 2018-03-05 12:21:38 -06:00
Nabeel Shahzad
bf94a20e57 Set the default email driver to the default php mail 2018-03-05 09:21:40 -06:00
Nabeel Shahzad
65940c6df2 Updated composer reqs 2018-03-05 09:18:31 -06:00
Nabeel Shahzad
56f5276bae update symfony version deps 2018-03-04 15:07:28 -06:00
Nabeel Shahzad
454b2b488b Add transaction group filter 2018-03-04 09:45:23 -06:00
Nabeel Shahzad
2eb0f76f32 Fix sample data removing extra expenses #130 2018-03-02 17:52:20 -06:00
Nabeel Shahzad
9424bf7c46 Fix finding expenses call #130 2018-03-02 17:48:36 -06:00
Nabeel Shahzad
fa5237179b Remove balance field from user table #130 2018-03-02 17:31:58 -06:00
Nabeel Shahzad
586769fbf0 Fix tests and docs/better checks #130 2018-03-02 17:29:11 -06:00
Nabeel Shahzad
2df09c533b show transactions in pirep 2018-03-02 16:09:48 -06:00
Nabeel Shahzad
9d65515290 Add index of ref class+id #130 2018-03-02 13:15:18 -06:00
Nabeel Shahzad
607367feb2 Replace the ref_class_id 2018-03-02 13:14:20 -06:00
Nabeel Shahzad
9f89447070 Add pilot pay to journals; cleanup payment code #130 2018-03-02 13:12:39 -06:00
Nabeel Shahzad
284db21a3a Hide API key from admin 2018-03-02 09:26:25 -06:00
Nabeel Shahzad
02374dcd57 Update balance in callbacks 2018-03-01 22:00:11 -06:00
Nabeel Shahzad
92a18448eb YAML table exporter 2018-03-01 21:59:58 -06:00
Nabeel Shahzad
a3305249a6 Test for credits and debits with fixed amounts 2018-03-01 19:15:55 -06:00
Nabeel Shahzad
f9208c9d72 Don't throw exception is journal exists #130 2018-03-01 18:59:24 -06:00
Nabeel Shahzad
2c52a2f7e6 Post fares/expenses on PIREP to Airline journal #130 2018-03-01 16:20:13 -06:00
Nabeel Shahzad
f1b9ea94dc Use morphed column types 2018-03-01 09:51:48 -06:00
Nabeel Shahzad
d22eed50ad Add test to get the balance group #130 2018-02-28 21:54:58 -06:00
Nabeel Shahzad
498e795e4b Fixes and tests for the journal and journaled transactions #130 2018-02-28 21:52:36 -06:00
Nabeel Shahzad
1794549a20 Move journal transaction code to repository #130 2018-02-28 19:04:56 -06:00
Nabeel Shahzad
d1fcecf873 Change to getValue() on Money class 2018-02-28 18:17:15 -06:00
Nabeel Shahzad
f557e9f965 Add ledger and journal tables #130 2018-02-28 18:01:32 -06:00
Nabeel Shahzad
7ffef849d2 Remove useless tests 2018-02-28 15:42:43 -06:00
Nabeel Shahzad
448a9846c9 Implement airport hub restriction closes #104 2018-02-28 15:37:24 -06:00
Nabeel Shahzad
3188f356eb Add setting for home airport restriction #104 2018-02-28 15:27:46 -06:00
Nabeel Shahzad
e7868868c4 Fix the module stubs and sample module for admin closes #201 2018-02-28 15:16:36 -06:00
Nabeel Shahzad
208b6e73dc Don't overwrite pagination counts, let it default to the config #162 2018-02-28 15:06:57 -06:00
Nabeel Shahzad
6993cba55a Don't change rank if it seems like it's been manually changed by an admin #196 2018-02-28 15:01:23 -06:00
Nabeel Shahzad
e03abc1a64 Moved away from the phpmoney library since it requires intl extension 2018-02-28 13:54:14 -06:00
Nabeel Shahzad
777bd5e26d Return the pay in Money() format 2018-02-28 13:34:49 -06:00
Nabeel Shahzad
a6afcc944c Add Money composition class to Support 2018-02-27 21:38:05 -06:00
Nabeel Shahzad
ae0c3c5f27 Get the pilot pay, reconcile with values for subfleet overrides 2018-02-27 16:16:40 -06:00
Nabeel Shahzad
bb4fdc5b7f cleanup if on table 2018-02-27 14:30:31 -06:00
Nabeel Shahzad
dfa6d6da51 Split rank pay rate into separate rates for acars and manual flights 2018-02-27 14:29:45 -06:00
Nabeel Shahzad
81b867fa20 Add bid expire time 2018-02-27 14:23:09 -06:00
Nabeel Shahzad
3aa4b8a410 Cleanup and move subfleet/rank settings to FleetService class 2018-02-27 14:12:03 -06:00
Nabeel Shahzad
f0977b48e5 alt_airports missing in flight create 2018-02-27 13:38:11 -06:00
Nabeel Shahzad
baccf7e3ad Fix the flight time not showing closes #199 2018-02-27 13:37:29 -06:00
Nabeel Shahzad
97764866f2 Rename user_bids table to bids 2018-02-27 13:25:32 -06:00
Nabeel Shahzad
c89926399b Delete a bid by either the bid_id or the flight_id 2018-02-27 13:14:58 -06:00
Nabeel Shahzad
a38b4e063b Return the flight object with the bid 2018-02-27 13:11:48 -06:00
Nabeel Shahzad
4c22a098c1 remove QSA, seems to cause problems 2018-02-27 12:32:58 -06:00
Nabeel Shahzad
18aa573a16 remove extra libs 2018-02-26 20:30:50 -06:00
Nabeel Shahzad
d61ade4482 move currency to config file; change units to their own group in settings 2018-02-26 20:23:48 -06:00
Nabeel Shahzad
920b92c096 Update node and package deps 2018-02-26 19:44:10 -06:00
Nabeel Shahzad
10a2084163 Shrink left nav margins in admin 2018-02-26 19:43:42 -06:00
Nabeel Shahzad
e6d78f3e22 cleanup some templates 2018-02-26 19:23:22 -06:00
Nabeel Shahzad
cdd5fc749c Add the acars and manual payrates in the rank/subfleet forms 2018-02-26 19:14:10 -06:00
Nabeel Shahzad
f6ec647eb6 Add base payrate field for ranks 2018-02-26 17:56:30 -06:00
Nabeel Shahzad
4a73a5a6b3 Add table/models and admin for expenses #136 2018-02-26 15:16:12 -06:00
Nabeel Shahzad
286ed78436 Add RewriteBase and QSA to htaccess 2018-02-26 12:35:15 -06:00
Nabeel Shahzad
4393523929 Fix some error conditions in installer; hide passwords in logs 2018-02-25 15:27:20 -06:00
Nabeel Shahzad
d9abaa2f06 Cleanup config files if the db setup fails 2018-02-25 15:13:04 -06:00
Nabeel Shahzad
88e4c26b8f db host placeholder 2018-02-25 15:02:50 -06:00
Nabeel Shahzad
f20cfb53a6 laravel/composer deps updates 2018-02-25 11:23:52 -06:00
Nabeel Shahzad
82b5ff620d put a minimal config for installer into config dir 2018-02-25 11:12:27 -06:00
Nabeel Shahzad
44f839e104 Fix module provider sub 2018-02-25 11:12:01 -06:00
Nabeel Shahzad
3bbcd2a20d fix pirep ids in sample; rename navs to flight reports 2018-02-24 16:05:00 -06:00
Nabeel Shahzad
d0b3b27975 Remove the flight_id column from the pireps table 2018-02-24 15:51:04 -06:00
Nabeel Shahzad
7345dd8076 change some of the sample data 2018-02-24 15:47:43 -06:00
Nabeel Shahzad
2e57f84657 Add sample data for pirep fares #125 2018-02-24 15:45:43 -06:00
Nabeel Shahzad
58e0f50c48 specify fares, js to dynamically change fare form; get applicable fares for the flight/pirep #125 2018-02-24 15:38:25 -06:00
Nabeel Shahzad
910c0e0eab Convert aircraft active to more detailed status #134 2018-02-23 16:37:10 -06:00
Nabeel Shahzad
709aec83e2 Add multiplier to factory #134 2018-02-23 16:07:53 -06:00
Nabeel Shahzad
db94f5b405 Add a ground_handling_multiplier to the subfleet table #134 2018-02-23 16:00:14 -06:00
Nabeel Shahzad
4142d5d28a Add ground_handling_cost to airport #134 2018-02-23 15:48:50 -06:00
Nabeel Shahzad
b8b4fe7a8a Add percentages as part of sample data #125 2018-02-23 15:34:14 -06:00
Nabeel Shahzad
d5aef6fb87 Allow setting percent for fare overrides against base fare #125 2018-02-23 15:12:09 -06:00
Nabeel Shahzad
dd144cc9bc Update changelog 2018-02-23 11:47:57 -06:00
Nabeel Shahzad
7eef7f6cfe Remove extra header from changelog 2018-02-22 17:00:26 -06:00
Nabeel Shahzad
6332bfc6f3 Updated CHANGELOG 2018-02-22 16:38:58 -06:00
Nabeel Shahzad
b2d91ba4c9 Show how pirep was filed in list/edit 2018-02-22 15:29:25 -06:00
Nabeel Shahzad
53b0bbd936 Convert errors into HttpException calls 2018-02-22 15:15:00 -06:00
Nabeel Shahzad
3748ab77d2 Fix aircraft active/inactive states 2018-02-22 14:59:09 -06:00
Nabeel Shahzad
8931f4e271 Change pirep action colors 2018-02-22 14:55:42 -06:00
Nabeel Shahzad
10b0798a30 Cleanup info callouts into components 2018-02-22 14:21:00 -06:00
Nabeel Shahzad
67f6dfc2f4 Cleanup of icons and removed ones not used #195 2018-02-22 13:28:12 -06:00
Nabeel Shahzad
fc381da21b Clean JS in admin to use const/let instead of var 2018-02-22 11:47:28 -06:00
Nabeel Shahzad
98eef1eb12 Update vendor files with font change 2018-02-22 11:44:19 -06:00
Nabeel Shahzad
72c3191c02 Copyright/license update 2018-02-22 11:37:47 -06:00
Nabeel Shahzad
ad5f36f85e Cleanup frontend user bid add/remove to use the API, script and html cleanup #172 2018-02-22 11:34:57 -06:00
Nabeel Shahzad
6dfab75f08 Add api routes to get/add/remove bids for a user #172 2018-02-22 10:44:15 -06:00
Nabeel Shahzad
e176772512 Rename system.js to phpvms.js to make it clearer 2018-02-22 10:14:45 -06:00
Nabeel Shahzad
487b7480af Refactor how errors are handled 2018-02-22 10:14:12 -06:00
Nabeel Shahzad
5d2ef3a9d3 Fix wrong Exception being thrown 2018-02-22 09:41:23 -06:00
Nabeel Shahzad
7b68642fa3 Checkboxes are the bane of my existence closes #181 2018-02-22 09:36:07 -06:00
Nabeel Shahzad
abf47274a1 Cleanup some class names; move acars data into separate seed file 2018-02-22 09:31:07 -06:00
Nabeel Shahzad
3abf38ab93 Return string if not multi-value; add delete_previous flag #194 2018-02-21 21:42:47 -06:00
Nabeel Shahzad
9ed370693d First pass at csv column parsing for kvp as values #194 2018-02-21 21:38:35 -06:00
Nabeel Shahzad
964ea904a1 Make sure the subfleet type field doesn't have spaces 2018-02-21 20:18:50 -06:00
Nabeel Shahzad
1a54aadc19 Make sure the subfleet name doesn't have spaces 2018-02-21 20:16:49 -06:00
Nabeel Shahzad
7872a6a442 Remove debug stuff in xml converter 2018-02-21 15:25:58 -06:00
Nabeel Shahzad
9dfdc8195d Add flight log to both frontend and admin pirep edit view 2018-02-21 15:24:46 -06:00
Nabeel Shahzad
77055991af Get the correct ordering for flight route on map 2018-02-21 15:15:12 -06:00
Nabeel Shahzad
ec9d00c597 Fix map centering 2018-02-21 15:07:44 -06:00
Nabeel Shahzad
a18c00ee95 Convert sequelpro xml to yaml for import 2018-02-21 15:02:24 -06:00
Nabeel Shahzad
713fd66da6 Fix timezone not populating from lookup closes #182 2018-02-21 14:36:41 -06:00
Nabeel Shahzad
ea09a18956 Fixed formatting of almost every file 2018-02-20 22:33:09 -06:00
Nabeel Shahzad
c5b6ca53fa Redirect subfleet create to edit page 2018-02-20 21:55:01 -06:00
Nabeel Shahzad
14d04604cb Add ranks from the subfleet edit page closes #160 2018-02-20 21:53:50 -06:00
Nabeel Shahzad
1c143f3b23 subfleet table fix and edit in name 2018-02-20 21:30:36 -06:00
Nabeel Shahzad
bac829b425 Shrink decimal field sizes as they're overly large 2018-02-20 15:57:31 -06:00
Nabeel Shahzad
7185f6cedf Restrict max number in factory, might be hitting 32 bit limit in tests 2018-02-20 15:41:05 -06:00
Nabeel Shahzad
8386951511 Rename toInt to toNumber 2018-02-20 15:32:49 -06:00
Nabeel Shahzad
b9e88527dd Unit conversion fixes #193 2018-02-20 14:23:02 -06:00
Nabeel Shahzad
aeacd80bcb Check aircraft permissions in PIREP update/file 2018-02-20 14:14:20 -06:00
Nabeel Shahzad
653711fa96 Change volume units to be in lbs/kg closes #193 2018-02-20 14:07:33 -06:00
Nabeel Shahzad
463de8d7e7 Make sure the rank restriction disabled works closes #170 2018-02-20 13:28:53 -06:00
Nabeel Shahzad
4e43223f3a Refuse pirep prefile is user not allowed to use aircraft #170 2018-02-20 12:59:49 -06:00
Nabeel Shahzad
8393ae2851 Add /flight/:id/route resource, returns all route info that's in the navaid database closes #183 2018-02-20 12:06:52 -06:00
Nabeel Shahzad
fdf18cf533 Remove raw_data field from pireps closes #188 2018-02-20 11:17:34 -06:00
Nabeel Shahzad
5ee8c1e779 level not required in prefile; distance required in file 2018-02-20 11:12:50 -06:00
Nabeel Shahzad
2955f93573 Fix a few items in composer.json 2018-02-19 21:56:41 -06:00
Nabeel Shahzad
bc8c5e581c Updated lock file 2018-02-19 20:58:32 -06:00
Nabeel Shahzad
ad4259625c Add flight time to flight create/edit form 2018-02-19 13:33:26 -06:00
Nabeel Shahzad
246c828d7a Remove extra level field and fix documentation link 2018-02-19 11:26:11 -06:00
Nabeel Shahzad
3d55fc09f7 Add options field on setting data import 2018-02-19 11:19:18 -06:00
Nabeel Shahzad
1bb77e1d4b Upgrade to Laravel 5.6 #165 2018-02-19 11:09:56 -06:00
Nabeel Shahzad
3d9d17d9b9 Add call to get user's PIREPs #192 2018-02-19 10:35:49 -06:00
Nabeel Shahzad
5c58dfe1ae generate a hex code for an aircraft on creation #33 2018-02-12 20:58:23 -06:00
Nabeel Shahzad
2678514077 API: Only show active airlines 2018-02-12 12:05:10 -06:00
Nabeel Shahzad
ee71f4a1c8 Remove tail_number field from aircraft 2018-02-12 11:03:25 -06:00
Nabeel Shahzad
62506a26a1 set country on the airline, in admin and installer #191 2018-02-12 10:51:04 -06:00
Nabeel Shahzad
61dc0a046d Fix rank image field 2018-02-12 10:26:27 -06:00
Nabeel Shahzad
c817d1ae4b Installer fixes 2018-02-12 09:47:12 -06:00
Nabeel Shahzad
ecfda6de15 Add collision for test listeners and remove one old dep 2018-02-12 09:02:05 -06:00
Nabeel Shahzad
2f8a69b774 Undo casting time types to Time object #189 2018-02-11 20:50:48 -06:00
Nabeel Shahzad
61af5fe226 Cleanup column types and assign Time class to fields #189 2018-02-11 20:38:56 -06:00
Nabeel Shahzad
fd4407a798 Move internal unit definitions to config file #189 2018-02-11 20:19:02 -06:00
Nabeel Shahzad
4eef254688 set nautical miles as the default mass unit #189 2018-02-11 19:58:07 -06:00
Nabeel Shahzad
d5c2d25c74 finally fixed serialization of conversions #189 2018-02-10 22:49:08 -06:00
Nabeel Shahzad
0700c96901 fix serialization of converter classes #189 2018-02-10 22:30:42 -06:00
Nabeel Shahzad
9b9a20b437 set default storage unit #189 2018-02-10 22:18:07 -06:00
Nabeel Shahzad
f14a9e3ba1 implements ArrayAccess for casting to type #189 2018-02-10 22:04:30 -06:00
Nabeel Shahzad
cb02a7c15e add Time support class #189 2018-02-10 21:36:13 -06:00
Nabeel Shahzad
a8e06c6cc6 base conversion classes for units #189 2018-02-10 21:16:32 -06:00
Nabeel Shahzad
176855b680 check if airport exists 2018-02-10 20:30:11 -06:00
Nabeel Shahzad
3aa01aaa18 tests check the data object in return #186 2018-02-10 18:17:38 -06:00
Nabeel Shahzad
04d44d9bd7 Add SKIN_NAME to error message pages #187 2018-02-10 17:58:11 -06:00
Nabeel Shahzad
762544ea6f don't change rank if it's not auto promoted #168 2018-02-10 17:53:25 -06:00
Nabeel Shahzad
2a289e0468 pirep route wrap the data object #186 2018-02-10 17:48:51 -06:00
Nabeel Shahzad
21e13b6b92 make sure resources return the data object #186 2018-02-10 17:34:46 -06:00
Nabeel Shahzad
e57fb5a7c6 Move code of conduct to wiki 2018-02-10 17:31:59 -06:00
Nabeel Shahzad
5a89b4f194 write the route if it hasn't been set by acars #184 2018-02-10 16:10:19 -06:00
Nabeel Shahzad
7a6b228d8f make planned_distance optional #185 2018-02-10 16:02:15 -06:00
Nabeel Shahzad
fbd73b0717 make planned_distance optional #185 2018-02-10 16:00:43 -06:00
Nabeel Shahzad
7a527f2ed3 Set access modifier on all enums (php 7.1) 2018-02-10 14:06:25 -06:00
Nabeel Shahzad
e6290c3396 set pirep source to acars #177 2018-02-10 13:41:24 -06:00
Nabeel Shahzad
8acb9291fe hide all cancelled pireps #180 2018-02-10 13:25:40 -06:00
Nabeel Shahzad
3ded06390c ignore cancelled pireps in dupe check #179 2018-02-10 13:12:12 -06:00
Nabeel Shahzad
936bceba5d Add --reset-db flag to phpvms:dev-install command #176 2018-02-09 17:16:52 -06:00
Nabeel Shahzad
d94294e3f6 Added new phpvms:dev-install command #176 2018-02-09 17:11:55 -06:00
Nabeel Shahzad
390f08d25f Cleanup the sample env.php file 2018-02-09 16:36:02 -06:00
Nabeel Shahzad
f0d2b4ed2f update changelog 2018-02-09 15:44:36 -06:00
Nabeel Shahzad
80cd80a5cf Change the filtering to operate without being in the service layer #174 2018-02-09 15:42:37 -06:00
Nabeel Shahzad
17f1085ffb Filter out flights depending on the only_flights_from_current setting #174 2018-02-09 15:36:13 -06:00
Nabeel Shahzad
9b55a9691f Setting which filters out aircraft not at the departure airport #171 2018-02-09 15:07:34 -06:00
Nabeel Shahzad
13b4a3854b move filterSubfleets() to FlightService class #170 2018-02-09 14:36:36 -06:00
Nabeel Shahzad
f6b2102e48 fix bug where aircraft restrictions aren't respected in flight calls #170 2018-02-09 14:26:14 -06:00
Nabeel Shahzad
71189e4f2d Change most APIs to require API key #173 2018-02-09 13:20:35 -06:00
Nabeel Shahzad
041cef91de Refactor how settings are added to generate the offsets and order 2018-02-09 12:57:00 -06:00
Nabeel Shahzad
2a0e97c043 update composer 2018-02-08 19:16:03 -06:00
Nabeel Shahzad
bcc6be0d29 Updates for addon/modules to make it easier to create APIs 2018-02-08 19:11:53 -06:00
Nabeel Shahzad
b4ea82f327 Cleanup of the test classes and remove superfluous dependencies 2018-02-08 11:07:21 -06:00
Nabeel Shahzad
48346ae805 Use migrate:fresh instead of refresh 2018-02-07 10:37:54 -06:00
Nabeel Shahzad
b5dbde84c4 Fix rank image link field to be string 2018-02-06 14:09:20 -06:00
Nabeel Shahzad
e69d9f4c38 Add pirep fields to the API response; add tests for setting/getting them 2018-02-06 13:59:40 -06:00
Nabeel Shahzad
de0c71cb06 Set fields to pireps in prefile/update calls 2018-02-06 13:46:23 -06:00
Nabeel Shahzad
8b2eddc72d Travis build distros on PHP 7.1 2018-02-06 13:13:45 -06:00
Nabeel Shahzad
cf286986e2 change variable name 2018-02-06 13:13:00 -06:00
Nabeel Shahzad
7d8dc2a4d4 Cleanup factories and seed data for airport timezone column change 2018-02-06 13:11:42 -06:00
Nabeel Shahzad
531c7ddba3 Set hours to read-only once they've changed away from PENDING #167 2018-02-06 12:58:48 -06:00
Nabeel Shahzad
ac0058e951 Some more attribute cleanup 2018-02-06 12:01:55 -06:00
Nabeel Shahzad
56bf277fe0 Add shorthands for timezone to tz 2018-02-06 11:02:40 -06:00
Nabeel Shahzad
1cc999a4f9 Change Airport tz field to timezone 2018-02-06 10:59:31 -06:00
Nabeel Shahzad
c6b1a475e9 Add timezone aliases 2018-02-06 10:33:39 -06:00
Nabeel Shahzad
8d76e16220 Add the validation error fields in the templates 2018-02-06 10:18:22 -06:00
Nabeel Shahzad
995d53df3e Set slug properly on pirep field and fix validation 2018-02-06 10:02:34 -06:00
Nabeel Shahzad
282421deb8 Add a /update to update an install #164 2018-02-05 16:16:24 -06:00
Nabeel Shahzad
eebf7871cb Cleanup composer file and reqs in readme #166 2018-02-05 13:26:54 -06:00
Nabeel Shahzad
9d46cee07a Bump minimum PHP version to 7.1; library cleanup #166 2018-02-05 11:29:50 -06:00
Servetas George
78724e981c Awards Administration 2018-01-28 21:19:35 +02:00
4657 changed files with 160616 additions and 182433 deletions

1
.dockerignore Normal file
View File

@@ -0,0 +1 @@
vendor

30
.editorconfig Normal file
View File

@@ -0,0 +1,30 @@
#
root = true
[*]
end_of_line = lf
insert_final_newline = true
[*.js]
indent_style = space
indent_size = 2
[*.php]
indent_style = space
indent_size = 4
[*.blade.php]
indent_style = space
indent_size = 2
[*.stub]
indent_style = space
indent_size = 4
[Makefile]
indent_style = tab
# Matches the exact files either package.json or .travis.yml
[{package.json, .travis.yml}]
indent_style = space
indent_size = 2

7
.eslintignore Normal file
View File

@@ -0,0 +1,7 @@
.travis/*
.idea/*
.vscode/*
node_modules/*
public/*
gulpfile.js
webpack.mix.js

28
.eslintrc Normal file
View File

@@ -0,0 +1,28 @@
{
"extends": "airbnb",
"env": {
"es6": true,
"browser": true
},
"parserOptions": {
"ecmaVersion": 8
},
"rules": {
"camelcase": 0,
"no-console": 0,
"func-names": 0,
"prefer-object-spread": 0,
"no-param-reassign": [
2,
{
"props": false
}
],
"import/no-extraneous-dependencies": [
"error",
{
"devDependencies": true
}
]
}
}

30
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,30 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is. Please upload the Laravel logs as well from `storage/logs/laravel.log` (or the file with the correct date)
**Version**
Please enter the version
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context and attach logs (from `storage/logs/laravel-<date>.log`)

View File

@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

27
.github/scripts/Formatting.xml vendored Normal file
View File

@@ -0,0 +1,27 @@
<code_scheme name="PHPVMS" version="173">
<option name="RIGHT_MARGIN" value="100" />
<PHPCodeStyleSettings>
<option name="ALIGN_KEY_VALUE_PAIRS" value="true" />
<option name="LOWER_CASE_BOOLEAN_CONST" value="true" />
<option name="LOWER_CASE_NULL_CONST" value="true" />
<option name="ALIGN_CLASS_CONSTANTS" value="true" />
<option name="FORCE_SHORT_DECLARATION_ARRAY_STYLE" value="true" />
</PHPCodeStyleSettings>
<XML>
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
</XML>
<codeStyleSettings language="JAVA">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JSON">
<indentOptions>
<option name="INDENT_SIZE" value="4" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="PHP">
<option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
<option name="ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION" value="true" />
</codeStyleSettings>
</code_scheme>

86
.github/scripts/build.sh vendored Normal file
View File

@@ -0,0 +1,86 @@
#!/usr/bin/env bash
echo "Version: ${VERSION}"
echo "Full Version: ${FULL_VERSION}"
echo "Package name: ${TAR_NAME}"
echo "Current directory: ${BASE_DIR}"
echo "Cleaning files"
# Leftover individual files to delete
declare -a remove_files=(
.git
.github
.sass-cache
.idea
.travis
docker
_ide_helper.php
.dockerignore
.dpl
.editorconfig
.eslintignore
.eslintrc
.php_cs
.php_cs.cache
.phpstorm.meta.php
.styleci.yml
.phpunit.result.cache
env.php
intellij_style.xml
config.php
docker-compose.yml
Makefile
phpcs.xml
phpunit.xml
phpvms.iml
Procfile
phpstan.neon
node_modules
composer.phar
vendor/willdurand/geocoder/tests
)
for file in "${remove_files[@]}"; do
rm -rf $file
done
find ./vendor -type d -name ".git" -print0 | xargs rm -rf
find . -type d -name "sass-cache" -print0 | xargs rm -rf
# clear any app specific stuff that might have been loaded in
find bootstrap/cache -mindepth 1 -maxdepth 1 -not -name '.gitignore' -print0 -exec rm -rf {} +
find storage/app -mindepth 1 -maxdepth 1 -not -name '.gitignore' -not -name public -not -name import -print0 -exec rm -rf {} +
find storage/app/public -mindepth 1 -maxdepth 1 -not -name '.gitignore' -not -name avatars -not -name uploads -print0 -exec rm -rf {} +
find storage/app/public/avatars -mindepth 1 -not -name '.gitignore' -print0 -exec rm -rf {} +
find storage/app/public/uploads -mindepth 1 -not -name '.gitignore' -print0 -exec rm -rf {} +
find storage/debugbar -mindepth 1 -not -name '.gitignore' -print0 -exec rm -rf {} +
find storage/docker -mindepth 1 -not -name '.gitignore' -print0 -exec rm -rf {} +
find storage/framework/cache -mindepth 1 -not -name '.gitignore' -print0 -exec rm -rf {} +
find storage/framework/sessions -mindepth 1 -not -name '.gitignore' -print0 -exec rm -rf {} +
find storage/framework/views -mindepth 1 -not -name '.gitignore' -print0 -exec rm -rf {} +
find storage/logs -mindepth 1 -not -name '.gitignore' -print0 -exec rm -rf {} +
mkdir -p storage/app/public/avatars
mkdir -p storage/app/public/uploads
mkdir -p storage/framework/cache
mkdir -p storage/framework/sessions
mkdir -p storage/framework/views
cd /tmp
ls -al $BASE_DIR/../
tar -czf $TAR_NAME -C $BASE_DIR .
sha256sum $TAR_NAME >"$TAR_NAME.sha256"
tar2zip $TAR_NAME
sha256sum $ZIP_NAME >"$ZIP_NAME.sha256"
ls -al /tmp
echo "Moving to dist"
mkdir -p $BASE_DIR/dist
cd $BASE_DIR/dist
mv "/tmp/$TAR_NAME" "/tmp/$ZIP_NAME" "/tmp/$TAR_NAME.sha256" "/tmp/$ZIP_NAME.sha256" .

25
.github/scripts/env.php vendored Normal file
View File

@@ -0,0 +1,25 @@
APP_ENV="dev"
APP_KEY="base64:zdgcDqu9PM8uGWCtMxd74ZqdGJIrnw812oRMmwDF6KY="
APP_URL="http://localhost"
APP_SKIN="default"
APP_DEBUG="true"
APP_LOCALE="en"
PHPVMS_INSTALLED="true"
APP_LOG="daily"
APP_LOG_LEVEL="debug"
APP_LOG_MAX_FILES="3"
DB_CONNECTION="mysql"
DB_HOST="127.0.0.1"
DB_PORT="3306"
DB_DATABASE="phpvms"
DB_USERNAME="root"
DB_PASSWORD=
CACHE_DRIVER="file"
CACHE_PREFIX=
SESSION_DRIVER="file"
QUEUE_DRIVER="database"

45
.github/scripts/phpunit.xml vendored Normal file
View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="bootstrap/autoload.php"
colors="true"
processIsolation="false"
stopOnFailure="true"
convertErrorsToExceptions="false"
convertNoticesToExceptions="false"
convertWarningsToExceptions="false"
beStrictAboutOutputDuringTests="false"
beStrictAboutTestsThatDoNotTestAnything="false">
<testsuites>
<testsuite name="Application Test Suite">
<directory suffix="Test.php">./tests</directory>
</testsuite>
</testsuites>
<extensions>
<extension class="Tests\Bootstrap"/>
</extensions>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<!--<listeners>
<listener class="NunoMaduro\Collision\Adapters\Phpunit\Listener"/>
</listeners>-->
<php>
<ini name="error_reporting" value="E_ALL"/>
<ini name="display_errors" value="On"/>
<ini name="display_startup_errors" value="On"/>
<server name="APP_ENV" value="testing"/>
<server name="APP_KEY" value="base64:ve66Z5Kt/zTN3p++0zOPu854PHfZkwJE5VuoFAlzHtI="/>
<server name="APP_DEBUG" value="true"/>
<server name="APP_LOG_LEVEL" value="debug"/>
<server name="DB_CONNECTION" value="memory"/>
<server name="CACHE_DRIVER" value="array"/>
<server name="SESSION_DRIVER" value="array"/>
<server name="QUEUE_DRIVER" value="sync"/>
<server name="APP_CONFIG_CACHE" value="bootstrap/cache/config.phpunit.php"/>
<server name="APP_SERVICES_CACHE" value="bootstrap/cache/services.phpunit.php"/>
<server name="APP_PACKAGES_CACHE" value="bootstrap/cache/packages.phpunit.php"/>
<server name="APP_ROUTES_CACHE" value="bootstrap/cache/routes.phpunit.php"/>
<server name="APP_EVENTS_CACHE" value="bootstrap/cache/events.phpunit.php"/>
</php>
</phpunit>

36
.github/scripts/version.sh vendored Normal file
View File

@@ -0,0 +1,36 @@
#!/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=Version ${FULL_VERSION} is available, download: [zip](http://downloads.phpvms.net/$ZIP_NAME) | [tar](http://downloads.phpvms.net/$TAR_NAME)" >> $GITHUB_ENV

10
.github/stale.yml vendored Normal file
View File

@@ -0,0 +1,10 @@
---
daysUntilStale: 60
daysUntilClose: false
exemptLabels:
- pinned
- security
exemptMilestones: true
staleLabel: wontfix
markComment: false
closeComment: false

249
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,249 @@
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 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 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 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 }}'

6
.gitignore vendored
View File

@@ -1,9 +1,12 @@
_ide_helper.php
.php_cs.cache
.phpstorm.meta.php
.phpunit.result.cache
/vendor
node_modules/
npm-debug.log
composer.phar
yarn-error.log
*.bak
# Laravel 4 specific
@@ -26,6 +29,7 @@ env.php
#Homestead.yaml
Homestead.json
LocalValetDriver.php
docker-compose-profiler.yml
# Rocketeer PHP task runner and deployment package. https://github.com/rocketeers/rocketeer
.rocketeer/

View File

@@ -4,8 +4,8 @@ Options -Indexes
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Deny all these files/folders
RedirectMatch 403 ^/.git/.*?$
@@ -20,6 +20,7 @@ RedirectMatch 403 ^/storage/.*?$
RedirectMatch 403 ^/tests/.*?$
RedirectMatch 403 ^/vendor/.*?$
RedirectMatch 403 ^/.bowerrc$
RedirectMatch 403 ^/.env
RedirectMatch 403 ^/artisan$
RedirectMatch 403 ^/composer.json
RedirectMatch 403 ^/composer.lock
@@ -32,12 +33,6 @@ RedirectMatch 403 ^/package.json
RedirectMatch 403 ^/package-lock.json
RedirectMatch 403 ^/phpunit.xml
RedirectMatch 403 ^/webpack.mix.js
RedirectMatch 403 ^/yarn.lock
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
RewriteRule ^(.*)$ public/$1 [L]

37
.php_cs Normal file
View File

@@ -0,0 +1,37 @@
<?php
$finder = PhpCsFixer\Finder::create()
->in('app')
->in('config');
return PhpCsFixer\Config::create()
->setHideProgress(true)
->setUsingCache(false)
->setRiskyAllowed(true)
->setRules([
'@PSR2' => true,
'strict_param' => true,
'no_php4_constructor' => true,
'no_extra_blank_lines' => true,
'no_superfluous_elseif' => true,
'single_line_comment_style' => false,
'simple_to_complex_string_variable' => true,
'array_syntax' => [
'syntax' => 'short',
],
'binary_operator_spaces' => [
'align_double_arrow' => true,
],
/*
'blank_line_before_statement' => [
'statements' => [
'declare',
'for',
'return',
'throw',
'try',
],
],
*/
])
->setFinder($finder);

30
.styleci.yml Normal file
View File

@@ -0,0 +1,30 @@
preset: recommended
risky: true
enabled:
- align_double_arrow_minimal
# - align_equals_minimal
# - date_time_immutable
- ereg_to_preg
- function_to_constant
# - mb_str_functions
- modernize_types_casting
# - native_function_invocation
- no_blank_lines_after_return
- no_homoglyph_names
- no_php4_constructor
- no_useless_else
- phpdoc_add_missing_param_annotation
disabled:
- align_double_arrow
- blank_line_before_return
# - hash_to_slash_comment
- phpdoc_summary
- phpdoc_var_without_name
# - unalign_equals
finder:
exclude:
- node_modules
- storage
- vendor
name: "*.php"
not-name: "*.blade.php"

View File

@@ -1,58 +0,0 @@
language: php
php:
- '7.0'
- '7.1'
#- '7.2'
#- nightly
cache:
directories:
- "$HOME/.composer/cache"
- "$HOME/.npm"
services:
- mysql
#- redis-server
before_script:
- cp .travis/env.travis.php env.php
- composer install --no-interaction --verbose
script:
- php artisan database:create --reset
- php artisan migrate:refresh --seed
- cp .travis/phpunit.travis.xml phpunit.xml
- vendor/bin/phpunit --debug --verbose
after_failure:
- cat storage/logs/*.log
jobs:
include:
- stage: package
script: skip
before_deploy:
- curl -sL https://raw.githubusercontent.com/travis-ci/artifacts/master/install | bash
deploy:
- provider: script
skip_cleanup: true
script: ./.travis/deploy_script.sh
on:
all_branches: true
php: '7.0'
- stage: release
script: skip
before_deploy:
- curl -sL https://raw.githubusercontent.com/travis-ci/artifacts/master/install | bash
- ./.travis/deploy_script.sh
deploy:
provider: releases
skip_cleanup: true
api_key:
secure: kAOYEThsSF8wM7vx+e+xWKhlvsNzhgKn1bk0zLBb7RLUM5pHIGKV/j0KrCNspwIUEPF0O594H6hCyswlpIZfxW2mTnmPqfbKxG/H2rLEAoOV0/MqzeC/gffxm7Eop6Sn4T/UC9kLSgqRynllbYtJDK6aWESdnvK3Fka0Cnpn7l/2phEf2J/nOF6QT/utpws1E0MUGqrKvX1/UYIu8np5e5aYLPOXnqahK8qzJFL4CyNBv+fhXuXfmOF4UbNbSPnrg/kY0QpUtFpz9ebvg5BjfMXJT0P4Q1BjgKBN76A7vz+ZfPmW6SqKv3o1yisXAgBWzylXh8B6pK+cUk4uXbagcGcIdkGOI6pQ5sLq+JOkBhVjSfogERePkt44KPif4EMsLRw/Jp4pTMy/vmgrON/jkbA+jXsOARTG5vAwIq4lyZzZXWUfirYwXeCfasgf+xTdo9C0cOE0jlqojO7SdF2CinDk9BduYpBTectea8Xx+YP5R1JCZNORDYynlLHKMW/8PJyAG+AsbcfKNTobQAfxw1nHa7GoKP1j4MSx1UtbulZdhmeRX/nUTFIvfgEDrl4cdBlt0/o5SuyN92DiCnvJZaYHcgXwYMvoqdXxBCnBKsM/1BZcykWi7Zt/q8krWYCOfCzBN4TDdmrKsEOUkCSOL9mI6gERHGmcGZN05PxU950=
file_glob: true
file: build/*
on:
tags: true
repo: nabeelio/phpvms
php: '7.0'

View File

@@ -1,67 +0,0 @@
#!/usr/bin/env bash
if [ "$TRAVIS" = "true" ]; then
cd $TRAVIS_BUILD_DIR
if test "$TRAVIS_TAG"; then
PKG_NAME=$TRAVIS_TAG
else
echo "On branch $TRAVIS_BRANCH"
if [ "$TRAVIS_BRANCH" != "master" ] && [ "$TRAVIS_BRANCH" != "dev" ]; then
echo "Not on valid branch, exiting"
exit 0;
fi;
BASE_VERSION=`php artisan phpvms:version --base-only`
PKG_NAME=${BASE_VERSION}-${TRAVIS_BRANCH}
fi
FILE_NAME="phpvms-$PKG_NAME"
TAR_NAME="$FILE_NAME.tar.gz"
echo "Writing $TAR_NAME"
php artisan phpvms:version --write > VERSION
VERSION=`cat VERSION`
echo "Version: $VERSION"
echo "Cleaning files"
make clean
rm -rf env.php config.php
find ./vendor -type d -name ".git" -print0 | xargs rm -rf
find . -type d -name "sass-cache" -print0 | xargs rm -rf
# clear any app specific stuff that might have been loaded in
find storage/app/public -mindepth 1 -not -name '.gitignore' -print0 -exec rm -rf {} +
find storage/app -mindepth 1 -not -name '.gitignore' -not -name public -print0 -exec rm -rf {} +
# Remove any development files
rm -rf .sass-cache
rm -rf .idea phpvms.iml .travis .dpl
rm -rf .phpstorm.meta.php _ide_helper.php phpunit.xml Procfile
# remove large sized files
rm -rf .git
rm -rf node_modules
rm -rf composer.phar
# delete files in vendor that are rather large
rm -rf vendor/willdurand/geocoder/tests
echo "creating tarball"
cd /tmp
tar -czf $TAR_NAME -C $TRAVIS_BUILD_DIR/../ phpvms
sha256sum $TAR_NAME > "$TAR_NAME.sha256"
echo "uploading to s3"
mkdir -p $TRAVIS_BUILD_DIR/build
cd $TRAVIS_BUILD_DIR/build
mv "/tmp/$TAR_NAME" "/tmp/$TAR_NAME.sha256" .
artifacts upload --target-paths "/" $TAR_NAME $TRAVIS_BUILD_DIR/VERSION $TAR_NAME.sha256
curl -X POST --data "{\"content\": \"A new build is available at http://downloads.phpvms.net/$TAR_NAME ($VERSION)\"}" -H "Content-Type: application/json" $DISCORD_WEBHOOK_URL
fi

View File

@@ -1,14 +0,0 @@
APP_ENV=prod
APP_KEY=base64:ve66Z5Kt/zTN3p++0zOPu854PHfZkwJE5VuoFAlzHtI=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=phpvms
DB_USERNAME=root
DB_PASSWORD=
CACHE_DRIVER=array

View File

@@ -1,30 +0,0 @@
<?php
exit();
?>
APP_ENV=dev
APP_KEY=base64:zdgcDqu9PM8uGWCtMxd74ZqdGJIrnw812oRMmwDF6KY=
APP_URL=http://localhost
APP_SKIN=default
APP_DEBUG=true
APP_LOCALE=en
PHPVMS_INSTALLED=true
VACENTRAL_API_KEY=
APP_LOG=daily
APP_LOG_LEVEL=debug
APP_LOG_MAX_FILES=3
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=phpvms
DB_USERNAME=root
DB_PASSWORD=
CACHE_DRIVER=file
CACHE_PREFIX=
SESSION_DRIVER=file
QUEUE_DRIVER=database

View File

@@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="bootstrap/autoload.php"
colors="true"
processIsolation="false"
stopOnFailure="true"
convertErrorsToExceptions="false"
convertNoticesToExceptions="false"
convertWarningsToExceptions="false"
beStrictAboutOutputDuringTests="false"
beStrictAboutTestsThatDoNotTestAnything="false">
<testsuites>
<testsuite name="Application Test Suite">
<directory suffix="Test.php">./tests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<php>
<ini name="error_reporting" value="E_ALL"/>
<ini name="display_errors" value="On"/>
<ini name="display_startup_errors" value="On"/>
</php>
</phpunit>

View File

@@ -1,8 +1,706 @@
# Changelog
## [Unreleased]
## [7.0.0-beta.4](https://github.com/nabeelio/phpvms/tree/7.0.0-beta.4) (2020-05-09)
## 7.0.0-alpha1
[Full Changelog](https://github.com/nabeelio/phpvms/compare/7.0.0-beta.3...7.0.0-beta.4)
### Added
- Initial release
**Implemented enhancements:**
- Move currency selection to admin settings [\#671](https://github.com/nabeelio/phpvms/issues/671)
- Center live map to custom location [\#661](https://github.com/nabeelio/phpvms/issues/661)
- Pilot Names - Pilots ID [\#656](https://github.com/nabeelio/phpvms/issues/656)
- Simbrief sample data [\#651](https://github.com/nabeelio/phpvms/issues/651)
- Simbrief only available for bids [\#642](https://github.com/nabeelio/phpvms/issues/642)
- PIREP prefile download [\#634](https://github.com/nabeelio/phpvms/issues/634)
- Importer - group imported aircraft by type [\#628](https://github.com/nabeelio/phpvms/issues/628)
- API: When looking up flight, return the load factor [\#611](https://github.com/nabeelio/phpvms/issues/611)
- API: On prefile, return required fields [\#610](https://github.com/nabeelio/phpvms/issues/610)
- Center on active flights [\#605](https://github.com/nabeelio/phpvms/issues/605)
- Profiling/performance improvments [\#602](https://github.com/nabeelio/phpvms/issues/602)
- Aircraft stats resync [\#585](https://github.com/nabeelio/phpvms/issues/585)
- Cron Job [\#553](https://github.com/nabeelio/phpvms/issues/553)
- Importing a CSV with additional airports clears all previous airports [\#490](https://github.com/nabeelio/phpvms/issues/490)
- Use continuation token instead of page/offset [\#469](https://github.com/nabeelio/phpvms/issues/469)
- Combine the Util classes in Facade and Support [\#467](https://github.com/nabeelio/phpvms/issues/467)
- ACARS/Live flight events [\#436](https://github.com/nabeelio/phpvms/issues/436)
- Allow logo upload for airline [\#417](https://github.com/nabeelio/phpvms/issues/417)
- Google Analytics Settings [\#382](https://github.com/nabeelio/phpvms/issues/382)
- Let update only be run if logged in/admin [\#372](https://github.com/nabeelio/phpvms/issues/372)
- Airport Lookup - possible additions [\#364](https://github.com/nabeelio/phpvms/issues/364)
- Set flight type for expenses for flight [\#348](https://github.com/nabeelio/phpvms/issues/348)
- Extend search schedule options [\#297](https://github.com/nabeelio/phpvms/issues/297)
- Change currency from settings \#671 [\#672](https://github.com/nabeelio/phpvms/pull/672)
- Add privatized version of name \#656 [\#658](https://github.com/nabeelio/phpvms/pull/658)
- Add Simbrief entries as sample data for load \#651 [\#652](https://github.com/nabeelio/phpvms/pull/652)
- Option for SB only on bids; add the new file type \#642 [\#643](https://github.com/nabeelio/phpvms/pull/643)
- Account ICAO for subfleet, airline/location if columns exist \#628 [\#632](https://github.com/nabeelio/phpvms/pull/632)
- Performance improvements \#602 [\#607](https://github.com/nabeelio/phpvms/pull/607)
- Center on active flights \#605 [\#606](https://github.com/nabeelio/phpvms/pull/606)
- Installer fixes, remove bcmath, fix design [\#596](https://github.com/nabeelio/phpvms/pull/596)
- Remove airport length restrictions \#590 [\#592](https://github.com/nabeelio/phpvms/pull/592)
- Remove 4 char restriction from ICAO; use decimal type for lat/lon \#590 [\#591](https://github.com/nabeelio/phpvms/pull/591)
- Recalcuate aircraft stats in nightly cron and importer \#585 \#443 [\#587](https://github.com/nabeelio/phpvms/pull/587)
- \(Importer\) Set the pay rate for the ranks \#443 [\#586](https://github.com/nabeelio/phpvms/pull/586)
- Fix rowmapper generator, check for fields, map users \#443 [\#583](https://github.com/nabeelio/phpvms/pull/583)
- Add bcmath to the required extensions list \#558 [\#564](https://github.com/nabeelio/phpvms/pull/564)
- Add the argc\_argv flag for the cgi exec \#553 [\#556](https://github.com/nabeelio/phpvms/pull/556)
- Add logo to the flights page if its set \#417 [\#550](https://github.com/nabeelio/phpvms/pull/550)
- Add additional events for PIREP states \#436 [\#548](https://github.com/nabeelio/phpvms/pull/548)
- Cleanup Utils \#467 [\#547](https://github.com/nabeelio/phpvms/pull/547)
- Add checkbox to clear previous data when importing \#490 [\#546](https://github.com/nabeelio/phpvms/pull/546)
- Distro zip file from tar file \#449 [\#543](https://github.com/nabeelio/phpvms/pull/543)
- Spanish files translation [\#542](https://github.com/nabeelio/phpvms/pull/542)
- Add link to download ACARS config from profile [\#539](https://github.com/nabeelio/phpvms/pull/539)
- Format all blade templates to 2 spaces \#530 [\#531](https://github.com/nabeelio/phpvms/pull/531)
- Add menu bar for mobile [\#529](https://github.com/nabeelio/phpvms/pull/529)
- Fix live and route map errors \#527 [\#528](https://github.com/nabeelio/phpvms/pull/528)
- Set PIREPs page to public [\#526](https://github.com/nabeelio/phpvms/pull/526)
- Try to clear caches before updating [\#522](https://github.com/nabeelio/phpvms/pull/522)
- Reduce number of queries for update check [\#520](https://github.com/nabeelio/phpvms/pull/520)
- Add getRootDomain\(\) to Utils [\#514](https://github.com/nabeelio/phpvms/pull/514)
- Search flights by subfleet \#484 [\#506](https://github.com/nabeelio/phpvms/pull/506)
- Add base Dockerfile for Dockerhub upload [\#504](https://github.com/nabeelio/phpvms/pull/504)
- Add reference to docs on doc site [\#502](https://github.com/nabeelio/phpvms/pull/502)
- Add new command to export a specific PIREP for debugging [\#501](https://github.com/nabeelio/phpvms/pull/501)
- Flight search for departure/arrival airports not using column names [\#496](https://github.com/nabeelio/phpvms/pull/496)
- Split the importer module out from the installer module [\#468](https://github.com/nabeelio/phpvms/pull/468)
**Fixed bugs:**
- Aircraft hours not counting [\#683](https://github.com/nabeelio/phpvms/issues/683)
- Error creating first user/airline [\#677](https://github.com/nabeelio/phpvms/issues/677)
- submitting PIREP: Page Not Found [\#676](https://github.com/nabeelio/phpvms/issues/676)
- Filing manual report causes SimBrief Error [\#668](https://github.com/nabeelio/phpvms/issues/668)
- Error on finance page in admin [\#667](https://github.com/nabeelio/phpvms/issues/667)
- API: User bids aren't loading SimBrief data for flight [\#664](https://github.com/nabeelio/phpvms/issues/664)
- .: Links to pilot profiles :. [\#655](https://github.com/nabeelio/phpvms/issues/655)
- Some domains \(ex, .co.uk\) not properly parsed [\#647](https://github.com/nabeelio/phpvms/issues/647)
- API: Load bids through the bids.flight fields, not the flights field on the user [\#639](https://github.com/nabeelio/phpvms/issues/639)
- Login page not using theme [\#638](https://github.com/nabeelio/phpvms/issues/638)
- CSV import error says "csv not found" [\#636](https://github.com/nabeelio/phpvms/issues/636)
- Importer - schedules not importing properly [\#630](https://github.com/nabeelio/phpvms/issues/630)
- Disable using of php opcache [\#625](https://github.com/nabeelio/phpvms/issues/625)
- API: Flight fields are an array when empty [\#618](https://github.com/nabeelio/phpvms/issues/618)
- "Pending Pireps" in admin is blank [\#616](https://github.com/nabeelio/phpvms/issues/616)
- Flight fields show all fields, not custom added ones [\#614](https://github.com/nabeelio/phpvms/issues/614)
- Mixed content causes error [\#612](https://github.com/nabeelio/phpvms/issues/612)
- Fares not appearing in API response for user/subfleets [\#608](https://github.com/nabeelio/phpvms/issues/608)
- Not selecting active for aircraft shows nullable error [\#603](https://github.com/nabeelio/phpvms/issues/603)
- Airports page repeats airport name \(infinite loop\) [\#599](https://github.com/nabeelio/phpvms/issues/599)
- Calculate Distance button not working [\#595](https://github.com/nabeelio/phpvms/issues/595)
- Support Seaports with 3 letter IATA/ID codes [\#590](https://github.com/nabeelio/phpvms/issues/590)
- Hubs only show for registration [\#580](https://github.com/nabeelio/phpvms/issues/580)
- Error when updating user in admin [\#576](https://github.com/nabeelio/phpvms/issues/576)
- Updater not working because Source repository \[github\] is not defined [\#575](https://github.com/nabeelio/phpvms/issues/575)
- Flights Page Search Subfleet Column [\#574](https://github.com/nabeelio/phpvms/issues/574)
- Duplicate key entry for ACARS data [\#572](https://github.com/nabeelio/phpvms/issues/572)
- No hint path defined for updater [\#570](https://github.com/nabeelio/phpvms/issues/570)
- My Bids Page Error [\#561](https://github.com/nabeelio/phpvms/issues/561)
- I can't change Current Theme [\#554](https://github.com/nabeelio/phpvms/issues/554)
- Pilots cannot use the dashboard or flights without admin rights [\#480](https://github.com/nabeelio/phpvms/issues/480)
- Database prefix not being applied [\#442](https://github.com/nabeelio/phpvms/issues/442)
- Install not working [\#411](https://github.com/nabeelio/phpvms/issues/411)
- typo in dependency on 'leaflet.geodesic' [\#687](https://github.com/nabeelio/phpvms/pull/687)
- Emails/notifications not sending \#675 [\#686](https://github.com/nabeelio/phpvms/pull/686)
- Aircraft hours not showing/incrementing \#683 [\#684](https://github.com/nabeelio/phpvms/pull/684)
- METAR: KM as unit in visibility \#680 [\#682](https://github.com/nabeelio/phpvms/pull/682)
- Blank/null IATA code isn't unique when added \#679 [\#681](https://github.com/nabeelio/phpvms/pull/681)
- Fix airline creation in installer \#677 [\#678](https://github.com/nabeelio/phpvms/pull/678)
- Journal not created when airline is created \#667 [\#670](https://github.com/nabeelio/phpvms/pull/670)
- Check for SB being avail before filing \#668 [\#669](https://github.com/nabeelio/phpvms/pull/669)
- Load Simbrief and flight data when getting bids \#664 [\#665](https://github.com/nabeelio/phpvms/pull/665)
- Fix pilots page not showing up \#655 [\#660](https://github.com/nabeelio/phpvms/pull/660)
- Fix PirepComment response; 201 to 200 [\#654](https://github.com/nabeelio/phpvms/pull/654)
- Domain detection failing for .co.uk, etc \#647 [\#648](https://github.com/nabeelio/phpvms/pull/648)
- Auth routes not using themes \#638 [\#645](https://github.com/nabeelio/phpvms/pull/645)
- Don't return bids by default, fix user flight column \#639 [\#640](https://github.com/nabeelio/phpvms/pull/640)
- Account for admin role, don't error out on null rows \#632 [\#637](https://github.com/nabeelio/phpvms/pull/637)
- Fix airline mapping for aircraft \#628 [\#633](https://github.com/nabeelio/phpvms/pull/633)
- Increase ID column size; seed ID generator with uniqid\(\) \#630 [\#631](https://github.com/nabeelio/phpvms/pull/631)
- Disable using apc/opcache by default if found \#625 [\#629](https://github.com/nabeelio/phpvms/pull/629)
- Fix saving of fare \#621 [\#624](https://github.com/nabeelio/phpvms/pull/624)
- API: Flight fields are an array when empty \#618 [\#619](https://github.com/nabeelio/phpvms/pull/619)
- Remove the flight fields link from admin \#614 [\#615](https://github.com/nabeelio/phpvms/pull/615)
- HTTP/HTTPS mixed content errors \#612 [\#613](https://github.com/nabeelio/phpvms/pull/613)
- Fare information not included in subfleet response \#608 [\#609](https://github.com/nabeelio/phpvms/pull/609)
- Aircraft status field blank causes error \#603 [\#604](https://github.com/nabeelio/phpvms/pull/604)
- METAR parsing infinite loop bugfix \#599 [\#600](https://github.com/nabeelio/phpvms/pull/600)
- Table prefixes not being added to indexes [\#597](https://github.com/nabeelio/phpvms/pull/597)
- Import expense and ledger entries \#443 [\#588](https://github.com/nabeelio/phpvms/pull/588)
- User country mapping; ignore unused groups \#443 [\#584](https://github.com/nabeelio/phpvms/pull/584)
- Change fuel used to optional \#512 [\#582](https://github.com/nabeelio/phpvms/pull/582)
- Respect home hubs setting for registration \#580 [\#581](https://github.com/nabeelio/phpvms/pull/581)
- Upstream null version; build version tags not being saved properly \#575 [\#578](https://github.com/nabeelio/phpvms/pull/578)
- Fix edit pilot error \(Facade\Utils missing\) \#576 [\#577](https://github.com/nabeelio/phpvms/pull/577)
- Upsert on ACARS positions \#572 [\#573](https://github.com/nabeelio/phpvms/pull/573)
- Fix the namespace path on updater templates \#570 [\#571](https://github.com/nabeelio/phpvms/pull/571)
- Route not found error for Pirep::resource\(\) call \#559 [\#565](https://github.com/nabeelio/phpvms/pull/565)
- Add extra check for $acars being set \#560 [\#563](https://github.com/nabeelio/phpvms/pull/563)
- Missing $subfleet error on bids page \#561 [\#562](https://github.com/nabeelio/phpvms/pull/562)
- Refresh theme cache on settings page load \#554 [\#557](https://github.com/nabeelio/phpvms/pull/557)
- Fix migrations when table prefix is involved \#442 [\#555](https://github.com/nabeelio/phpvms/pull/555)
- Use optional\(\) around the airport fields [\#537](https://github.com/nabeelio/phpvms/pull/537)
- PIREPS resource except for show [\#536](https://github.com/nabeelio/phpvms/pull/536)
- Fix import during flight cron \#532 [\#535](https://github.com/nabeelio/phpvms/pull/535)
- Fix PIREP edit endpoint [\#534](https://github.com/nabeelio/phpvms/pull/534)
- Add a public\_url\(\) helper \#513 [\#519](https://github.com/nabeelio/phpvms/pull/519)
- Correct text for no subfleets \#507 [\#518](https://github.com/nabeelio/phpvms/pull/518)
- Error page not showing when database isn't configured [\#517](https://github.com/nabeelio/phpvms/pull/517)
- Check user permissions on the routes \#508 [\#516](https://github.com/nabeelio/phpvms/pull/516)
- Show admin dropdown for admin-access ability [\#515](https://github.com/nabeelio/phpvms/pull/515)
- New subfleet not being attached to an airline on import \#479 [\#505](https://github.com/nabeelio/phpvms/pull/505)
- Importing not updating existing items \#486 [\#503](https://github.com/nabeelio/phpvms/pull/503)
- Set a default model value for airports on PIREP [\#500](https://github.com/nabeelio/phpvms/pull/500)
- Fix GeoService errors when viewing PIREP \#498 [\#499](https://github.com/nabeelio/phpvms/pull/499)
- Properly set the distance/planned\_distance [\#497](https://github.com/nabeelio/phpvms/pull/497)
- 491 Installation Error [\#495](https://github.com/nabeelio/phpvms/pull/495)
- Return the flight fares if there are no subfleet fares \#488 [\#489](https://github.com/nabeelio/phpvms/pull/489)
- Error if there are no roles when editing a user \#480 [\#483](https://github.com/nabeelio/phpvms/pull/483)
- Allow nullable field and calculate distance if nulled [\#482](https://github.com/nabeelio/phpvms/pull/482)
- Pilots cannot use the dashboard or flights without admin rights [\#481](https://github.com/nabeelio/phpvms/pull/481)
- Fix BindingResolutionError when debug toolbar isn't present [\#465](https://github.com/nabeelio/phpvms/pull/465)
- Fix CSV imports giving Storage class not found \#454 [\#462](https://github.com/nabeelio/phpvms/pull/462)
- Use PhpExecutableFinder\(\) closes \#457 \#458 [\#460](https://github.com/nabeelio/phpvms/pull/460)
- Avoid proc\_open use \#455 [\#456](https://github.com/nabeelio/phpvms/pull/456)
- Stricter checks on ACARS API data [\#451](https://github.com/nabeelio/phpvms/pull/451)
- Remove bootstrap cache [\#448](https://github.com/nabeelio/phpvms/pull/448)
**Closed issues:**
- Dashboard error when METAR visibility in KM [\#680](https://github.com/nabeelio/phpvms/issues/680)
- Error adding multiple airlines without IATA codes [\#679](https://github.com/nabeelio/phpvms/issues/679)
- Pages [\#641](https://github.com/nabeelio/phpvms/issues/641)
- Create a "fare type" for cargo [\#621](https://github.com/nabeelio/phpvms/issues/621)
- Split Sample module out into separate repo [\#593](https://github.com/nabeelio/phpvms/issues/593)
- No way to add files to fleet [\#567](https://github.com/nabeelio/phpvms/issues/567)
- Map Center Coords [\#566](https://github.com/nabeelio/phpvms/issues/566)
- Pilot Profile Page Error [\#560](https://github.com/nabeelio/phpvms/issues/560)
- File New Pirep [\#559](https://github.com/nabeelio/phpvms/issues/559)
- I can't add new flight [\#558](https://github.com/nabeelio/phpvms/issues/558)
- Pilot Pay route modifier [\#487](https://github.com/nabeelio/phpvms/issues/487)
- Auto-update [\#449](https://github.com/nabeelio/phpvms/issues/449)
- Setting to not automatically calculate distances [\#446](https://github.com/nabeelio/phpvms/issues/446)
- Classic importer [\#443](https://github.com/nabeelio/phpvms/issues/443)
- SimBrief integration - pirep prefile [\#405](https://github.com/nabeelio/phpvms/issues/405)
- PIREP rejection doesn't move pilot back to previous airport [\#392](https://github.com/nabeelio/phpvms/issues/392)
- Load Factor for flights [\#352](https://github.com/nabeelio/phpvms/issues/352)
**Merged pull requests:**
- Upgrade packages with security alerts [\#653](https://github.com/nabeelio/phpvms/pull/653)
- Add public/private pages \#641 [\#644](https://github.com/nabeelio/phpvms/pull/644)
- SimBrief integration \#405 [\#635](https://github.com/nabeelio/phpvms/pull/635)
- Add fare type for pax/cargo/mixed flights \#621 [\#623](https://github.com/nabeelio/phpvms/pull/623)
- Add fixed pilot pay for a flight \#487 [\#622](https://github.com/nabeelio/phpvms/pull/622)
- Add load factor and variance to flights \#352 [\#620](https://github.com/nabeelio/phpvms/pull/620)
- Module/plugin installation working \#593 [\#594](https://github.com/nabeelio/phpvms/pull/594)
- Add Google Analytics tracking ID to settings and to main template \#382 [\#551](https://github.com/nabeelio/phpvms/pull/551)
- Set expenses on specific flight types \#348 [\#549](https://github.com/nabeelio/phpvms/pull/549)
- Auto update \#449 [\#545](https://github.com/nabeelio/phpvms/pull/545)
- Auto-update functionality \#449 [\#544](https://github.com/nabeelio/phpvms/pull/544)
- ACARS XML config file download [\#540](https://github.com/nabeelio/phpvms/pull/540)
- Make the fuel used optional [\#512](https://github.com/nabeelio/phpvms/pull/512)
- Add PHP 7.4 support [\#464](https://github.com/nabeelio/phpvms/pull/464)
- Replace importer with AJAX powered; better error handling \#443 [\#447](https://github.com/nabeelio/phpvms/pull/447)
- Fix missing newsRepo variable [\#445](https://github.com/nabeelio/phpvms/pull/445)
- Refactor and add importer to Installer module \#443 [\#444](https://github.com/nabeelio/phpvms/pull/444)
- 391 Notification refactorings [\#441](https://github.com/nabeelio/phpvms/pull/441)
## [7.0.0-beta.3](https://github.com/nabeelio/phpvms/tree/7.0.0-beta.3) (2020-02-08)
[Full Changelog](https://github.com/nabeelio/phpvms/compare/7.0.0-beta.2...7.0.0-beta.3)
**Implemented enhancements:**
- Fix formatting in blade files [\#530](https://github.com/nabeelio/phpvms/issues/530)
- Make PIREP view page public [\#525](https://github.com/nabeelio/phpvms/issues/525)
- Fix map line colors [\#523](https://github.com/nabeelio/phpvms/issues/523)
- Null-able fuel values on PIREP [\#510](https://github.com/nabeelio/phpvms/issues/510)
- include subfleet in search options [\#484](https://github.com/nabeelio/phpvms/issues/484)
- PHP 7.4 in Travis [\#463](https://github.com/nabeelio/phpvms/issues/463)
- Move cron problem report to main page [\#458](https://github.com/nabeelio/phpvms/issues/458)
**Fixed bugs:**
- Method GET for /pireps/\<id\>/edit not supported [\#533](https://github.com/nabeelio/phpvms/issues/533)
- Cron error for removing expired flights [\#532](https://github.com/nabeelio/phpvms/issues/532)
- Live map marker click not working [\#527](https://github.com/nabeelio/phpvms/issues/527)
- Redirect to installer properly [\#513](https://github.com/nabeelio/phpvms/issues/513)
- Admin panel link not shown for users in role group [\#509](https://github.com/nabeelio/phpvms/issues/509)
- Users without "admin" role can modify roles [\#508](https://github.com/nabeelio/phpvms/issues/508)
- Edit flights page - text error [\#507](https://github.com/nabeelio/phpvms/issues/507)
- Installation error with external databases [\#494](https://github.com/nabeelio/phpvms/issues/494)
- Pirep not in KG [\#493](https://github.com/nabeelio/phpvms/issues/493)
- Installation Error step2 [\#491](https://github.com/nabeelio/phpvms/issues/491)
- Fares assigned to flights not working/overwritten by Subfleet [\#488](https://github.com/nabeelio/phpvms/issues/488)
- Status not changing when importing CSV for aircraft [\#486](https://github.com/nabeelio/phpvms/issues/486)
- Default Theme unusable on Mobile [\#485](https://github.com/nabeelio/phpvms/issues/485)
- Fatal Error in subfleet page when importing routes with new aircraft [\#479](https://github.com/nabeelio/phpvms/issues/479)
- Flights CSV import fails if no distance stipulated [\#478](https://github.com/nabeelio/phpvms/issues/478)
- Subfleet CSV import [\#476](https://github.com/nabeelio/phpvms/issues/476)
- Cron - DateTime::construct\(\) expects parameter 2 to be DateTimeZone, int given [\#461](https://github.com/nabeelio/phpvms/issues/461)
- if PHP\_CLI not found in cron maintenance, put generic `php` exec there [\#457](https://github.com/nabeelio/phpvms/issues/457)
- Importing schedule bug [\#454](https://github.com/nabeelio/phpvms/issues/454)
- The updater/installer should clear all caches [\#408](https://github.com/nabeelio/phpvms/issues/408)
**Closed issues:**
- Error 500 when trying to access Dashboard. [\#498](https://github.com/nabeelio/phpvms/issues/498)
- Import multiple aircraft of different subtypes in one sheet [\#477](https://github.com/nabeelio/phpvms/issues/477)
- Split out installer/importer from updater [\#453](https://github.com/nabeelio/phpvms/issues/453)
- ACARS update fields can be nulled [\#450](https://github.com/nabeelio/phpvms/issues/450)
- Retryable HTTP client [\#430](https://github.com/nabeelio/phpvms/issues/430)
- Pireps page: 'Pending' doesn't show pending PIREPs [\#427](https://github.com/nabeelio/phpvms/issues/427)
- Email when news sent out [\#391](https://github.com/nabeelio/phpvms/issues/391)
- Save cron last run time [\#386](https://github.com/nabeelio/phpvms/issues/386)
**Merged pull requests:**
- 7.0.0-beta3 Release [\#541](https://github.com/nabeelio/phpvms/pull/541)
## [7.0.0-beta.2](https://github.com/nabeelio/phpvms/tree/7.0.0-beta.2) (2019-11-19)
[Full Changelog](https://github.com/nabeelio/phpvms/compare/v7.0.0-beta...7.0.0-beta.2)
**Implemented enhancements:**
- CSS Love needed for the Flights Page [\#418](https://github.com/nabeelio/phpvms/issues/418)
- Add Subfleet, Custom Fields and Fares during initial schedule entry [\#410](https://github.com/nabeelio/phpvms/issues/410)
- PIREP from flight/bid; orig: Bid not removed after flight accepted [\#406](https://github.com/nabeelio/phpvms/issues/406)
- Auto airport lookup [\#404](https://github.com/nabeelio/phpvms/issues/404)
- API Changes [\#389](https://github.com/nabeelio/phpvms/issues/389)
- "Maintenance" section in admin [\#376](https://github.com/nabeelio/phpvms/issues/376)
- Auto-calculate Distance on Add Flight page [\#355](https://github.com/nabeelio/phpvms/issues/355)
- Change PIREP fuel field type [\#340](https://github.com/nabeelio/phpvms/issues/340)
- Fuel in pireps [\#295](https://github.com/nabeelio/phpvms/issues/295)
- Add field to set aircraft location [\#277](https://github.com/nabeelio/phpvms/issues/277)
- Suggestion: edit pilot ID [\#265](https://github.com/nabeelio/phpvms/issues/265)
- Combine subfleet and aircraft export [\#233](https://github.com/nabeelio/phpvms/issues/233)
- Allow URL for downloads [\#229](https://github.com/nabeelio/phpvms/issues/229)
- Move settings into database seeder [\#224](https://github.com/nabeelio/phpvms/issues/224)
- Allow specifying transfer hours on registration [\#129](https://github.com/nabeelio/phpvms/issues/129)
- Backend changes separating id from pilot\_id [\#324](https://github.com/nabeelio/phpvms/pull/324)
**Fixed bugs:**
- Flight ID's and Airport ICAO's not clickable on airport page [\#419](https://github.com/nabeelio/phpvms/issues/419)
- Distance lookup needs bcmath extension [\#407](https://github.com/nabeelio/phpvms/issues/407)
- Missing flight level field on frontend [\#401](https://github.com/nabeelio/phpvms/issues/401)
- Set distance to 0 if no value [\#400](https://github.com/nabeelio/phpvms/issues/400)
- Upload livery via admin [\#398](https://github.com/nabeelio/phpvms/issues/398)
- Block deleting airline if there are assets associated with it [\#367](https://github.com/nabeelio/phpvms/issues/367)
- Cron not calculating number of flights [\#357](https://github.com/nabeelio/phpvms/issues/357)
- Error Seeing data of pilot profile [\#351](https://github.com/nabeelio/phpvms/issues/351)
- Fresh install doesn't create rank [\#346](https://github.com/nabeelio/phpvms/issues/346)
- Fuel cost only allows whole numbers for price [\#342](https://github.com/nabeelio/phpvms/issues/342)
- API calls in subfolder going to root domain [\#339](https://github.com/nabeelio/phpvms/issues/339)
- Errors versión 7.0.0 \(compilación 181025-6f7735\) [\#332](https://github.com/nabeelio/phpvms/issues/332)
- Error on Install [\#303](https://github.com/nabeelio/phpvms/issues/303)
- Having a "Error 505" when trying to install PHPVMS [\#302](https://github.com/nabeelio/phpvms/issues/302)
- Error when viewing profile or trying to add flights [\#291](https://github.com/nabeelio/phpvms/issues/291)
- "Hubs as home airport" doesn't work [\#288](https://github.com/nabeelio/phpvms/issues/288)
- Undocumented Extension Required - PHP 7.2 GMP [\#285](https://github.com/nabeelio/phpvms/issues/285)
- ErrorException Trying to get property 'name' of non-object [\#281](https://github.com/nabeelio/phpvms/issues/281)
**Closed issues:**
- Add settings.yaml changes to update available check [\#437](https://github.com/nabeelio/phpvms/issues/437)
- Write current version to DB [\#428](https://github.com/nabeelio/phpvms/issues/428)
- Message for configuring cron [\#424](https://github.com/nabeelio/phpvms/issues/424)
- Opt in for telemetry on install [\#415](https://github.com/nabeelio/phpvms/issues/415)
- Error when saving a PIREP without filling some fields and attempting to edit it [\#414](https://github.com/nabeelio/phpvms/issues/414)
- Update htaccess file [\#412](https://github.com/nabeelio/phpvms/issues/412)
- Allow typing in drop down menus [\#409](https://github.com/nabeelio/phpvms/issues/409)
- Malformed email error on file [\#402](https://github.com/nabeelio/phpvms/issues/402)
- Residual design issues from Bootstrap update [\#397](https://github.com/nabeelio/phpvms/issues/397)
- Don't allow PIREP cancel if not in PENDING phase [\#395](https://github.com/nabeelio/phpvms/issues/395)
- Pageable Criteria [\#390](https://github.com/nabeelio/phpvms/issues/390)
- Update CSS Libraries [\#387](https://github.com/nabeelio/phpvms/issues/387)
- Laravel 6 [\#384](https://github.com/nabeelio/phpvms/issues/384)
- Profile menu dropdown [\#383](https://github.com/nabeelio/phpvms/issues/383)
- Update vaCentral Library [\#380](https://github.com/nabeelio/phpvms/issues/380)
- Implement Laravel 5.7 Notifications [\#378](https://github.com/nabeelio/phpvms/issues/378)
- Generate random cache prefix on install [\#374](https://github.com/nabeelio/phpvms/issues/374)
- Move transaction/journal code out of controller [\#370](https://github.com/nabeelio/phpvms/issues/370)
- Add Contract for Airport information lookup [\#363](https://github.com/nabeelio/phpvms/issues/363)
- RFC7807 - Standardize API error messages [\#361](https://github.com/nabeelio/phpvms/issues/361)
- Imposible delete bid [\#360](https://github.com/nabeelio/phpvms/issues/360)
- Change theme from settings [\#359](https://github.com/nabeelio/phpvms/issues/359)
- Integration with PACX \[Feature\] [\#338](https://github.com/nabeelio/phpvms/issues/338)
- Why don't you create a free ACARS for PHPVMS7 testing? [\#336](https://github.com/nabeelio/phpvms/issues/336)
- Error add Roles [\#334](https://github.com/nabeelio/phpvms/issues/334)
- Error during installation [\#333](https://github.com/nabeelio/phpvms/issues/333)
- spatie - laravel-backup [\#330](https://github.com/nabeelio/phpvms/issues/330)
- Refactor data seeding [\#329](https://github.com/nabeelio/phpvms/issues/329)
- Notify/download latest version file as part of cron [\#327](https://github.com/nabeelio/phpvms/issues/327)
- Notify if migration/updates are pending [\#326](https://github.com/nabeelio/phpvms/issues/326)
- PIREP ID change [\#318](https://github.com/nabeelio/phpvms/issues/318)
- Missing folders on install [\#316](https://github.com/nabeelio/phpvms/issues/316)
- Pull in VMACars plugin [\#315](https://github.com/nabeelio/phpvms/issues/315)
- Account for fuel in the finances [\#313](https://github.com/nabeelio/phpvms/issues/313)
- Show module in the external website [\#310](https://github.com/nabeelio/phpvms/issues/310)
- Profile picture distorted [\#309](https://github.com/nabeelio/phpvms/issues/309)
- Implement cachable in models [\#307](https://github.com/nabeelio/phpvms/issues/307)
- update [\#305](https://github.com/nabeelio/phpvms/issues/305)
- Error with installer - Permission denied [\#298](https://github.com/nabeelio/phpvms/issues/298)
- No Staff Groups/ Authorised Permissions [\#296](https://github.com/nabeelio/phpvms/issues/296)
- .css and .js 404 [\#294](https://github.com/nabeelio/phpvms/issues/294)
- Error on Install [\#292](https://github.com/nabeelio/phpvms/issues/292)
- Ability to change interval of cron jobs [\#289](https://github.com/nabeelio/phpvms/issues/289)
- ACARS api add response [\#287](https://github.com/nabeelio/phpvms/issues/287)
- No bids returned in json [\#286](https://github.com/nabeelio/phpvms/issues/286)
- Importing \*.csv with special characters [\#282](https://github.com/nabeelio/phpvms/issues/282)
- laravel-theme doesn't seem to be respecting the theme.json extends [\#279](https://github.com/nabeelio/phpvms/issues/279)
- Flight for current location not being restricted [\#263](https://github.com/nabeelio/phpvms/issues/263)
- Self diagnosis [\#253](https://github.com/nabeelio/phpvms/issues/253)
- Add /api/pireps/validate endpoint [\#247](https://github.com/nabeelio/phpvms/issues/247)
- Cosmetic issues [\#245](https://github.com/nabeelio/phpvms/issues/245)
- GDPR Compliance [\#244](https://github.com/nabeelio/phpvms/issues/244)
- Read all settings into the page session [\#243](https://github.com/nabeelio/phpvms/issues/243)
- Open Airspace [\#241](https://github.com/nabeelio/phpvms/issues/241)
- Option to cancel PIREP [\#238](https://github.com/nabeelio/phpvms/issues/238)
- Navdata sources [\#231](https://github.com/nabeelio/phpvms/issues/231)
- Refactor export, use streamed response [\#227](https://github.com/nabeelio/phpvms/issues/227)
- Add expense multiplier to subfleet [\#206](https://github.com/nabeelio/phpvms/issues/206)
- Expenses [\#136](https://github.com/nabeelio/phpvms/issues/136)
- Finances [\#130](https://github.com/nabeelio/phpvms/issues/130)
- phpVMS Classic Importer [\#114](https://github.com/nabeelio/phpvms/issues/114)
- Setup cron tasks [\#95](https://github.com/nabeelio/phpvms/issues/95)
- Warning in admin if Installer module is still present [\#77](https://github.com/nabeelio/phpvms/issues/77)
- flight planning [\#60](https://github.com/nabeelio/phpvms/issues/60)
**Merged pull requests:**
- Merge 7.0.0-beta.2 to master [\#440](https://github.com/nabeelio/phpvms/pull/440)
- Refactor the upgrade pending check to see if there are settings/permi… [\#438](https://github.com/nabeelio/phpvms/pull/438)
- Fixes [\#435](https://github.com/nabeelio/phpvms/pull/435)
- \#406 Refactor bids [\#432](https://github.com/nabeelio/phpvms/pull/432)
- fixes for issue \#419 [\#429](https://github.com/nabeelio/phpvms/pull/429)
- Wrap values in travis env [\#426](https://github.com/nabeelio/phpvms/pull/426)
- Show a message about setting up the cron and if there was an error ru… [\#425](https://github.com/nabeelio/phpvms/pull/425)
- 359 Select theme in settings [\#423](https://github.com/nabeelio/phpvms/pull/423)
- Fix blank aircraft field causing error closes \#414 [\#422](https://github.com/nabeelio/phpvms/pull/422)
- Bundle CSS changes [\#421](https://github.com/nabeelio/phpvms/pull/421)
- Some minor CSS fixes as discussed on Discord [\#420](https://github.com/nabeelio/phpvms/pull/420)
- Move telemetry option into settings; checkbox in install refs \#415 [\#416](https://github.com/nabeelio/phpvms/pull/416)
- Issue fixes [\#413](https://github.com/nabeelio/phpvms/pull/413)
- Catch error messages in notifying [\#403](https://github.com/nabeelio/phpvms/pull/403)
- Design and file upload issues [\#399](https://github.com/nabeelio/phpvms/pull/399)
- Don't allow cancels from certain states [\#396](https://github.com/nabeelio/phpvms/pull/396)
- Fix map checkout call [\#394](https://github.com/nabeelio/phpvms/pull/394)
- 389 API Changes [\#393](https://github.com/nabeelio/phpvms/pull/393)
- CSS Libraries and style updates [\#388](https://github.com/nabeelio/phpvms/pull/388)
- 384 Laravel 6 changes [\#385](https://github.com/nabeelio/phpvms/pull/385)
- 380 vacentral library [\#381](https://github.com/nabeelio/phpvms/pull/381)
- Use Notification/Notifiable [\#379](https://github.com/nabeelio/phpvms/pull/379)
- Add maintenance section to admin, clear caches \#376 [\#377](https://github.com/nabeelio/phpvms/pull/377)
- Refactor all JS API calls \#360 [\#375](https://github.com/nabeelio/phpvms/pull/375)
- Set the baseURL for ajax requests [\#373](https://github.com/nabeelio/phpvms/pull/373)
- Move airline transaction code into service layer [\#371](https://github.com/nabeelio/phpvms/pull/371)
- 229 url for downloads [\#369](https://github.com/nabeelio/phpvms/pull/369)
- \#355 Calculate distance button [\#366](https://github.com/nabeelio/phpvms/pull/366)
- Add Contract interface for airport lookup functionality [\#365](https://github.com/nabeelio/phpvms/pull/365)
- Refactor error handling internally to follow RFC7807 [\#362](https://github.com/nabeelio/phpvms/pull/362)
- Additional logging for the stats recalculation [\#358](https://github.com/nabeelio/phpvms/pull/358)
- Add missing expiry time for PIREP API [\#356](https://github.com/nabeelio/phpvms/pull/356)
- Fix/metar reading [\#354](https://github.com/nabeelio/phpvms/pull/354)
- Fix/metar reading [\#353](https://github.com/nabeelio/phpvms/pull/353)
- Add setting to include transfer hours in calculations [\#350](https://github.com/nabeelio/phpvms/pull/350)
- Remove ext-cal from requirements list [\#349](https://github.com/nabeelio/phpvms/pull/349)
- Multiple ticket crash fixes [\#347](https://github.com/nabeelio/phpvms/pull/347)
- Issue/327 versioning [\#345](https://github.com/nabeelio/phpvms/pull/345)
- Update issue templates [\#344](https://github.com/nabeelio/phpvms/pull/344)
- Add step fields to enable decimal points on fields \#342 [\#343](https://github.com/nabeelio/phpvms/pull/343)
- Issue fixes [\#341](https://github.com/nabeelio/phpvms/pull/341)
- Issue/329 refactor seeding [\#337](https://github.com/nabeelio/phpvms/pull/337)
- Fix issue where user stats aren't incremented on PIREP auto accept [\#335](https://github.com/nabeelio/phpvms/pull/335)
- Account for fuel in the finance calculations \#313 [\#331](https://github.com/nabeelio/phpvms/pull/331)
- Middleware to detect is update is pending; move Routes into HTTP [\#328](https://github.com/nabeelio/phpvms/pull/328)
- Change exporter to use utf-8 close \#282 [\#325](https://github.com/nabeelio/phpvms/pull/325)
- Rename Interfaces to Contracts to better match Laravel conventions [\#323](https://github.com/nabeelio/phpvms/pull/323)
- Cleanup SI Unit classes; METAR fixes [\#322](https://github.com/nabeelio/phpvms/pull/322)
- Bump lodash from 4.17.11 to 4.17.13 [\#321](https://github.com/nabeelio/phpvms/pull/321)
- Update composer library versions [\#320](https://github.com/nabeelio/phpvms/pull/320)
- Add missing folders under storage/public \#316 [\#319](https://github.com/nabeelio/phpvms/pull/319)
- Add interface to additional roles/permissions \#296 [\#314](https://github.com/nabeelio/phpvms/pull/314)
- Fix pax count fields; add fuel used field \#295 [\#312](https://github.com/nabeelio/phpvms/pull/312)
- Apply fixes from StyleCI [\#311](https://github.com/nabeelio/phpvms/pull/311)
- Laravel 5.8 Update [\#308](https://github.com/nabeelio/phpvms/pull/308)
- Add more search criteria/dev environment via docker-compose \#297 [\#306](https://github.com/nabeelio/phpvms/pull/306)
- Add gmp to requirements in install \#285 [\#301](https://github.com/nabeelio/phpvms/pull/301)
- Revert "Update issue templates" [\#300](https://github.com/nabeelio/phpvms/pull/300)
- Update issue templates [\#299](https://github.com/nabeelio/phpvms/pull/299)
## [v7.0.0-beta](https://github.com/nabeelio/phpvms/tree/v7.0.0-beta) (2018-10-25)
[Full Changelog](https://github.com/nabeelio/phpvms/compare/v7.0.0-alpha2...v7.0.0-beta)
**Implemented enhancements:**
- Follow flight checkbox on live map [\#246](https://github.com/nabeelio/phpvms/issues/246)
- PIREP restrictions based on settings [\#221](https://github.com/nabeelio/phpvms/issues/221)
- Save PIREP as draft [\#220](https://github.com/nabeelio/phpvms/issues/220)
- Shorten fields on flights table [\#205](https://github.com/nabeelio/phpvms/issues/205)
- Show bids in profile [\#203](https://github.com/nabeelio/phpvms/issues/203)
- Don't change rank if current rank is higher than the one found [\#196](https://github.com/nabeelio/phpvms/issues/196)
- pagination sizes [\#162](https://github.com/nabeelio/phpvms/issues/162)
- Allow overriding templates [\#161](https://github.com/nabeelio/phpvms/issues/161)
- Replace old pjax library with newer one [\#133](https://github.com/nabeelio/phpvms/issues/133)
- Awards [\#113](https://github.com/nabeelio/phpvms/issues/113)
- Setting to restrict airport selection to hubs [\#104](https://github.com/nabeelio/phpvms/issues/104)
- Pilot leave status [\#96](https://github.com/nabeelio/phpvms/issues/96)
- schedule import [\#15](https://github.com/nabeelio/phpvms/issues/15)
**Fixed bugs:**
- Error saving PIREP [\#252](https://github.com/nabeelio/phpvms/issues/252)
- Updater with modules not working [\#249](https://github.com/nabeelio/phpvms/issues/249)
- User registration country and timezone not saving [\#223](https://github.com/nabeelio/phpvms/issues/223)
- Importer inserts invalid data on empty columns/rows [\#222](https://github.com/nabeelio/phpvms/issues/222)
- Import/export - missing fields [\#219](https://github.com/nabeelio/phpvms/issues/219)
- Country flag not showing on user list [\#218](https://github.com/nabeelio/phpvms/issues/218)
- fares/subfleet unique field blocks saving [\#214](https://github.com/nabeelio/phpvms/issues/214)
- module navigation not working \(admin\) [\#201](https://github.com/nabeelio/phpvms/issues/201)
- Bid not removed when pirep if filled [\#200](https://github.com/nabeelio/phpvms/issues/200)
- Not saving Flight Time [\#199](https://github.com/nabeelio/phpvms/issues/199)
**Closed issues:**
- SettingsController/Repo are saving as "on" instead of 1/true [\#272](https://github.com/nabeelio/phpvms/issues/272)
- Auto Accept New Pilot isn't working [\#269](https://github.com/nabeelio/phpvms/issues/269)
- Suggestion: button to copy aircraft [\#267](https://github.com/nabeelio/phpvms/issues/267)
- Combine aircraft and subfleet import/export into one [\#256](https://github.com/nabeelio/phpvms/issues/256)
- cron - recalculate hours [\#254](https://github.com/nabeelio/phpvms/issues/254)
- Install Directory is missing from git repo [\#251](https://github.com/nabeelio/phpvms/issues/251)
- Warning: require\(C:\xampp\Virtual Airline Website\bootstrap/../vendor/autoload.php\): failed to open stream: No such file or directory in C:\xampp\Virtual Airline Website\bootstrap\autoload.php on line 17 [\#248](https://github.com/nabeelio/phpvms/issues/248)
- Settings [\#239](https://github.com/nabeelio/phpvms/issues/239)
- HTTP caching [\#237](https://github.com/nabeelio/phpvms/issues/237)
- Module artisan command bug [\#234](https://github.com/nabeelio/phpvms/issues/234)
- Add /api/news [\#232](https://github.com/nabeelio/phpvms/issues/232)
- Start date/end date, along with day of week options [\#230](https://github.com/nabeelio/phpvms/issues/230)
- Replace weather lookup [\#228](https://github.com/nabeelio/phpvms/issues/228)
- File/avatar uploads [\#226](https://github.com/nabeelio/phpvms/issues/226)
- Change fleet page to load subfleets first [\#217](https://github.com/nabeelio/phpvms/issues/217)
- Add sort options [\#216](https://github.com/nabeelio/phpvms/issues/216)
- Auto loader on Line 17 [\#215](https://github.com/nabeelio/phpvms/issues/215)
- Add flight fields [\#213](https://github.com/nabeelio/phpvms/issues/213)
- Recaptcha in registration [\#212](https://github.com/nabeelio/phpvms/issues/212)
- Browser tests [\#211](https://github.com/nabeelio/phpvms/issues/211)
- Axios HTTP library [\#210](https://github.com/nabeelio/phpvms/issues/210)
- Replace skinning with laravel-theme [\#209](https://github.com/nabeelio/phpvms/issues/209)
- Refactor getting expenses in FinanceData [\#208](https://github.com/nabeelio/phpvms/issues/208)
- Change all money to hold in cents, not dollars [\#204](https://github.com/nabeelio/phpvms/issues/204)
- Pilot pay - rank base and subfleet multiplier [\#197](https://github.com/nabeelio/phpvms/issues/197)
- Flight schedule importer/exporter [\#194](https://github.com/nabeelio/phpvms/issues/194)
- use find/replace in bootstrapWith\(\) call [\#163](https://github.com/nabeelio/phpvms/issues/163)
- Awards [\#155](https://github.com/nabeelio/phpvms/issues/155)
- System Changes/Additions [\#135](https://github.com/nabeelio/phpvms/issues/135)
- Airport & Aircraft Changes [\#134](https://github.com/nabeelio/phpvms/issues/134)
- Handle flight specific fares & multipliers [\#125](https://github.com/nabeelio/phpvms/issues/125)
- Flight set day of week [\#122](https://github.com/nabeelio/phpvms/issues/122)
- Airport page [\#85](https://github.com/nabeelio/phpvms/issues/85)
- Bulk upload charts to airport [\#84](https://github.com/nabeelio/phpvms/issues/84)
- Pull some values from existing .env file [\#79](https://github.com/nabeelio/phpvms/issues/79)
- METAR Information [\#61](https://github.com/nabeelio/phpvms/issues/61)
- flights page [\#57](https://github.com/nabeelio/phpvms/issues/57)
- fuel costs to airports and fuel type on subfleet [\#41](https://github.com/nabeelio/phpvms/issues/41)
- generate aircraft hex code on create [\#33](https://github.com/nabeelio/phpvms/issues/33)
**Merged pull requests:**
- More acceptable translation to opt-in \(es\) [\#284](https://github.com/nabeelio/phpvms/pull/284)
- Fix 404s to requirements/setup in README.md [\#283](https://github.com/nabeelio/phpvms/pull/283)
- Hide expired live flight from live map and remove from DB [\#280](https://github.com/nabeelio/phpvms/pull/280)
- \[WIP\] Laravel 5.7 Update [\#278](https://github.com/nabeelio/phpvms/pull/278)
- Make admin input outline darker [\#276](https://github.com/nabeelio/phpvms/pull/276)
- capture & display pilot transfer hours [\#275](https://github.com/nabeelio/phpvms/pull/275)
- Optimize query with eager loading [\#274](https://github.com/nabeelio/phpvms/pull/274)
- Fix SettingsController saving boolean value as 'on' [\#273](https://github.com/nabeelio/phpvms/pull/273)
- Hide inactive pilot from pilot list page [\#271](https://github.com/nabeelio/phpvms/pull/271)
- Fix flight search restriction [\#270](https://github.com/nabeelio/phpvms/pull/270)
- Apply fixes from StyleCI [\#268](https://github.com/nabeelio/phpvms/pull/268)
- Fix METAR issue [\#264](https://github.com/nabeelio/phpvms/pull/264)
- Apply fixes from StyleCI [\#262](https://github.com/nabeelio/phpvms/pull/262)
- Apply fixes from StyleCI [\#261](https://github.com/nabeelio/phpvms/pull/261)
- Enable eager loading [\#259](https://github.com/nabeelio/phpvms/pull/259)
- Implement cron to remove expired bids [\#258](https://github.com/nabeelio/phpvms/pull/258)
- Fix timezone list HTML Escaped [\#257](https://github.com/nabeelio/phpvms/pull/257)
- Update 07/13/2018 es-translations [\#255](https://github.com/nabeelio/phpvms/pull/255)
- ES translation [\#250](https://github.com/nabeelio/phpvms/pull/250)
- flights filtered per va [\#242](https://github.com/nabeelio/phpvms/pull/242)
- Avatar Issue [\#236](https://github.com/nabeelio/phpvms/pull/236)
- Install bug [\#235](https://github.com/nabeelio/phpvms/pull/235)
## [v7.0.0-alpha2](https://github.com/nabeelio/phpvms/tree/v7.0.0-alpha2) (2018-02-23)
[Full Changelog](https://github.com/nabeelio/phpvms/compare/v7.0.0-alpha1...v7.0.0-alpha2)
**Implemented enhancements:**
- Get user PIREPs [\#192](https://github.com/nabeelio/phpvms/issues/192)
- Use time conversion class [\#190](https://github.com/nabeelio/phpvms/issues/190)
- Require inputs in Imperial units [\#189](https://github.com/nabeelio/phpvms/issues/189)
- Make planned\_distance in prefile optional [\#185](https://github.com/nabeelio/phpvms/issues/185)
- If there's no /pirep/route calls, when it's filed, write the route [\#184](https://github.com/nabeelio/phpvms/issues/184)
- Create a /api/flight/{id}/route call [\#183](https://github.com/nabeelio/phpvms/issues/183)
- Make all APIs behind auth [\#173](https://github.com/nabeelio/phpvms/issues/173)
- Add bid [\#172](https://github.com/nabeelio/phpvms/issues/172)
- Setting for only showing aircraft that are at the departure airport [\#171](https://github.com/nabeelio/phpvms/issues/171)
- Font for input [\#169](https://github.com/nabeelio/phpvms/issues/169)
- Read default value from settings table [\#106](https://github.com/nabeelio/phpvms/issues/106)
**Fixed bugs:**
- Volume units to lbs/kg, not gal/liter [\#193](https://github.com/nabeelio/phpvms/issues/193)
- Add country to airline missing [\#191](https://github.com/nabeelio/phpvms/issues/191)
- SKIN\_NAME missing on error pages [\#187](https://github.com/nabeelio/phpvms/issues/187)
- Airport timezone not being saved [\#182](https://github.com/nabeelio/phpvms/issues/182)
- Rank checkboxes not being saved [\#181](https://github.com/nabeelio/phpvms/issues/181)
- Make sure cancelled PIREPs don't show [\#180](https://github.com/nabeelio/phpvms/issues/180)
- Ignore cancelled PIREPs in duplicate check [\#179](https://github.com/nabeelio/phpvms/issues/179)
- Make sure all fields are returned in PIREP object [\#178](https://github.com/nabeelio/phpvms/issues/178)
- autopopulate SOURCE field in ACARS [\#177](https://github.com/nabeelio/phpvms/issues/177)
- Make sure pireps.restrict\_aircraft\_to\_rank is respected [\#170](https://github.com/nabeelio/phpvms/issues/170)
- Don't change rank if current rank is non-auto promoting [\#168](https://github.com/nabeelio/phpvms/issues/168)
- PIREP hours can't be changed [\#167](https://github.com/nabeelio/phpvms/issues/167)
- Changing a flight status does not save [\#150](https://github.com/nabeelio/phpvms/issues/150)
- Additional PIREP fields don't save correctly [\#146](https://github.com/nabeelio/phpvms/issues/146)
**Closed issues:**
- Cleanup icons [\#195](https://github.com/nabeelio/phpvms/issues/195)
- remove raw\_data field from pirep table [\#188](https://github.com/nabeelio/phpvms/issues/188)
- Remove Resource::withoutWrapping\(\) to follow jsonapi spec [\#186](https://github.com/nabeelio/phpvms/issues/186)
- Add an `artisan phpvms:dev-install` command [\#176](https://github.com/nabeelio/phpvms/issues/176)
- Pagination settings [\#175](https://github.com/nabeelio/phpvms/issues/175)
- Implement setting for flights at pilot's current airport [\#174](https://github.com/nabeelio/phpvms/issues/174)
- Minimum PHP supported version to 7.1 [\#166](https://github.com/nabeelio/phpvms/issues/166)
- Update to Laravel 5.6 [\#165](https://github.com/nabeelio/phpvms/issues/165)
- Updater [\#164](https://github.com/nabeelio/phpvms/issues/164)
- Allow adding rank in subfleet page [\#160](https://github.com/nabeelio/phpvms/issues/160)
- Docs [\#153](https://github.com/nabeelio/phpvms/issues/153)
## [v7.0.0-alpha1](https://github.com/nabeelio/phpvms/tree/v7.0.0-alpha1) (2018-02-04)
[Full Changelog](https://github.com/nabeelio/phpvms/compare/f158c11dea7c0a4af27c93382333b67fdc531e3a...v7.0.0-alpha1)
**Implemented enhancements:**
- Widgetized components [\#127](https://github.com/nabeelio/phpvms/issues/127)
- Set aircraft location on landing [\#112](https://github.com/nabeelio/phpvms/issues/112)
- save user IP on login [\#110](https://github.com/nabeelio/phpvms/issues/110)
- When rejecting PIREP, add a comment/reason [\#107](https://github.com/nabeelio/phpvms/issues/107)
- Check for duplicate PIREPs and add setting [\#105](https://github.com/nabeelio/phpvms/issues/105)
- create vendor.js with webpack [\#91](https://github.com/nabeelio/phpvms/issues/91)
- move from bower to webpack [\#90](https://github.com/nabeelio/phpvms/issues/90)
- Pilots list and profile [\#82](https://github.com/nabeelio/phpvms/issues/82)
- pirep auto-accept for certain rankings [\#24](https://github.com/nabeelio/phpvms/issues/24)
- Investigate removing the Repository pattern to simplify [\#6](https://github.com/nabeelio/phpvms/issues/6)
**Fixed bugs:**
- Error when sending /api/pireps/prefile [\#149](https://github.com/nabeelio/phpvms/issues/149)
- Extra numbers on flights page [\#148](https://github.com/nabeelio/phpvms/issues/148)
- Unable to select any aircraft from fleet on file PIREP page [\#147](https://github.com/nabeelio/phpvms/issues/147)
- Error thrown when editing a saved flight [\#145](https://github.com/nabeelio/phpvms/issues/145)
- When you delete flight from admin, filed pirep will throw error [\#144](https://github.com/nabeelio/phpvms/issues/144)
- Avoid calling MySQL executable for creating database [\#132](https://github.com/nabeelio/phpvms/issues/132)
- Aircraft can be added without specifying a subfleet [\#128](https://github.com/nabeelio/phpvms/issues/128)
- Non error flash messages not showing [\#126](https://github.com/nabeelio/phpvms/issues/126)
- Removing subfleet from flight [\#124](https://github.com/nabeelio/phpvms/issues/124)
- User still has API access if they're not ACTIVE [\#119](https://github.com/nabeelio/phpvms/issues/119)
- Delete bids when flight is deleted [\#103](https://github.com/nabeelio/phpvms/issues/103)
- JSON error messages [\#92](https://github.com/nabeelio/phpvms/issues/92)
- add subfleet to flight broken [\#88](https://github.com/nabeelio/phpvms/issues/88)
- logout functionality not working from frontpage [\#26](https://github.com/nabeelio/phpvms/issues/26)
**Closed issues:**
- `fuel\_used` in pirep/file [\#159](https://github.com/nabeelio/phpvms/issues/159)
- Add additional fields for PIREP and flights [\#158](https://github.com/nabeelio/phpvms/issues/158)
- Stub file [\#157](https://github.com/nabeelio/phpvms/issues/157)
- Add config.php in root on install [\#156](https://github.com/nabeelio/phpvms/issues/156)
- New registrations are auto-accepted and put as active [\#151](https://github.com/nabeelio/phpvms/issues/151)
- new version alert [\#143](https://github.com/nabeelio/phpvms/issues/143)
- Footer copyright text [\#142](https://github.com/nabeelio/phpvms/issues/142)
- Version build number to use string/assigned date [\#141](https://github.com/nabeelio/phpvms/issues/141)
- Handle duplicate flight number [\#139](https://github.com/nabeelio/phpvms/issues/139)
- Restrict shown aircraft to user's rank [\#138](https://github.com/nabeelio/phpvms/issues/138)
- Docs [\#137](https://github.com/nabeelio/phpvms/issues/137)
- Checksum for tarball [\#123](https://github.com/nabeelio/phpvms/issues/123)
- API Items need [\#120](https://github.com/nabeelio/phpvms/issues/120)
- ACARS API [\#118](https://github.com/nabeelio/phpvms/issues/118)
- List of cron jobs required [\#117](https://github.com/nabeelio/phpvms/issues/117)
- Add create/edit fields for columns [\#111](https://github.com/nabeelio/phpvms/issues/111)
- Add PIREP cancel endpoint and cleanup job [\#109](https://github.com/nabeelio/phpvms/issues/109)
- ACARS table should save the route [\#102](https://github.com/nabeelio/phpvms/issues/102)
- /api/fleet and /api/user/fleet [\#101](https://github.com/nabeelio/phpvms/issues/101)
- Assign subfleets to ranks [\#100](https://github.com/nabeelio/phpvms/issues/100)
- show dates/times in proper timezone [\#97](https://github.com/nabeelio/phpvms/issues/97)
- editable fields not working [\#94](https://github.com/nabeelio/phpvms/issues/94)
- Settings page needs to be completed [\#93](https://github.com/nabeelio/phpvms/issues/93)
- Airport page pagination & search [\#87](https://github.com/nabeelio/phpvms/issues/87)
- Mark airport as hub [\#86](https://github.com/nabeelio/phpvms/issues/86)
- Terms and Conditions & COPPA during registration [\#81](https://github.com/nabeelio/phpvms/issues/81)
- Look at alternative to Entrust [\#78](https://github.com/nabeelio/phpvms/issues/78)
- Check if .env file exists in installer [\#76](https://github.com/nabeelio/phpvms/issues/76)
- upload travis artifact to phpvms ftp as "latest.zip" [\#75](https://github.com/nabeelio/phpvms/issues/75)
- Track hours on airframes [\#73](https://github.com/nabeelio/phpvms/issues/73)
- PIREP accept/reject in admin should call PIREP service [\#72](https://github.com/nabeelio/phpvms/issues/72)
- Error with MySQL syntax when creating database. [\#71](https://github.com/nabeelio/phpvms/issues/71)
- pirep comments [\#70](https://github.com/nabeelio/phpvms/issues/70)
- findWithoutFail Method does not exist [\#69](https://github.com/nabeelio/phpvms/issues/69)
- Commit error 403 [\#67](https://github.com/nabeelio/phpvms/issues/67)
- Keep Showing 404.... [\#66](https://github.com/nabeelio/phpvms/issues/66)
- wrap migrate command [\#65](https://github.com/nabeelio/phpvms/issues/65)
- Create 404 page [\#63](https://github.com/nabeelio/phpvms/issues/63)
- link to admin in nav if you have permissions [\#62](https://github.com/nabeelio/phpvms/issues/62)
- Error while creating database [\#56](https://github.com/nabeelio/phpvms/issues/56)
- shared hosting stuff [\#55](https://github.com/nabeelio/phpvms/issues/55)
- gravatar url for profile [\#54](https://github.com/nabeelio/phpvms/issues/54)
- news and notams module [\#52](https://github.com/nabeelio/phpvms/issues/52)
- try atoum vs phpunit [\#51](https://github.com/nabeelio/phpvms/issues/51)
- Cache Airports calls [\#49](https://github.com/nabeelio/phpvms/issues/49)
- add custom fields table for flights [\#48](https://github.com/nabeelio/phpvms/issues/48)
- Events system [\#43](https://github.com/nabeelio/phpvms/issues/43)
- add fuel costs types to the airports table [\#40](https://github.com/nabeelio/phpvms/issues/40)
- adjust "created" date for airline [\#39](https://github.com/nabeelio/phpvms/issues/39)
- add gross\_weight to PIREPs [\#38](https://github.com/nabeelio/phpvms/issues/38)
- subfleet to flight pivot values [\#37](https://github.com/nabeelio/phpvms/issues/37)
- API authentication/middleware [\#36](https://github.com/nabeelio/phpvms/issues/36)
- REST API [\#35](https://github.com/nabeelio/phpvms/issues/35)
- use uuids on a few tables [\#34](https://github.com/nabeelio/phpvms/issues/34)
- subfleet \(ranks, expenses\) [\#32](https://github.com/nabeelio/phpvms/issues/32)
- How to install this? [\#31](https://github.com/nabeelio/phpvms/issues/31)
- experiment with changing PDO mode [\#30](https://github.com/nabeelio/phpvms/issues/30)
- forgot password [\#27](https://github.com/nabeelio/phpvms/issues/27)
- rankings [\#23](https://github.com/nabeelio/phpvms/issues/23)
- module system [\#22](https://github.com/nabeelio/phpvms/issues/22)
- pireps [\#21](https://github.com/nabeelio/phpvms/issues/21)
- admin user management [\#20](https://github.com/nabeelio/phpvms/issues/20)
- modify DatabaseSeeder to look at env [\#19](https://github.com/nabeelio/phpvms/issues/19)
- look at flarum method of install [\#18](https://github.com/nabeelio/phpvms/issues/18)
- navdata ingestion [\#17](https://github.com/nabeelio/phpvms/issues/17)
- settings panel [\#16](https://github.com/nabeelio/phpvms/issues/16)
- routing and scheduling [\#14](https://github.com/nabeelio/phpvms/issues/14)
- airport details page [\#13](https://github.com/nabeelio/phpvms/issues/13)
- currency format config [\#12](https://github.com/nabeelio/phpvms/issues/12)
- aircraft details page [\#11](https://github.com/nabeelio/phpvms/issues/11)
- user dashboard and profile pages [\#10](https://github.com/nabeelio/phpvms/issues/10)
- admin panel work [\#9](https://github.com/nabeelio/phpvms/issues/9)
- theme/skins engine [\#8](https://github.com/nabeelio/phpvms/issues/8)
- Integrate roles and permissions [\#7](https://github.com/nabeelio/phpvms/issues/7)
- rebuild tables [\#5](https://github.com/nabeelio/phpvms/issues/5)
- front-end template [\#4](https://github.com/nabeelio/phpvms/issues/4)
- Laravel 5.4 [\#3](https://github.com/nabeelio/phpvms/issues/3)
- look up role-based permissions [\#2](https://github.com/nabeelio/phpvms/issues/2)
- installer [\#1](https://github.com/nabeelio/phpvms/issues/1)
**Merged pull requests:**
- Fixed a few field entries [\#116](https://github.com/nabeelio/phpvms/pull/116)
- Remove unique email entry [\#115](https://github.com/nabeelio/phpvms/pull/115)
\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*

View File

@@ -1,46 +0,0 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at gm@nabs.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/

28
Dockerfile Normal file
View File

@@ -0,0 +1,28 @@
FROM php:7.4-fpm-alpine
WORKDIR /var/www/
RUN apk add gmp-dev
RUN curl --silent --show-error https://getcomposer.org/installer | php
# Copy any config files in
COPY resources/docker/php/ext-opcache.ini $PHP_INI_DIR/conf.d/
COPY resources/docker/php/www.conf /usr/local/etc/php-fpm.d/www.conf
RUN ln -sf /dev/stderr /var/log/fpm-error.log
RUN docker-php-ext-install \
calendar \
pdo_mysql \
gmp \
opcache && \
docker-php-ext-enable pdo_mysql opcache
COPY . /var/www/
RUN php composer.phar install \
--ignore-platform-reqs \
--no-interaction \
--no-plugins \
--no-scripts \
--prefer-dist
EXPOSE 9000

View File

@@ -1,6 +1,6 @@
BSD 3-Clause License
Copyright (c) 2017, phpvms
Copyright (c) 2017, phpvms - http://www.phpvms.net
All rights reserved.
Redistribution and use in source and binary forms, with or without

View File

@@ -19,7 +19,7 @@ clean:
@php artisan view:clear
@find bootstrap/cache -type f -not -name '.gitignore' -print0 | xargs -0 rm -rf
@find storage/framework/cache/ -mindepth 1 -not -name '.gitignore' -print0 | xargs -0 rm -rf
@find storage/framework/cache/ -mindepth 1 -type f -not -name '.gitignore' -print0 | xargs -0 rm -rf
@find storage/framework/sessions/ -mindepth 1 -type f -not -name '.gitignore' -print0 | xargs -0 rm -rf
@find storage/framework/views/ -mindepth 1 -not -name '.gitignore' -print0 | xargs -0 rm -rf
@@ -29,6 +29,13 @@ clean:
clean-routes:
@php artisan route:clear
.PHONY: clear
clear:
@php artisan cache:clear
@php artisan config:clear
@php artisan route:clear
@php artisan view:clear
.PHONY: build
build:
@php $(COMPOSER) install --no-interaction
@@ -36,8 +43,7 @@ build:
# This is to build all the stylesheets, etc
.PHONY: build-assets
build-assets:
npm update
npm run dev
npm run production
.PHONY: install
install: build
@@ -60,17 +66,25 @@ reset: clean
.PHONY: reload-db
reload-db:
@php artisan database:create --reset
@php artisan migrate:refresh --seed
@php artisan phpvms:import app/Database/seeds/sample.yml
#php artisan phpvms:navdata
@php artisan migrate --seed
@echo "Done!"
@make clean
.PHONY: tests
tests: test
.PHONY: test
test:
#php artisan database:create --reset
vendor/bin/phpunit --debug --verbose
@#php artisan database:create --reset
@vendor/bin/phpunit --verbose
.PHONY: phpcs
phpcs:
@vendor/bin/php-cs-fixer fix --config=.php_cs -v --diff --diff-format=udiff --dry-run
#.PHONY: phpstan
#phpstan:
# vendor/bin/phpstan analyse -c phpstan.neon -v --level 2 app
.PHONY: replay-acars
replay-acars:

View File

@@ -1,5 +1,5 @@
dnsmasq: /usr/local/sbin/dnsmasq --keep-in-foreground
#dnsmasq: /usr/local/sbin/dnsmasq --keep-in-foreground
php-fpm: /usr/local/sbin/php-fpm --nodaemonize
nginx: /usr/local/bin/nginx -g 'daemon off;'
#mysql: /usr/local/bin/mysqld
mysql: docker-compose --file ~/docker/mysql/docker-compose.yml up
#mailhog: /usr/local/bin/mailhog

View File

@@ -1,21 +1,17 @@
# phpvms <sup>7</sup>
# phpVMS <sup>7</sup>
[![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) [![Total Downloads](https://poser.pugx.org/nabeel/phpvms/downloads)](https://packagist.org/packages/nabeel/phpvms) [![Latest Stable Version](https://poser.pugx.org/nabeel/phpvms/v/stable)](https://packagist.org/packages/nabeel/phpvms) [![Latest Unstable Version](https://poser.pugx.org/nabeel/phpvms/v/unstable)](https://packagist.org/packages/nabeel/phpvms) [![License](https://poser.pugx.org/nabeel/phpvms/license)](https://packagist.org/packages/nabeel/phpvms)
[![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)
The next phpvms version built on the laravel framework. work in progress. If you're looking for
the old, phpVMS classic, it's [available here](https://github.com/nabeelio/phpvms_v2).
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.
# installation
## Installation
A full distribution, with all of the composer dependencies, is available at this
[GitHub Releases](https://github.com/nabeelio/phpvms/releases) link.
The latest documentation, with installation instructions is available
[on the phpVMS documentation](http://docs.phpvms.net/) page.
### Requirements
## Requirements
- PHP 7.0+, extensions:
- PHP 7.3+, extensions:
- cURL
- JSON
- mbstring
@@ -25,11 +21,38 @@ The latest documentation, with installation instructions is available
- Database:
- MySQL 5.5+ (or MySQL variant, including MariaDB and Percona)
[View more details on requirements](http://docs.phpvms.net/basics/requirements)
[View more details on requirements](https://docs.phpvms.net/requirements)
## Installer
### Installer
1. Upload to your server
2. Visit the site, and follow the link to the installer
1. Visit the site, and follow the link to the installer
[View installation details](http://docs.phpvms.net/basics/installation)
[View installation details](https://docs.phpvms.net/installation/installation)
## Development Environment
A full development environment can be brought up using Docker:
```bash
composer install
npm install
docker-compose build
docker-compose up
```
Then go to `http://localhost`. If you're using dnsmasq, the `app` container is listening on `phpvms.test`, or you can add to your `/etc/hosts` file:
```
127.0.0.1 phpvms.test
```
### Building JS/CSS assets
Yarn is required, run:
```bash
make build-assets
```
This will build all of the assets according to the webpack file.

View File

@@ -2,36 +2,25 @@
namespace App\Bootstrap;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\Config\Repository as RepositoryContract;
use Illuminate\Contracts\Foundation\Application;
/**
* Class LoadConfiguration
* @package App\Bootstrap
*
* I'm overriding this to take advantage of the configuration caching
* and not needing to read the files from disk every time.
*
* Hopefully it won't affect anything within core framework but this
* should be ok. Will just have to be cognizant of any changes to the
* LoadConfiguration parent class, or if the Kernel changes the boot
* order -NS
*/
class LoadConfiguration extends \Illuminate\Foundation\Bootstrap\LoadConfiguration
{
/**
* Load the configuration items from all of the files.
* Load the configuration items from all of the files. This reads the config.php from
* that's sitting in the root, and then recursively merges it with the current configs
*
* @param \Illuminate\Contracts\Foundation\Application $app
* @param \Illuminate\Contracts\Config\Repository $repository
*
* @param \Illuminate\Contracts\Foundation\Application $app
* @param \Illuminate\Contracts\Config\Repository $repository
* @return void
* @throws \Exception
*/
protected function loadConfigurationFiles(Application $app, RepositoryContract $repository)
{
parent::loadConfigurationFiles($app, $repository);
/**
/*
* Read in the base config, only if it exists
*/
if (file_exists($app->basePath().'/config.php')) {

View File

@@ -1,65 +0,0 @@
<?php
namespace App\Console;
use Illuminate\Console\Command;
use Symfony\Component\Process\Process;
class BaseCommand extends Command
{
/**
* Streaming file read
* @param $filename
* @return \Generator
*/
public function readFile($filename)
{
$fp = fopen($filename, 'rb');
while (($line = fgets($fp)) !== false) {
$line = rtrim($line, "\r\n");
if ($line[0] === ';') {
continue;
}
yield $line;
}
fclose($fp);
}
/**
* @param $cmd
* @param bool $return
* @return string
*/
public function runCommand($cmd, $return=false, $verbose=true)
{
if (\is_array($cmd)) {
$cmd = join(' ', $cmd);
}
if($verbose) {
$this->info('Running "' . $cmd . '"');
}
$val = '';
$process = new Process($cmd);
$process->run(function ($type, $buffer) use ($return, $val) {
if ($return) {
$val .= $buffer;
} else {
echo $buffer;
}
/*if (Process::ERR === $type) {
echo $buffer;
} else {
echo $buffer;
}*/
});
return $val;
}
}

View File

@@ -2,25 +2,26 @@
namespace App\Console\Commands;
use Illuminate\Database\Eloquent\Collection;
use App\Contracts\Command;
use App\Support\Units\Time;
use GuzzleHttp\Client;
use Illuminate\Database\Eloquent\Collection;
use App\Console\BaseCommand;
use App\Facades\Utils;
class AcarsReplay extends BaseCommand
class AcarsReplay extends Command
{
protected $signature = 'phpvms:replay {files} {--manual} {--write-all} {--no-submit}';
protected $description = 'Replay an ACARS file';
/**
* API Key to post as
*
* @var string
*/
protected $apiKey = 'testadminapikey';
/**
* For automatic updates, how many seconds to sleep between updates
*
* @var int
*/
protected $sleepTime = 10;
@@ -36,7 +37,6 @@ class AcarsReplay extends BaseCommand
*/
protected $httpClient;
/**
* Return an instance of an HTTP client all ready to post
*/
@@ -46,148 +46,159 @@ class AcarsReplay extends BaseCommand
$this->httpClient = new Client([
'base_uri' => config('app.url'),
'headers' => [
'headers' => [
'Authorization' => $this->apiKey,
]
],
]);
}
/*protected function getArguments()
{
return [
['--files', InputOption::VALUE_OPTIONAL]
];
}*/
/**
* Make a request to start a PIREP
*
* @param \stdClass $flight
*
* @throws \RuntimeException
*
* @return string
*/
protected function startPirep($flight): string
{
# convert the planned flight time to be completely in minutes
$pft = Utils::hoursToMinutes($flight->planned_hrsenroute,
$flight->planned_minenroute);
// convert the planned flight time to be completely in minutes
$pft = Time::hoursToMinutes(
$flight->planned_hrsenroute,
$flight->planned_minenroute
);
$flight_number = substr($flight->callsign, 3);
$response = $this->httpClient->post('/api/pireps/prefile', [
'json' => [
'airline_id' => 1,
'flight_number' => $flight_number,
'aircraft_id' => 1,
'dpt_airport_id' => $flight->planned_depairport,
'arr_airport_id' => $flight->planned_destairport,
'level' => $flight->planned_altitude,
'planned_flight_time' => $pft,
'route' => $flight->planned_route,
]
'airline_id' => 1,
'flight_number' => $flight_number,
'aircraft_id' => 1,
'dpt_airport_id' => $flight->planned_depairport,
'arr_airport_id' => $flight->planned_destairport,
'level' => $flight->planned_altitude,
'planned_flight_time' => $pft,
'route' => $flight->planned_route,
],
]);
$body = \json_decode($response->getBody()->getContents());
return $body->id;
}
/**
* Mark the PIREP as filed
*
* @param $pirep_id
*
* @throws \RuntimeException
*
* @return mixed
*/
protected function filePirep($pirep_id)
{
$response = $this->httpClient->post('/api/pireps/'.$pirep_id.'/file', [
'json'=> []
'json' => [],
]);
$body = \json_decode($response->getBody()->getContents());
return $body;
}
/**
* @param $pirep_id
* @param $data
*
* @throws \RuntimeException
*
* @return array
*/
protected function postUpdate($pirep_id, $data)
{
$uri = '/api/pireps/' . $pirep_id . '/acars/position';
$uri = '/api/pireps/'.$pirep_id.'/acars/position';
$position = [
'log' => '',
'lat' => $data->latitude,
'lon' => $data->longitude,
'heading' => $data->heading,
'altitude' => $data->altitude,
'gs' => $data->groundspeed,
'log' => '',
'lat' => $data->latitude,
'lon' => $data->longitude,
'heading' => $data->heading,
'altitude' => $data->altitude,
'gs' => $data->groundspeed,
'transponder' => $data->transponder,
];
$upd = [
'positions' => [
$position
]
$position,
],
];
$this->info("Update: $data->callsign, $position[lat] x $position[lon] \t\t"
. "hdg: $position[heading]\t\talt: $position[altitude]\t\tgs: $position[gs]");
."hdg: $position[heading]\t\talt: $position[altitude]\t\tgs: $position[gs]");
$response = $this->httpClient->post($uri, [
'json' => $upd
'json' => $upd,
]);
$body = \json_decode($response->getBody()->getContents());
return [
$data->callsign,
$position['lat'],
$position['lon'],
$position['heading'],
$position['altitude'],
$position['gs']
$position['gs'],
];
}
/**
* Parse this file and run the updates
*
* @param array $files
*
* @throws \RuntimeException
*/
protected function updatesFromFile(array $files)
{
/**
* @var $flights Collection
*/
$flights = collect($files)->transform(function ($f)
{
$file = storage_path('/replay/' . $f . '.json');
$flights = collect($files)->transform(function ($f) {
$file = $f;
if (file_exists($file)) {
$this->info('Loading ' . $file);
$this->info('Loading '.$file);
$contents = file_get_contents($file);
$contents = \json_decode($contents);
return collect($contents->updates);
} else {
$this->error($file . ' not found, skipping');
return false;
}
$this->error($file.' not found, skipping');
return false;
})
# remove any of errored file entries
// remove any of errored file entries
->filter(function ($value, $key) {
return $value !== false;
});
$this->info('Starting playback');
/**
/*
* File the initial pirep to get a "preflight" status
*/
$flights->each(function ($updates, $idx)
{
$flights->each(function ($updates, $idx) {
$update = $updates->first();
$pirep_id = $this->startPirep($update);
$this->pirepList[$update->callsign] = $pirep_id;
$this->info('Prefiled ' . $update->callsign . ', ID: ' . $pirep_id);
$this->info('Prefiled '.$update->callsign.', ID: '.$pirep_id);
});
/**
/*
* Iterate through all of the flights, retrieving the updates
* from each individual flight. Remove the update. Continue through
* until there are no updates left, at which point we remove the flight
@@ -202,15 +213,15 @@ class AcarsReplay extends BaseCommand
$this->postUpdate($pirep_id, $update);
# we're done and don't put the "no-submit" option
if($updates->count() === 0 && !$this->option('no-submit')) {
// we're done and don't put the "no-submit" option
if ($updates->count() === 0 && !$this->option('no-submit')) {
$this->filePirep($pirep_id);
}
})->filter(function ($updates, $idx) {
return $updates->count() > 0;
});
if(!$this->option('write-all')) {
if (!$this->option('write-all')) {
if (!$this->option('manual')) {
sleep($this->sleepTime);
} else {
@@ -223,9 +234,11 @@ class AcarsReplay extends BaseCommand
/**
* Execute the console command.
*
* @throws \RuntimeException
*
* @return mixed
*/
public function handle()
public function handle(): void
{
$files = $this->argument('files');
$manual_mode = $this->option('manual');
@@ -233,6 +246,7 @@ class AcarsReplay extends BaseCommand
if ($this->option('write-all')) {
$this->info('In "dump-all" mode, just writing it all in');
} else {
/* @noinspection NestedPositiveIfStatementsInspection */
if (!$manual_mode) {
$this->info('Going to send updates every 10s');
} else {

View File

@@ -0,0 +1,41 @@
<?php
namespace App\Console\Commands;
use App\Contracts\Command;
use Nwidart\Modules\Facades\Module;
class ClearCaches extends Command
{
protected $signature = 'phpvms:caches';
protected $description = 'Clear all caches';
/**
* {@inheritdoc}
*/
public function handle()
{
self::clearCaches();
}
public static function clearCaches()
{
self::clearBootstrapCache();
self::clearModuleCache();
}
/**
* Clear the bootstrap/cache dir
*/
private static function clearBootstrapCache()
{
}
/**
* Rescan for new modules
*/
private static function clearModuleCache()
{
Module::scan();
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace App\Console\Commands;
use App\Contracts\Command;
use Illuminate\Support\Facades\Artisan;
class ComposerCommand extends Command
{
protected $signature = 'phpvms:composer {cmd}';
protected $description = 'Composer related tasks';
/**
* Run composer update related commands
*/
public function handle()
{
switch (trim($this->argument('cmd'))) {
case 'post-update':
$this->postUpdate();
break;
default:
$this->error('Command exists');
}
}
/**
* Any composer post update tasks
*/
protected function postUpdate(): void
{
if (config('app.env') === 'dev') {
/* @noinspection NestedPositiveIfStatementsInspection */
if (class_exists(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class)) {
Artisan::call('ide-helper:generate');
Artisan::call('ide-helper:meta');
}
}
}
}

View File

@@ -0,0 +1,95 @@
<?php
namespace App\Console\Commands;
use App;
use App\Contracts\Command;
use App\Services\Installer\SeederService;
use DatabaseSeeder;
use Modules\Installer\Services\ConfigService;
/**
* Create the config files
*/
class CreateConfigs extends Command
{
protected $signature = 'phpvms:config {db_host} {db_name} {db_user} {db_pass}';
protected $description = 'Create the config files';
private $databaseSeeder;
private $seederSvc;
public function __construct(DatabaseSeeder $databaseSeeder, SeederService $seederSvc)
{
parent::__construct();
$this->databaseSeeder = $databaseSeeder;
$this->seederSvc = $seederSvc;
}
/**
* Run dev related commands
*
* @throws \Symfony\Component\HttpFoundation\File\Exception\FileException
*/
public function handle()
{
$this->writeConfigs();
// Reload the configuration
App::boot();
$this->info('Recreating database');
$this->call('database:create', [
'--reset' => true,
]);
$this->info('Running migrations');
$this->call('migrate:fresh', [
'--seed' => true,
]);
$this->seederSvc->syncAllSeeds();
$this->info('Done!');
}
/**
* Rewrite the configuration files
*
* @throws \Symfony\Component\HttpFoundation\File\Exception\FileException
*/
protected function writeConfigs()
{
/** @var ConfigService $cfgSvc */
$cfgSvc = app(ConfigService::class);
$this->info('Removing the old config files');
// Remove the old files
$config_file = base_path('config.php');
if (file_exists($config_file)) {
unlink($config_file);
}
$env_file = base_path('env.php');
if (file_exists($env_file)) {
unlink($env_file);
}
//{name} {db_host} {db_name} {db_user} {db_pass}
$this->info('Regenerating the config files');
$cfgSvc->createConfigFiles([
'APP_ENV' => 'dev',
'SITE_NAME' => $this->argument('name'),
'DB_CONN' => 'mysql',
'DB_HOST' => $this->argument('db_host'),
'DB_NAME' => $this->argument('db_name'),
'DB_USER' => $this->argument('db_user'),
'DB_PASS' => $this->argument('db_pass'),
]);
$this->info('Config files generated!');
}
}

View File

@@ -2,49 +2,56 @@
namespace App\Console\Commands;
use Log;
use App\Console\Services\Database;
use App\Contracts\Command;
use Illuminate\Support\Facades\Log;
use Tivie\OS\Detector;
use App\Console\BaseCommand;
class CreateDatabase extends BaseCommand
class CreateDatabase extends Command
{
protected $signature = 'database:create {--reset} {--conn=?}';
protected $signature = 'database:create {--reset} {--migrate} {--conn=?}';
protected $description = 'Create a database';
protected $os;
/**
* CreateDatabase constructor.
*/
public function __construct()
{
parent::__construct();
$this->os = new \Tivie\OS\Detector();
$this->os = new Detector();
}
/**
* Create the mysql database
*
* @param $dbkey
*
* @return bool
*/
protected function create_mysql($dbkey)
{
$host = config($dbkey . 'host');
$port = config($dbkey . 'port');
$name = config($dbkey . 'database');
$user = config($dbkey . 'username');
$pass = config($dbkey . 'password');
$dbSvc = new \App\Console\Services\Database();
$host = config($dbkey.'host');
$port = config($dbkey.'port');
$name = config($dbkey.'database');
$user = config($dbkey.'username');
$pass = config($dbkey.'password');
$dbSvc = new Database();
$dsn = $dbSvc->createDsn($host, $port);
Log::info('Connection string: ' . $dsn);
Log::info('Connection string: '.$dsn);
try {
$conn = $dbSvc->createPDO($dsn, $user, $pass);
} catch (\PDOException $e) {
Log::error($e);
return false;
}
if ($this->option('reset') === true) {
$sql = "DROP DATABASE IF EXISTS `$name`";
try {
Log::info('Dropping database: '.$sql);
$conn->exec($sql);
@@ -60,31 +67,41 @@ class CreateDatabase extends BaseCommand
$conn->exec($sql);
} catch (\PDOException $e) {
Log::error($e);
return false;
}
}
/**
* Create the sqlite database
*
* @param $dbkey
*/
protected function create_sqlite($dbkey)
{
$dbPath = config($dbkey.'database');
// Skip if running in memory
if ($dbPath === ':memory:') {
return;
}
$exec = 'sqlite3';
if ($this->os->isWindowsLike()) {
$exec = 'sqlite3.exe';
}
if ($this->option('reset') === true) {
$cmd = ['rm', '-rf', config($dbkey . 'database')];
$this->runCommand($cmd);
if (file_exists($dbPath)) {
unlink(config($dbkey.'database'));
}
}
if (!file_exists(config($dbkey . 'database'))) {
if (!file_exists($dbPath)) {
$cmd = [
$exec,
config($dbkey . 'database'),
'""',
$dbPath,
'".exit"',
];
$this->runCommand($cmd);
@@ -109,21 +126,17 @@ class CreateDatabase extends BaseCommand
}
}*/
$this->info('Using connection "' . config('database.default') . '"');
$this->info('Using connection "'.config('database.default').'"');
$conn = config('database.default');
$dbkey = 'database.connections.' . $conn . '.';
$dbkey = 'database.connections.'.$conn.'.';
if (config($dbkey . 'driver') === 'mysql') {
if (config($dbkey.'driver') === 'mysql') {
$this->create_mysql($dbkey);
}
elseif (config($dbkey . 'driver') === 'sqlite') {
} elseif (config($dbkey.'driver') === 'sqlite') {
$this->create_sqlite($dbkey);
}
// TODO: Eventually
elseif (config($dbkey . 'driver') === 'postgres') {
} // TODO: Eventually
elseif (config($dbkey.'driver') === 'postgres') {
$this->create_postgres($dbkey);
}
}

View File

@@ -2,20 +2,41 @@
namespace App\Console\Commands;
use DB;
use PDO;
use App\Models\Airline;
use App\Models\User;
use App\Console\BaseCommand;
use App\Contracts\Command;
use App\Models\Acars;
use App\Models\Airline;
use App\Models\Pirep;
use App\Models\User;
use App\Notifications\Messages\UserRegistered;
use App\Repositories\AcarsRepository;
use App\Services\AirportService;
use App\Services\AwardService;
use App\Services\DatabaseService;
use App\Services\UserService;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use PDO;
use Symfony\Component\Yaml\Yaml;
class DevCommands extends BaseCommand
class DevCommands extends Command
{
protected $signature = 'phpvms {cmd}';
protected $signature = 'phpvms {cmd} {param?}';
protected $description = 'Developer commands';
protected $dbSvc;
/**
* DevCommands constructor.
*
* @param DatabaseService $dbSvc
*/
public function __construct(DatabaseService $dbSvc)
{
parent::__construct();
$this->dbSvc = $dbSvc;
}
/**
* Run dev related commands
@@ -30,13 +51,21 @@ class DevCommands extends BaseCommand
}
$commands = [
'clear-acars' => 'clearAcars',
'clear-users' => 'clearUsers',
'compile-assets' => 'compileAssets',
'db-attrs' => 'dbAttrs',
'clear-acars' => 'clearAcars',
'clear-users' => 'clearUsers',
'compile-assets' => 'compileAssets',
'db-attrs' => 'dbAttrs',
'list-awards' => 'listAwardClasses',
'live-flights' => 'liveFlights',
'manual-insert' => 'manualInsert',
'metar' => 'getMetar',
'recalculate-stats' => 'recalculateStats',
'reset-install' => 'resetInstall',
'new-user-email' => 'newUserEmail',
'xml-to-yaml' => 'xmlToYaml',
];
if(!array_key_exists($command, $commands)) {
if (!array_key_exists($command, $commands)) {
$this->error('Command not found!');
exit();
}
@@ -44,12 +73,29 @@ class DevCommands extends BaseCommand
$this->{$commands[$command]}();
}
/**
* List all award classes
*/
protected function listAwardClasses()
{
$awardSvc = app(AwardService::class);
$awards = $awardSvc->findAllAwardClasses();
$headers = ['Award Name', 'Class'];
$formatted_awards = [];
foreach ($awards as $award) {
$formatted_awards[] = [$award->name, \get_class($award)];
}
$this->table($headers, $formatted_awards);
}
/**
* Delete all the data from the ACARS and PIREP tables
*/
protected function clearAcars()
{
if(config('database.default') === 'mysql') {
if (config('database.default') === 'mysql') {
DB::statement('SET foreign_key_checks=0');
}
@@ -103,9 +149,164 @@ class DevCommands extends BaseCommand
$server_version = $pdo->getAttribute(PDO::ATTR_SERVER_VERSION);
$emulate_prepares = version_compare($server_version, $emulate_prepares_below_version, '<');
$this->info('Server Version: '. $server_version);
$this->info('Server Version: '.$server_version);
$this->info('Emulate Prepares: '.$emulate_prepares);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, $emulate_prepares);
}
/**
* Convert the sequelpro xml export to yaml
*/
protected function xmlToYaml()
{
$file = $this->argument('param');
$this->info('Reading '.$file);
$xml_str = file_get_contents($file);
$xml = new \SimpleXMLElement($xml_str);
$yaml = [];
$table_name = (string) $xml->database->table_data['name'];
$this->info('Writing table "'.$table_name.'"');
$count = 0;
$yaml[$table_name] = [];
foreach ($xml->database->table_data->row as $row) {
$yaml_row = [];
foreach ($row->field as $field) {
$fname = (string) $field['name'];
$fvalue = (string) $field;
$yaml_row[$fname] = $fvalue;
}
$yaml[$table_name][] = $yaml_row;
$count++;
}
$this->info('Exporting '.$count.' rows');
$file_name = $table_name.'.yml';
file_put_contents(storage_path($file_name), Yaml::dump($yaml, 4, 2));
$this->info('Writing yaml to storage: '.$file_name);
}
protected function getMetar(): void
{
$icao = $this->argument('param');
if (!$icao) {
$this->error('Enter an ICAO!');
exit();
}
$airportSvc = app(AirportService::class);
$metar = $airportSvc->getMetar($icao);
$this->info($metar->raw);
}
/**
* Insert the rows from the file, manually advancing each row
*/
protected function manualInsert(): void
{
$file = $this->argument('param');
$this->info('Reading '.$file);
if (!file_exists($file)) {
$this->error('File '.$file.' doesn\'t exist');
exit;
}
$yml = Yaml::parse(file_get_contents($file));
foreach ($yml as $table => $rows) {
$this->info('Importing table '.$table);
$this->info('Number of rows: '.\count($rows));
foreach ($rows as $row) {
try {
$this->dbSvc->insert_row($table, $row);
} catch (\Exception $e) {
$this->error($e);
}
$this->confirm('Insert next row?', true);
}
}
}
/**
* Recalculate the stats for all users
*/
protected function recalculateStats(): void
{
$userSvc = app(UserService::class);
$userSvc->recalculateAllUserStats();
}
/**
* Delete all of the tables, etc from the database, for a clean install
*/
protected function resetInstall(): void
{
$confirm = $this->ask('This will erase your entire install and database, are you sure? y/n ');
if (strtolower($confirm) !== 'y') {
exit(0);
}
try {
if (config('database.default') === 'mysql') {
DB::statement('SET foreign_key_checks=0');
}
$this->info('Dropping all tables');
$tables = DB::connection()->getDoctrineSchemaManager()->listTableNames();
foreach ($tables as $table) {
Schema::dropIfExists($table);
}
} catch (QueryException $e) {
$this->error('DB error: '.$e->getMessage());
}
$this->info('Deleting config file');
try {
unlink('config.php');
} catch (\Exception $e) {
}
$this->info('Deleting env file');
try {
unlink('env.php');
} catch (\Exception $e) {
}
$this->info('Clearing caches');
Artisan::call('cache:clear');
Artisan::call('route:clear');
Artisan::call('config:clear');
Artisan::call('view:clear');
$this->info('Done!');
}
/**
* Test sending a user a registered email
*/
protected function newUserEmail()
{
$user_id = $this->argument('param');
$user = User::find($user_id);
$user->notify(new UserRegistered($user));
}
public function liveFlights(): void
{
$acarsRepo = app(AcarsRepository::class);
$flights = $acarsRepo->getPositions(setting('acars.live_time'))->toArray();
dd($flights);
}
}

View File

@@ -0,0 +1,89 @@
<?php
namespace App\Console\Commands;
use App\Contracts\Command;
use App\Services\Installer\ConfigService;
/**
* Create a fresh development install
*/
class DevInstall extends Command
{
protected $signature = 'phpvms:dev-install {--reset-db} {--reset-configs}';
protected $description = 'Run a developer install and run the sample migration';
private $databaseSeeder;
public function __construct(\DatabaseSeeder $databaseSeeder)
{
parent::__construct();
$this->databaseSeeder = $databaseSeeder;
}
/**
* Run dev related commands
*
* @throws \Symfony\Component\HttpFoundation\File\Exception\FileException
*/
public function handle()
{
if ($this->option('reset-configs')) {
$this->rewriteConfigs();
}
// Reload the configuration
\App::boot();
$this->info('Recreating database');
$this->call('database:create', [
'--reset' => true,
]);
$this->info('Running migrations');
$this->call('migrate:fresh', [
'--seed' => true,
]);
$this->info('Done!');
}
/**
* Rewrite the configuration files
*
* @throws \Symfony\Component\HttpFoundation\File\Exception\FileException
*/
protected function rewriteConfigs()
{
$cfgSvc = app(ConfigService::class);
$this->info('Removing the old config files');
// Remove the old files
$config_file = base_path('config.php');
if (file_exists($config_file)) {
unlink($config_file);
}
$env_file = base_path('env.php');
if (file_exists($env_file)) {
unlink($env_file);
}
$this->info('Removing the sqlite db');
$db_file = storage_path('db.sqlite');
if (file_exists($db_file)) {
unlink($db_file);
}
$this->info('Regenerating the config files');
$cfgSvc->createConfigFiles([
'APP_ENV' => 'dev',
'SITE_NAME' => 'phpvms test',
'DB_CONN' => 'sqlite',
]);
$this->info('Config files generated!');
}
}

View File

@@ -0,0 +1,55 @@
<?php
namespace App\Console\Commands;
use App\Contracts\Command;
use App\Services\ImportService;
class ImportCsv extends Command
{
protected $signature = 'phpvms:csv-import {type} {file}';
protected $description = 'Import from a CSV file';
private $importer;
/**
* Import constructor.
*
* @param ImportService $importer
*/
public function __construct(ImportService $importer)
{
parent::__construct();
$this->importer = $importer;
}
/**
* @throws \Illuminate\Validation\ValidationException
*
* @return mixed|void
*/
public function handle()
{
$type = $this->argument('type');
$file = $this->argument('file');
if (\in_array($type, ['flight', 'flights'], true)) {
$status = $this->importer->importFlights($file);
} elseif ($type === 'aircraft') {
$status = $this->importer->importAircraft($file);
} elseif (\in_array($type, ['airport', 'airports'], true)) {
$status = $this->importer->importAirports($file);
} elseif ($type === 'subfleet') {
$status = $this->importer->importSubfleets($file);
}
foreach ($status['success'] as $line) {
$this->info($line);
}
foreach ($status['errors'] as $line) {
$this->error($line);
}
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace App\Console\Commands;
use App\Contracts\Command;
use App\Services\ImporterService;
use Illuminate\Support\Facades\Log;
class ImportFromClassicCommand extends Command
{
protected $signature = 'phpvms:importer {db_host} {db_name} {db_user} {db_pass?} {table_prefix=phpvms_}';
protected $description = 'Import from an older version of phpVMS';
/**
* Run dev related commands
*/
public function handle()
{
$creds = [
'host' => $this->argument('db_host'),
'name' => $this->argument('db_name'),
'user' => $this->argument('db_user'),
'pass' => $this->argument('db_pass'),
'table_prefix' => $this->argument('table_prefix'),
];
$importerSvc = new ImporterService();
$importerSvc->saveCredentials($creds);
$manifest = $importerSvc->generateImportManifest();
foreach ($manifest as $record) {
try {
$importerSvc->run($record['importer'], $record['start']);
} catch (\Exception $e) {
Log::error($e->getMessage());
}
}
}
}

View File

@@ -1,29 +0,0 @@
<?php
namespace App\Console\Commands;
use DB;
use App\Console\BaseCommand;
class Importer extends BaseCommand
{
protected $signature = 'phpvms:importer {db_host} {db_name} {db_user} {db_pass?} {table_prefix=phpvms_}';
protected $description = 'Import from an older version of phpVMS';
/**
* Run dev related commands
*/
public function handle()
{
$db_creds = [
'host' => $this->argument('db_host'),
'name' => $this->argument('db_name'),
'user' => $this->argument('db_user'),
'pass' => $this->argument('db_pass'),
'table_prefix' => $this->argument('table_prefix')
];
$importerSvc = new \App\Console\Services\Importer($db_creds);
$importerSvc->run();
}
}

View File

@@ -1,77 +0,0 @@
<?php
namespace App\Console\Commands;
use App\Console\BaseCommand;
class Install extends BaseCommand
{
protected $signature = 'phpvms:install
{--update}
{--airline-name?}
{--airline-code?}';
protected $description = 'Install or update phpVMS';
public function __construct()
{
parent::__construct();
}
public function handle()
{
$this->info('Installing phpVMS...');
$this->setupDatabase();
# Only run these if we're doing an initial install
if(!$this->option('update')) {
$this->writeLocalConfig();
$this->initialData();
}
}
/**
* Setup the database and run the migrations
* Only call the database creation if we're not
* explicitly trying to upgrade
*/
protected function setupDatabase()
{
if(!$this->option('update')) {
$this->call('database:create');
}
$this->info('Running database migrations...');
$this->call('migrate');
# TODO: Call initial seed data, for the groups and other supporting data
}
/**
* Write a local config file
*/
protected function writeLocalConfig()
{
}
/**
* Set an initial airline and admin user/password
*/
protected function initialData()
{
# TODO: Prompt for initial airline info
$airline_name = $this->option('airline-name');
if(!$airline_name) {
$airline_name = $this->ask('Enter your airline name');
}
$airline_code = $this->option('airline-code');
if(!$airline_code) {
$airline_code = $this->ask('Enter your airline code');
}
# TODO: Prompt for admin user/password
}
}

View File

@@ -2,21 +2,38 @@
namespace App\Console\Commands;
use App\Console\BaseCommand;
use App\Models\Navdata;
use App\Contracts\Command;
use App\Models\Enums\NavaidType;
use App\Models\Navdata;
class NavdataCommand extends BaseCommand
class NavdataImport extends Command
{
protected $signature = 'phpvms:navdata';
protected $description = '';
/**
* Read and parse in the navaid file
* @throws \League\Geotools\Exception\InvalidArgumentException
*
* @return void
*/
public function read_wp_nav_aid()
public function handle()
{
$this->info('Emptying the current navdata...');
Navdata::query()->truncate();
$this->info('Looking for nav files...');
$this->read_wp_nav_aid();
$this->read_wp_nav_fix();
}
/**
* Read and parse in the navaid file
*
* @throws \League\Geotools\Exception\InvalidArgumentException
*
* @return void
*/
public function read_wp_nav_aid(): void
{
/*
* ....,....1....,....2....,....3....,....4....,....5....,....6..
@@ -50,7 +67,7 @@ class NavdataCommand extends BaseCommand
$file_path = storage_path('/navdata/WPNAVAID.txt');
if (!file_exists($file_path)) {
$this->error('WPNAVAID.txt not found in storage/navdata');
return false;
return;
}
$this->info('Importing navaids (WPNAVAID.txt) ...');
@@ -58,10 +75,9 @@ class NavdataCommand extends BaseCommand
$imported = 0;
foreach($generator as $line) {
foreach ($generator as $line) {
$navaid = [
'id' => trim(substr($line, 24, 4)), // ident column
'id' => trim(substr($line, 24, 4)), // ident column
'name' => trim(substr($line, 0, 24)),
'type' => trim(substr($line, 29, 4)),
'lat' => trim(substr($line, 33, 9)),
@@ -70,9 +86,8 @@ class NavdataCommand extends BaseCommand
'class' => trim($line[60]),
];
# Map to the Navaid enum
switch($navaid['type'])
{
// Map to the Navaid enum
switch ($navaid['type']) {
case 'ILS':
$navaid['type'] = NavaidType::LOC;
break;
@@ -101,22 +116,22 @@ class NavdataCommand extends BaseCommand
}*/
Navdata::updateOrCreate([
'id' => $navaid['id'], 'name' => $navaid['name']
'id' => $navaid['id'], 'name' => $navaid['name'],
], $navaid);
$imported++;
if($imported % 100 === 0) {
$this->info('Imported ' . $imported . ' entries...');
if ($imported % 100 === 0) {
$this->info('Imported '.$imported.' entries...');
}
}
$this->info('Imported a total of ' . $imported . ' nav aids');
$this->info('Imported a total of '.$imported.' nav aids');
}
/**
*
* @return void
*/
public function read_wp_nav_fix()
public function read_wp_nav_fix(): void
{
/*
* ....,....1....,....2....,...3....,....4....,....
@@ -138,9 +153,9 @@ class NavdataCommand extends BaseCommand
*/
$file_path = storage_path('/navdata/WPNAVFIX.txt');
if(!file_exists($file_path)) {
if (!file_exists($file_path)) {
$this->error('WPNAVFIX.txt not found in storage/navdata');
return false;
return;
}
$this->info('Importing navaids (WPNAVFIX.txt) ...');
@@ -149,37 +164,23 @@ class NavdataCommand extends BaseCommand
$imported = 0;
foreach ($generator as $line) {
$navfix = [
'id' => trim(substr($line, 0, 4)), // ident column
'id' => trim(substr($line, 0, 4)), // ident column
'name' => trim(substr($line, 24, 6)),
'type' => NavaidType::FIX,
'lat' => trim(substr($line, 30, 10)),
'lon' => trim(substr($line, 40, 11)),
'lat' => trim(substr($line, 30, 10)),
'lon' => trim(substr($line, 40, 11)),
];
switch ($navfix['type']) {
default:
$navfix['type'] = NavaidType::UNKNOWN;
break;
}
Navdata::updateOrCreate(['id' => $navfix['id']], $navfix);
Navdata::updateOrCreate([
'id' => $navfix['id'], 'name' => $navfix['name'],
], $navfix);
$imported++;
if ($imported % 100 === 0) {
$this->info('Imported ' . $imported . ' entries...');
$this->info('Imported '.$imported.' entries...');
}
}
$this->info('Imported a total of ' . $imported . ' nav fixes');
}
public function handle()
{
$this->info('Emptying the current navdata...');
Navdata::query()->truncate();
$this->info('Looking for nav files...');
$this->read_wp_nav_aid();
$this->read_wp_nav_fix();
$this->info('Imported a total of '.$imported.' nav fixes');
}
}

View File

@@ -0,0 +1,52 @@
<?php
namespace App\Console\Commands;
use App\Contracts\Command;
use Illuminate\Support\Facades\DB;
use Symfony\Component\Yaml\Yaml;
class PirepExport extends Command
{
protected $signature = 'phpvms:pirep-export {id}';
protected $description = 'PIREP table export';
/**
* Run dev related commands
*/
public function handle()
{
$pirep_id = $this->argument('id');
if (empty($pirep_id)) {
$this->error('No PIREP ID specified');
exit();
}
// List the tables to export and the column name for the pirep id
$tables = [
'pireps' => 'id',
'acars' => 'pirep_id',
'pirep_comments' => 'pirep_id',
'pirep_fares' => 'pirep_id',
'pirep_field_values' => 'pirep_id',
'expenses' => 'ref_model_id',
'journal_transactions' => 'ref_model_id',
];
$export_tables = [];
foreach ($tables as $table => $key) {
$export_tables[$table] = [];
$rows = DB::table($table)
->where($key, '=', $pirep_id)
->get();
foreach ($rows as $row) {
$export_tables[$table][] = (array) $row;
}
}
$yaml = Yaml::dump($export_tables, 4, 2);
echo $yaml;
}
}

View File

@@ -2,13 +2,12 @@
namespace App\Console\Commands;
use App\Contracts\Command;
use GuzzleHttp\Client;
use App\Console\BaseCommand;
class TestApi extends BaseCommand
class TestApi extends Command
{
protected $signature = 'phpvms:test-api {apikey} {url}';
protected $httpClient;
/**
@@ -17,11 +16,11 @@ class TestApi extends BaseCommand
public function handle()
{
$this->httpClient = new Client([
'headers' => [
'Authorization' => $this->argument('apikey'),
'Content-type' => 'application/json',
'X-API-Key' => $this->argument('apikey'),
]
'headers' => [
'Authorization' => $this->argument('apikey'),
'Content-type' => 'application/json',
'X-API-Key' => $this->argument('apikey'),
],
]);
$result = $this->httpClient->get($this->argument('url'));

View File

@@ -2,56 +2,64 @@
namespace App\Console\Commands;
use App\Console\BaseCommand;
use App\Contracts\Command;
use App\Services\VersionService;
use Symfony\Component\Yaml\Yaml;
class Version extends BaseCommand
class Version extends Command
{
protected $signature = 'phpvms:version {--write} {--base-only}';
protected $signature = 'phpvms:version {--write} {--base-only} {--write-full-version} {version?}';
/**
* Create the version number that gets written out
*/
protected function createVersionNumber($cfg)
private $versionSvc;
public function __construct(VersionService $versionSvc)
{
exec($cfg['git']['git-local'], $version);
$version = substr($version[0], 0, $cfg['build']['length']);
parent::__construct();
# prefix with the date in YYMMDD format
$date = date('ymd');
$version = $date.'-'.$version;
return $version;
$this->versionSvc = $versionSvc;
}
/**
* Run dev related commands
*
* @throws \Symfony\Component\Yaml\Exception\ParseException
*/
public function handle()
{
$version_file = config_path('version.yml');
$cfg = Yaml::parse(file_get_contents($version_file));
if ($this->option('write')) {
// Write the updated build number out to the file
$version_file = config_path('version.yml');
$cfg = Yaml::parse(file_get_contents($version_file));
// If a version is being passed in, the update the build, etc data against this
if ($this->argument('version')) {
$version = \SemVer\SemVer\Version::fromString($this->argument('version'));
if ($this->option('write-full-version')) {
$cfg['current']['major'] = $version->getMajor();
$cfg['current']['minor'] = $version->getMinor();
$cfg['current']['patch'] = $version->getPatch();
}
$prerelease = $version->getPreRelease();
if (strpos($prerelease, '.') !== false) {
$prerelease = explode('.', $prerelease);
$cfg['current']['prerelease'] = $prerelease[0];
$cfg['current']['buildmetadata'] = $prerelease[1];
} else {
$cfg['current']['prerelease'] = $prerelease;
}
}
// Always write out the build ID/build number which is the commit hash
$build_number = $this->versionSvc->generateBuildId($cfg);
$cfg['current']['commit'] = $build_number;
$cfg['build']['number'] = $build_number;
if($this->option('write')) {
$version = $this->createVersionNumber($cfg);
$cfg['build']['number'] = $version;
file_put_contents($version_file, Yaml::dump($cfg, 4, 2));
}
# Only show the major.minor.patch version
if($this->option('base-only')) {
$version = 'v'.$cfg['current']['major'] . '.'
.$cfg['current']['minor'] . '.'
.$cfg['current']['patch'];
print $version;
} else {
$this->call('version:show', [
'--format' => 'compact',
'--suppress-app-name' => true
]);
}
$incl_build = empty($this->option('base-only')) ? true : false;
$version = $this->versionSvc->getCurrentVersion($incl_build);
echo $version."\n";
}
}

View File

@@ -0,0 +1,55 @@
<?php
namespace App\Console\Commands;
use App\Contracts\Command;
use Illuminate\Support\Facades\DB;
use Symfony\Component\Yaml\Yaml;
/**
* Class YamlExport
*/
class YamlExport extends Command
{
protected $signature = 'phpvms:yaml-export {tables*}';
protected $description = 'YAML table export';
/**
* Run dev related commands
*/
public function handle()
{
$tables = $this->argument('tables');
if (empty($tables)) {
$this->error('No tables specified');
exit();
}
// A "preset" for exporting the base set of data
if ($tables[0] === 'base') {
$tables = [
'airlines',
'aircraft',
'subfleets',
'subfleet_fare',
'subfleet_rank',
'bids',
'fares',
'flights',
];
}
$export_tables = [];
foreach ($tables as $table) {
$export_tables[$table] = [];
$rows = DB::table($table)->get();
foreach ($rows as $row) {
$export_tables[$table][] = (array) $row;
}
}
$yaml = Yaml::dump($export_tables, 4, 2);
echo $yaml;
}
}

View File

@@ -2,50 +2,55 @@
namespace App\Console\Commands;
use DB;
use App\Console\BaseCommand;
use App\Contracts\Command;
use App\Services\DatabaseService;
class ImportCommand extends BaseCommand
/**
* Class YamlImport
*/
class YamlImport extends Command
{
protected $signature = 'phpvms:import {files*}';
protected $signature = 'phpvms:yaml-import {files*}';
protected $description = 'Developer commands';
protected $dbSvc;
/**
* YamlImport constructor.
*
* @param DatabaseService $dbSvc
*/
public function __construct(DatabaseService $dbSvc)
{
parent::__construct();
$this->dbSvc = $dbSvc;
}
/**
* Run dev related commands
*
* @throws \Exception
*/
public function handle()
{
$files = $this->argument('files');
if(empty($files)) {
if (empty($files)) {
$this->error('No files to import specified!');
exit();
}
$ignore_errors = true;
/*$ignore_errors = $this->option('ignore_errors');
if(!$ignore_errors) {
$ignore_errors = false;
}*/
foreach($files as $file) {
if(!file_exists($file)) {
$this->error('File ' . $file .' doesn\'t exist');
foreach ($files as $file) {
if (!file_exists($file)) {
$this->error('File '.$file.' doesn\'t exist');
exit;
}
$this->info('Importing ' . $file);
$this->info('Importing '.$file);
$imported = $this->dbSvc->seed_from_yaml_file($file, $ignore_errors);
foreach($imported as $table => $count) {
foreach ($imported as $table => $count) {
$this->info('Imported '.$count.' records from "'.$table.'"');
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Console\Cron;
use App\Contracts\Command;
use App\Events\CronHourly;
/**
* This just calls the CronHourly event, so all of the
* listeners, etc can just be called to run those tasks
*/
class Hourly extends Command
{
protected $signature = 'cron:hourly';
protected $description = 'Run the hourly cron tasks';
protected $schedule;
public function handle(): void
{
$this->redirectLoggingToFile('cron');
event(new CronHourly());
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Console\Cron;
use App\Contracts\Command;
use App\Events\CronMonthly;
/**
* This just calls the CronMonthly event, so all of the
* listeners, etc can just be called to run those tasks
*
* The actual cron tasks are in app/Cron
*/
class Monthly extends Command
{
protected $signature = 'cron:monthly';
protected $description = 'Run the monthly cron tasks';
protected $schedule;
public function handle(): void
{
$this->redirectLoggingToFile('cron');
event(new CronMonthly());
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Console\Cron;
use App\Contracts\Command;
use App\Events\CronNightly;
/**
* This just calls the CronNightly event, so all of the
* listeners, etc can just be called to run those tasks
*
* The actual cron tasks are in app/Cron
*/
class Nightly extends Command
{
protected $signature = 'cron:nightly';
protected $description = 'Run the nightly cron tasks';
protected $schedule;
public function handle(): void
{
$this->redirectLoggingToFile('cron');
event(new CronNightly());
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Console\Cron;
use App\Contracts\Command;
use App\Events\CronWeekly;
/**
* This just calls the CronWeekly event, so all of the
* listeners, etc can just be called to run those tasks.
*
* The actual cron tasks are in app/Cron
*/
class Weekly extends Command
{
protected $signature = 'cron:weekly';
protected $description = 'Run the weekly cron tasks';
protected $schedule;
public function handle(): void
{
$this->redirectLoggingToFile('cron');
event(new CronWeekly());
}
}

View File

@@ -2,37 +2,44 @@
namespace App\Console;
use App\Console\Cron\Hourly;
use App\Console\Cron\Monthly;
use App\Console\Cron\Nightly;
use App\Console\Cron\Weekly;
use App\Services\CronService;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
* Define the application's command schedule. How this works... according to the command
* time, an event gets send out with the appropriate time (e.g, hourly sends an hourly event)
*
* @var array
*/
protected $commands = [
Commands\AcarsReplay::class,
Commands\CreateDatabase::class,
Commands\DevCommands::class,
Commands\ImportCommand::class,
Commands\Importer::class,
Commands\Install::class,
Commands\NavdataCommand::class,
Commands\TestApi::class,
];
/**
* Define the application's command schedule.
* Then the CronServiceProvider has the list of cronjobs which then run according to the events
* and then calls those at the proper times.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
protected function schedule(Schedule $schedule): void
{
// $schedule->command('inspire')
// ->hourly();
$schedule->command(Nightly::class)->dailyAt('01:00');
$schedule->command(Weekly::class)->weeklyOn(0);
$schedule->command(Monthly::class)->monthlyOn(1);
$schedule->command(Hourly::class)->hourly();
// When spatie-backups runs
/*if (config('backup.backup.enabled', false) === true) {
$schedule->command('backup:clean')->daily()->at('01:00');
$schedule->command('backup:run')->daily()->at('02:00');
}*/
// Update the last time the cron was run
/** @var CronService $cronSvc */
$cronSvc = app(CronService::class);
$cronSvc->updateLastRunTime();
}
/**
@@ -40,9 +47,9 @@ class Kernel extends ConsoleKernel
*
* @return void
*/
protected function commands()
protected function commands(): void
{
require app_path('Routes/console.php');
$this->load(__DIR__ . '/Commands');
$this->load(__DIR__.'/Commands');
$this->load(__DIR__.'/Cron');
}
}

23
app/Console/Logger.php Normal file
View File

@@ -0,0 +1,23 @@
<?php
namespace App\Console;
use Monolog\Handler\StreamHandler;
/**
* Just a simple custom logger that dumps to the console
*/
class Logger
{
public function __invoke(array $config)
{
$logger = new \Monolog\Logger('console');
try {
$logger->pushHandler(new StreamHandler('php://stdout'));
} catch (\Exception $e) {
}
return $logger;
}
}

View File

@@ -3,26 +3,26 @@
namespace App\Console\Services;
use PDO;
use Doctrine\DBAL\Driver\PDOException;
/**
* Class Database
* @package App\Console\Services
*/
class Database
{
/**
* Create the base connection DSN, optionally include the DB name
* @param $host
* @param $port
*
* @param $host
* @param $port
* @param null $name
*
* @return string
*/
public function createDsn($host, $port, $name=null)
public function createDsn($host, $port, $name = null)
{
$conn = config('database.default');
$dsn = "$conn:host=$host;port=$port";
if(filled($name)) {
if (filled($name)) {
$dsn .= ';dbname='.$name;
}
@@ -33,8 +33,10 @@ class Database
* @param $dsn
* @param $user
* @param $pass
* @return PDO
*
* @throws \PDOException
*
* @return PDO
*/
public function createPDO($dsn, $user, $pass)
{

View File

@@ -1,689 +0,0 @@
<?php
namespace App\Console\Services;
use PDO;
use Carbon\Carbon;
use Doctrine\DBAL\Driver\PDOException;
use Illuminate\Support\Str;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\Hash;
use Symfony\Component\Console\Output\ConsoleOutput;
use App\Models\Enums\FlightType;
use App\Models\Enums\PirepSource;
use App\Models\Pirep;
use App\Models\Aircraft;
use App\Models\Airline;
use App\Models\Airport;
use App\Models\Flight;
use App\Models\Rank;
use App\Models\Subfleet;
use App\Models\User;
use App\Models\Enums\UserState;
use App\Facades\Utils;
/**
* Class Importer
* TODO: Batch import
* @package App\Console\Services
*/
class Importer
{
/**
* Hold references
*/
private $mappedEntities = [];
/**
* Hold the PDO connection to the old database
* @var
*/
private $conn;
/**
* @var array
*/
private $creds = [];
/**
* Hold the instance of the console logger
* @var
*/
private $log;
/**
* CONSTANTS
*/
const BATCH_READ_ROWS = 300;
const SUBFLEET_NAME = 'Imported Aircraft';
/**
* Importer constructor.
* @param $db_creds
*/
public function __construct($db_creds)
{
// Setup the logger
$this->log = new ConsoleOutput();
# The db credentials
$this->creds = array_merge([
'host' => '127.0.0.1',
'port' => 3306,
'name' => '',
'user' => '',
'pass' => '',
'table_prefix' => 'phpvms_'
], $db_creds);
}
/**
* @return int|void
*/
public function run()
{
$this->reconnect();
# Import all the different parts
$this->importRanks();
$this->importAirlines();
$this->importAircraft();
$this->importAirports();
$this->importUsers();
$this->importFlights();
$this->importPireps();
# Finish up
$this->findLastPireps();
$this->recalculateRanks();
}
/**
* Reconnect to the old phpVMS DB using PDO
*/
protected function reconnect()
{
$dsn = 'mysql:' . implode(';', [
'host=' . $this->creds['host'],
'port=' . $this->creds['port'],
'dbname=' . $this->creds['name']
]);
$this->info('Connection string: ' . $dsn);
try {
$this->conn = new PDO($dsn, $this->creds['user'], $this->creds['pass']);
$this->conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch (\PDOException $e) {
$this->error($e);
exit();
}
}
/**
* @param $message
*/
protected function comment($message)
{
$this->log->writeln('<comment>' . $message . '</comment>');
}
/**
* @param $message
*/
protected function error($message) {
$this->log->writeln('<error>' . $message . '</error>');
}
/**
* @param string $message
*/
protected function info($message)
{
if(\is_array($message)) {
print_r($message);
}
else {
$this->log->writeln('<info>'.$message.'</info>');
}
}
/**
* Return the table name with the prefix
* @param $table
* @return string
*/
protected function tableName($table)
{
if($this->creds['table_prefix'] !== false) {
return $this->creds['table_prefix'].$table;
}
return $table;
}
/**
*
* @param \Illuminate\Database\Eloquent\Model $model
* @return bool
*/
protected function saveModel($model)
{
try {
$model->save();
return true;
} catch (QueryException $e) {
if($e->getCode() !== '23000') {
$this->error($e);
}
return false;
}
}
/**
* Create a new mapping between an old ID and the new one
* @param $entity
* @param $old_id
* @param $new_id
*/
protected function addMapping($entity, $old_id, $new_id)
{
if(!array_key_exists($entity, $this->mappedEntities)) {
$this->mappedEntities[$entity] = [];
}
$this->mappedEntities[$entity][$old_id] = $new_id;
}
/**
* Return the ID for a mapping
* @param $entity
* @param $old_id
* @return bool
*/
protected function getMapping($entity, $old_id)
{
if(!array_key_exists($entity, $this->mappedEntities)) {
return 0;
}
$entity = $this->mappedEntities[$entity];
if(array_key_exists($old_id, $entity)) {
return $entity[$old_id];
}
return 0;
}
/**
* @param $date
* @return Carbon
*/
protected function parseDate($date)
{
$carbon = Carbon::parse($date);
return $carbon;
}
/**
* Take a decimal duration and convert it to minutes
* @param $duration
* @return float|int
*/
protected function convertDuration($duration)
{
if(strpos($duration, '.') !== false) {
$delim = '.';
} elseif(strpos($duration, ':')) {
$delim = ':';
} else {
# no delimiter, assume it's just a straight hour
return (int) $duration * 60;
}
$hm = explode($delim, $duration);
$hours = (int) $hm[0] * 60;
$mins = (int) $hm[1];
return $hours + $mins;
}
/**
* @param $table
* @return mixed
*/
protected function getTotalRows($table)
{
$table = $this->tableName($table);
$sql = 'SELECT COUNT(*) FROM ' . $table;
$rows = $this->conn->query($sql)->fetchColumn();
$this->info('Found '.$rows.' rows in '.$table);
return (int) $rows;
}
/**
* Read all the rows in a table, but read them in a batched manner
* @param string $table The name of the table
* @param null $read_rows Number of rows to read
* @return \Generator
*/
protected function readRows($table, $read_rows=null)
{
// Set the table prefix if it has been entered
$this->tableName($table);
$offset = 0;
if($read_rows === null) {
$read_rows = self::BATCH_READ_ROWS;
}
$total_rows = $this->getTotalRows($table);
while($offset < $total_rows)
{
$rows_to_read = $offset + $read_rows;
if($rows_to_read > $total_rows) {
$rows_to_read = $total_rows;
}
$this->info('Reading '.$offset.' to '.$rows_to_read.' of '.$total_rows);
$sql = 'SELECT * FROM ' . $this->tableName($table)
. ' LIMIT ' . self::BATCH_READ_ROWS . ' OFFSET ' . $offset;
try {
foreach ($this->conn->query($sql) as $row) {
yield $row;
}
} catch(PDOException $e) {
// Without incrementing the offset, it should re-run the same query
$this->error($e);
if(strpos($e->getMessage(), 'server has gone away') !== false) {
$this->reconnect();
continue;
}
}
$offset += self::BATCH_READ_ROWS;
}
}
/**
* Return the subfleet
* @return mixed
*/
protected function getSubfleet()
{
$airline = Airline::first();
$subfleet = Subfleet::firstOrCreate(
['airline_id' => $airline->id, 'name' => self::SUBFLEET_NAME],
['type' => 'PHPVMS']
);
return $subfleet;
}
/**
*
* All the individual importers, done on a per-table basis
* Some tables get saved locally for tables that use FK refs
*
*/
/**
* Import all of the ranks
*/
protected function importRanks()
{
$this->comment('--- RANK IMPORT ---');
$count = 0;
foreach ($this->readRows('ranks') as $row)
{
$rank = Rank::firstOrCreate(
['name' => $row->rank],
['image_link' => $row->rankimage, 'hours'=>$row->minhours]
);
$this->addMapping('ranks', $row->rankid, $rank->id);
$this->addMapping('ranks', $row->rank, $rank->id);
if($rank->wasRecentlyCreated) {
++$count;
}
}
$this->info('Imported ' . $count . ' ranks');
}
/**
* Import all of the airlines. Save them all in the private var $airlines
* They're used to lookup from other reference tables
*/
protected function importAirlines()
{
$this->comment('--- AIRLINE IMPORT ---');
$count = 0;
foreach ($this->readRows('airlines') as $row)
{
$airline = Airline::firstOrCreate(
['icao' => $row->code],
['iata' => $row->code, 'name' => $row->name, 'active' => $row->enabled]
);
$this->addMapping('airlines', $row->id, $airline->id);
$this->addMapping('airlines', $row->code, $airline->id);
if ($airline->wasRecentlyCreated) {
++$count;
}
}
$this->info('Imported '. $count.' airlines');
}
/**
* Imported the aircraft
*/
protected function importAircraft()
{
$this->comment('--- AIRCRAFT IMPORT ---');
$subfleet = $this->getSubfleet();
$this->info('Subfleet ID is '.$subfleet->id);
$count = 0;
foreach($this->readRows('aircraft') as $row)
{
$aircraft = Aircraft::firstOrCreate(
['name' => $row->fullname, 'registration' => $row->registration],
['icao' => $row->icao,
'subfleet_id' => $subfleet->id,
'active' => $row->enabled
]);
$this->addMapping('aircraft', $row->id, $aircraft->id);
if($aircraft->wasRecentlyCreated) {
++$count;
}
}
$this->info('Imported ' . $count . ' aircraft');
}
/**
* Import all of the airports
*/
protected function importAirports()
{
$this->comment('--- AIRPORT IMPORT ---');
$count = 0;
foreach ($this->readRows('airports') as $row)
{
$attrs = [
'id' => trim($row->icao),
'icao' => trim($row->icao),
'name' => $row->name,
'country' => $row->country,
'lat' => $row->lat,
'lon' => $row->lng,
'hub' => $row->hub,
];
$airport = Airport::updateOrCreate(
['id' => $attrs['id']],
$attrs
);
if($airport->wasRecentlyCreated) {
++$count;
}
}
$this->info('Imported ' . $count . ' airports');
}
/**
* Import the flights and schedules
*/
protected function importFlights()
{
$this->comment('--- FLIGHT SCHEDULE IMPORT ---');
$count = 0;
foreach ($this->readRows('schedules') as $row)
{
$airline_id = $this->getMapping('airlines', $row->code);
$flight_num = trim($row->flightnum);
$attrs = [
'dpt_airport_id' => $row->depicao,
'arr_airport_id' => $row->arricao,
'route' => $row->route ?: '',
'distance' => round($row->distance ?: 0, 2),
'level' => $row->flightlevel ?: 0,
'dpt_time' => $row->deptime ?: '',
'arr_time' => $row->arrtime ?: '',
'flight_time' => $this->convertDuration($row->flighttime) ?: '',
'notes' => $row->notes ?: '',
'active' => $row->enabled ?: true,
];
try {
$flight = Flight::updateOrCreate(
['airline_id' => $airline_id, 'flight_number' => $flight_num],
$attrs
);
} catch (\Exception $e) {
#$this->error($e);
}
$this->addMapping('flights', $row->id, $flight->id);
// TODO: deserialize route_details into ACARS table
if($flight->wasRecentlyCreated) {
++$count;
}
}
$this->info('Imported ' . $count . ' flights');
}
/**
* Import all of the PIREPs
*/
protected function importPireps()
{
$this->comment('--- PIREP IMPORT ---');
$count = 0;
foreach ($this->readRows('pireps') as $row)
{
$pirep_id = $row->pirepid;
$user_id = $this->getMapping('users', $row->pilotid);
$airline_id = $this->getMapping('airlines', $row->code);
$aircraft_id = $this->getMapping('aircraft', $row->aircraft);
$attrs = [
#'id' => $pirep_id,
'user_id' => $user_id,
'airline_id' => $airline_id,
'aircraft_id' => $aircraft_id,
'flight_number' => $row->flightnum ?: '',
'dpt_airport_id' => $row->depicao,
'arr_airport_id' => $row->arricao,
'block_fuel' => $row->fuelused,
'route' => $row->route ?: '',
'source_name' => $row->source,
'created_at' => $this->parseDate($row->submitdate),
'updated_at' => $this->parseDate($row->modifieddate),
];
# Set the distance
$distance = round($row->distance ?: 0, 2);
$attrs['distance'] = $distance;
$attrs['planned_distance'] = $distance;
# Set the flight time properly
$duration = $this->convertDuration($row->flighttime_stamp);
$attrs['flight_time'] = $duration;
$attrs['planned_flight_time'] = $duration;
# Set how it was filed
if(strtoupper($row->source) === 'MANUAL') {
$attrs['source'] = PirepSource::MANUAL;
} else {
$attrs['source'] = PirepSource::ACARS;
}
# Set the flight type
$row->flighttype = strtoupper($row->flighttype);
if($row->flighttype === 'P') {
$attrs['flight_type'] = FlightType::PASSENGER;
} elseif($row->flighttype === 'C') {
$attrs['flight_type'] = FlightType::CARGO;
} else {
$attrs['flight_type'] = FlightType::CHARTER;
}
# Set the flight level of the PIREP is set
if(property_exists($row, 'flightlevel')) {
$attrs['level'] = $row->flightlevel;
} else {
$attrs['level'] = 0;
}
$pirep = Pirep::updateOrCreate(
['id' => $pirep_id],
$attrs
);
$source = strtoupper($row->source);
if($source === 'SMARTCARS') {
# TODO: Parse smartcars log into the acars table
} elseif($source === 'KACARS') {
# TODO: Parse kACARS log into acars table
} elseif($source === 'XACARS') {
# TODO: Parse XACARS log into acars table
}
# TODO: Add extra fields in as PIREP fields
$this->addMapping('pireps', $row->pirepid, $pirep->id);
if ($pirep->wasRecentlyCreated) {
++$count;
}
}
$this->info('Imported ' . $count . ' pireps');
}
protected function importUsers()
{
$this->comment('--- USER IMPORT ---');
$count = 0;
foreach ($this->readRows('pilots', 50) as $row) {
# TODO: What to do about pilot ids
$name = $row->firstname . ' ' . $row->lastname;
$airline_id = $this->getMapping('airlines', $row->code);
$rank_id = $this->getMapping('ranks', $row->rank);
$state = $this->getUserState($row->retired);
$new_password = Str::random(60);
$attrs = [
'name' => $name,
'password' => Hash::make($new_password),
'api_key' => Utils::generateApiKey(),
'airline_id' => $airline_id,
'rank_id' => $rank_id,
'home_airport_id' => $row->hub,
'curr_airport_id' => $row->hub,
'flights' => (int)$row->totalflights,
'flight_time' => Utils::hoursToMinutes($row->totalhours),
'state' => $state,
'created_at' => $this->parseDate($row->joindate),
];
$user = User::updateOrCreate(
['email' => $row->email],
$attrs
);
$this->addMapping('users', $row->pilotid, $user->id);
if ($user->wasRecentlyCreated) {
++$count;
}
}
$this->info('Imported ' . $count . ' users');
}
/**
* Go through and set the last PIREP ID for the users
*/
protected function findLastPireps()
{
}
/**
* Recalculate all of the user ranks
*/
protected function recalculateRanks()
{
/*$this->comment('--- RECALCULATING RANKS ---');*/
}
/**
* Get the user's new state from their original state
* @param $state
* @return int
*/
protected function getUserState($state)
{
// TODO: This state might differ between simpilot and classic version
$state = (int) $state;
// Declare array of classic states
$phpvms_classic_states = [
'ACTIVE' => 0,
'INACTIVE' => 1,
'BANNED' => 2,
'ON_LEAVE' => 3
];
// Decide which state they will be in accordance with v7
if ($state === $phpvms_classic_states['ACTIVE']) {
return UserState::ACTIVE;
} elseif ($state === $phpvms_classic_states['INACTIVE']) {
# TODO: Make an inactive state?
return UserState::REJECTED;
} elseif ($state === $phpvms_classic_states['BANNED']) {
return UserState::SUSPENDED;
} elseif ($state === $phpvms_classic_states['ON_LEAVE']) {
return UserState::ON_LEAVE;
} else {
$this->error('Unknown status: '. $state);
}
}
}

View File

@@ -0,0 +1,27 @@
<?php
namespace App\Contracts;
use App\Models\Airport;
abstract class AirportLookup
{
/**
* Lookup the information for an airport. Needs to return an instance of the
* Airport model, or an array with the properties listed in the Airport model.
*
* The in-use implementation can be changed in the config/phpvms.php file, so
* different services can be used, in-case vaCentral one isn't working or there
* is a better one available. Don't handle any caching in this layer, that happens
* at the service layer
*
* Return null if there's an error or nothing was found
*
* @example App\Services\AirportLookup\VaCentralLookup
*
* @param string $icao
*
* @return Airport|null
*/
abstract public function getAirport($icao);
}

102
app/Contracts/Award.php Normal file
View File

@@ -0,0 +1,102 @@
<?php
namespace App\Contracts;
use App\Models\Award as AwardModel;
use App\Models\User;
use App\Models\UserAward;
use App\Support\Utils;
use Exception;
use Illuminate\Support\Facades\Log;
/**
* Base class for the Awards, you need to extend this, and implement:
* $name
* $param_description (optional)
* public function check($parameter=null)
*
* See: http://docs.phpvms.net/customizing/awards
*/
abstract class Award
{
public $name = '';
public $param_description = '';
/**
* Each award class just needs to return true or false if it should actually
* be awarded to a user. This is the only method that needs to be implemented
*
* @param null $parameter Optional parameters that are passed in from the UI
*
* @return bool
*/
abstract public function check($parameter = null): bool;
/*
* You don't really need to mess with anything below here
*/
/** @var \App\Models\Award|null */
protected $award;
/** @var \App\Models\User|null */
protected $user;
public function __construct(AwardModel $award = null, User $user = null)
{
$this->award = $award;
$this->user = $user;
}
/**
* Run the main handler for this award class to determine if
* it should be awarded or not. Declared as final to prevent a child
* from accidentally overriding and breaking something
*/
final public function handle(): void
{
// Check if the params are a JSON object or array
$param = $this->award->ref_model_params;
if (Utils::isObject($this->award->ref_model_params)) {
$param = json_decode($this->award->ref_model_params);
}
if ($this->check($param)) {
$this->addAward();
}
}
/**
* Add the award to this user, if they don't already have it
*
* @return bool|UserAward
*/
protected function addAward()
{
$w = [
'user_id' => $this->user->id,
'award_id' => $this->award->id,
];
$found = UserAward::where($w)->count('id');
if ($found > 0) {
return true;
}
// Associate this award to the user now
$award = new UserAward($w);
try {
$award->save();
} catch (Exception $e) {
Log::error(
'Error saving award: '.$e->getMessage(),
$e->getTrace()
);
return false;
}
return $award;
}
}

117
app/Contracts/Command.php Normal file
View File

@@ -0,0 +1,117 @@
<?php
namespace App\Contracts;
use Illuminate\Support\Facades\Log;
use function is_array;
use Symfony\Component\Process\Process;
/**
* Class BaseCommand
*/
abstract class Command extends \Illuminate\Console\Command
{
/**
* @return mixed
*/
abstract public function handle();
/**
* Adjust the logging depending on where we're running from
*/
public function __construct()
{
parent::__construct();
// Running in the console but not in the tests
if (app()->runningInConsole() && env('APP_ENV') !== 'testing') {
$this->redirectLoggingToFile('stdout');
}
}
/**
* Splice the logger and replace the active handlers with the handlers from the
* a stack in config/logging.php
*
* @param string $channel_name Channel name from config/logging.php
*/
public function redirectLoggingToFile($channel_name): void
{
$logger = app(\Illuminate\Log\Logger::class);
// Close the existing loggers
try {
$handlers = $logger->getHandlers();
foreach ($handlers as $handler) {
$handler->close();
}
} catch (\Exception $e) {
$this->error('Error closing handlers: '.$e->getMessage());
}
// Open the handlers for the channel name,
// and then set them to the main logger
try {
$logger->setHandlers(
Log::channel($channel_name)->getHandlers()
);
} catch (\Exception $e) {
$this->error('Couldn\'t splice the logger: '.$e->getMessage());
}
}
/**
* Streaming file reader
*
* @param $filename
*
* @return \Generator
*/
public function readFile($filename): ?\Generator
{
$fp = fopen($filename, 'rb');
while (($line = fgets($fp)) !== false) {
$line = rtrim($line, "\r\n");
if ($line[0] === ';') {
continue;
}
yield $line;
}
fclose($fp);
}
/**
* @param array|string $cmd
* @param bool $return
* @param mixed $verbose
*
* @throws \Symfony\Component\Process\Exception\RuntimeException
* @throws \Symfony\Component\Process\Exception\LogicException
*
* @return string
*/
public function runCommand($cmd, $return = false, $verbose = true): string
{
if (is_array($cmd)) {
$cmd = implode(' ', $cmd);
}
if ($verbose) {
$this->info('Running '.$cmd);
}
$val = '';
$process = Process::fromShellCommandline($cmd);
$process->run(function ($type, $buffer) use ($return, &$val) {
if ($return) {
$val .= $buffer;
} else {
echo $buffer;
}
});
return $val;
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Contracts;
use Illuminate\View\View;
abstract class Composer
{
abstract public function compose(View $view);
}

102
app/Contracts/Controller.php Executable file
View File

@@ -0,0 +1,102 @@
<?php
namespace App\Contracts;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request;
use Laracasts\Flash\Flash;
/**
* Class Controller
*/
abstract class Controller extends \Illuminate\Routing\Controller
{
use AuthorizesRequests;
use DispatchesJobs;
use ValidatesRequests;
/**
* Write a error to the flash and redirect the user to a route
*
* @param $message
* @param $route
*
* @return mixed
*/
public function flashError($message, $route)
{
Flash::error($message);
return redirect(route($route))->withInput();
}
/**
* Shortcut function to get the attributes from a request while running the validations
*
* @param Request $request
* @param array $attrs_or_validations
* @param array $addtl_fields
*
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
*
* @return array
*/
public function getFromReq($request, $attrs_or_validations, $addtl_fields = null)
{
// See if a list of values is passed in, or if a validation list is passed in
$is_validation = false;
if (\count(array_filter(array_keys($attrs_or_validations), '\is_string')) > 0) {
$is_validation = true;
}
if ($is_validation) {
$this->validate($request, $attrs_or_validations);
}
$fields = [];
foreach ($attrs_or_validations as $idx => $field) {
if ($is_validation) {
$field = $idx;
}
if ($request instanceof Request) {
if ($request->filled($field)) {
$fields[$field] = $request->input($field);
}
} else {
/* @noinspection NestedPositiveIfStatementsInspection */
if (array_key_exists($field, $request)) {
$fields[$field] = $request[$field];
}
}
}
if (!empty($addtl_fields) && \is_array($addtl_fields)) {
$fields = array_merge($fields, $addtl_fields);
}
return $fields;
}
/**
* Simple normalized method for forming the JSON responses
*
* @param $message
* @param null|mixed $count
*
* @return \Illuminate\Http\JsonResponse
*/
public function message($message, $count = null)
{
$attrs = [
'message' => $message,
];
if ($count !== null) {
$attrs['count'] = $count;
}
return response()->json($attrs);
}
}

172
app/Contracts/Enum.php Normal file
View File

@@ -0,0 +1,172 @@
<?php
namespace App\Contracts;
/**
* Borrowed some ideas from myclabs/php-enum after this was created
*/
abstract class Enum
{
protected static $cache = [];
protected static $codes = [];
protected static $labels = [];
/**
* @var int
*/
protected $value;
/**
* Create an instance of this Enum
*
* @param $val
*/
public function __construct($val)
{
$this->value = $val;
}
/**
* Return the value that's been set if this is an instance
*
* @return mixed
*/
final public function getValue()
{
return $this->value;
}
/**
* Return the label, try to return the translated version as well
*
* @param $value
*
* @return mixed
*/
final public static function label($value)
{
if (isset(static::$labels[$value])) {
$val = static::$labels[$value];
if (strpos($val, '.') !== false) {
return trans($val);
}
return $val;
}
}
/**
* Return all of the (translated) labels
*/
final public static function labels(): array
{
$labels = [];
foreach (static::$labels as $key => $label) {
$labels[$key] = trans($label);
}
return $labels;
}
/**
* Get the numeric value from a string code
*
* @param $code
*
* @return mixed|null
*/
public static function getFromCode($code)
{
return array_search($code, static::$codes, true);
}
/**
* Convert the integer value into one of the codes
*
* @param $value
*
* @return false|int|string
*/
public static function convertToCode($value)
{
$value = (int) $value;
if (!array_key_exists($value, static::$codes)) {
return;
}
return static::$codes[$value];
}
/**
* Select box entry items
*
* @param bool $add_blank
*
* @return array
*/
public static function select($add_blank = false): array
{
$labels = [];
if ($add_blank) {
$labels[] = '';
}
foreach (static::$labels as $key => $label) {
$labels[$key] = trans($label);
}
return $labels;
}
/**
* Returns all possible values as an array
*
* @throws \ReflectionException
*
* @return array Constant name in key, constant value in value
*/
public static function toArray(): array
{
$class = static::class;
if (!array_key_exists($class, static::$cache)) {
$reflection = new \ReflectionClass($class);
static::$cache[$class] = $reflection->getConstants();
}
return static::$cache[$class];
}
/**
* @param Enum $enum
*
* @return bool
*/
final public function equals(self $enum): bool
{
return $this->getValue() === $enum->getValue() && static::class === \get_class($enum);
}
/**
* Returns a value when called statically like so: MyEnum::SOME_VALUE() given SOME_VALUE is a
* class constant
*
* @param string $name
* @param array $arguments
*
* @throws \BadMethodCallException
* @throws \ReflectionException
*
* @return static
*/
public static function __callStatic($name, $arguments)
{
$array = static::toArray();
if (isset($array[$name])) {
return new static($array[$name]);
}
throw new \BadMethodCallException(
"No static method or enum constant '$name' in class ".static::class
);
}
}

12
app/Contracts/Event.php Normal file
View File

@@ -0,0 +1,12 @@
<?php
namespace App\Contracts;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class Event
{
use Dispatchable;
use SerializesModels;
}

View File

@@ -0,0 +1,40 @@
<?php
namespace App\Contracts;
use Illuminate\Validation\Rule;
class FormRequest extends \Illuminate\Foundation\Http\FormRequest
{
/**
* Authorized by default
*
* @return bool
*/
public function authorize(): bool
{
return true;
}
/**
* @return array
*/
public function rules(): array
{
return [];
}
/**
* Set a given column as being unique
*
* @param $table
*
* @return array
*/
public function unique($table)
{
return [
Rule::unique($table)->ignore($this->id, 'id'),
];
}
}

View File

@@ -0,0 +1,246 @@
<?php
namespace App\Contracts;
use App\Models\Airline;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
/**
* Common functionality used across all of the importers
*/
class ImportExport
{
public $assetType;
public $status = [
'success' => [],
'errors' => [],
];
/**
* Hold the columns for the particular table
*/
public static $columns = [];
/**
* @param mixed $row
*
* @return array
*/
public function export($row): array
{
throw new \RuntimeException('export not implemented');
}
/**
* @param array $row
* @param mixed $index
*
* @throws \RuntimeException
*
* @return bool
*/
public function import(array $row, $index): bool
{
throw new \RuntimeException('import not implemented');
}
/**
* Get the airline from the ICAO. Create it if it doesn't exist
*
* @param $code
*
* @return Airline
*/
public function getAirline($code): Airline
{
$airline = Airline::firstOrCreate([
'icao' => $code,
], ['name' => $code]);
return $airline;
}
/**
* @return array
*/
public function getColumns()
{
return static::$columns;
}
/**
* Do a basic check that the number of columns match
*
* @param $row
*
* @return bool
*/
public function checkColumns($row): bool
{
return \count($row) === \count($this->getColumns());
}
/**
* Bubble up an error to the interface that we need to stop
*
* @param $error
* @param $e
*
* @throws ValidationException
*/
protected function throwError($error, \Exception $e = null): void
{
Log::error($error);
if ($e) {
Log::error($e->getMessage());
}
$validator = Validator::make([], []);
$validator->errors()->add('csv_file', $error);
throw new ValidationException($validator);
}
/**
* Add to the log messages for this importer
*
* @param $msg
*/
public function log($msg): void
{
$this->status['success'][] = $msg;
Log::info($msg);
}
/**
* Add to the error log for this import
*
* @param $msg
*/
public function errorLog($msg): void
{
$this->status['errors'][] = $msg;
Log::error($msg);
}
/**
* Set a key-value pair to an array
*
* @param $kvp_str
* @param array $arr
*/
protected function kvpToArray($kvp_str, array &$arr)
{
$item = explode('=', $kvp_str);
if (\count($item) === 1) { // just a list?
$arr[] = trim($item[0]);
} else { // actually a key-value pair
$k = trim($item[0]);
$v = trim($item[1]);
$arr[$k] = $v;
}
}
/**
* Parse a multi column values field. E.g:
* Y?price=200&cost=100; F?price=1200
* or
* gate=B32;cost index=100
*
* Converted into a multi-dimensional array
*
* @param $field
*
* @return array|string
*/
public function parseMultiColumnValues($field)
{
$ret = [];
$split_values = explode(';', $field);
// No multiple values in here, just a straight value
if (\count($split_values) === 1) {
if (trim($split_values[0]) === '') {
return [];
}
return [$split_values[0]];
}
foreach ($split_values as $value) {
// This isn't in the query string format, so it's
// just a straight key-value pair set
if (strpos($value, '?') === false) {
$this->kvpToArray($value, $ret);
continue;
}
// This contains the query string, which turns it
// into the multi-level array
$query_str = explode('?', $value);
$parent = trim($query_str[0]);
$children = [];
$kvp = explode('&', trim($query_str[1]));
foreach ($kvp as $items) {
if (!$items) {
continue;
}
$this->kvpToArray($items, $children);
}
$ret[$parent] = $children;
}
return $ret;
}
/**
* @param $obj
*
* @return mixed
*/
public function objectToMultiString($obj)
{
if (!\is_array($obj)) {
return $obj;
}
$ret_list = [];
foreach ($obj as $key => $val) {
if (is_numeric($key) && !\is_array($val)) {
$ret_list[] = $val;
continue;
}
$key = trim($key);
if (!\is_array($val)) {
$val = trim($val);
$ret_list[] = "{$key}={$val}";
} else {
$q = [];
foreach ($val as $subkey => $subval) {
if (is_numeric($subkey)) {
$q[] = $subval;
} else {
$q[] = "{$subkey}={$subval}";
}
}
$q = implode('&', $q);
if (!empty($q)) {
$ret_list[] = "{$key}?{$q}";
} else {
$ret_list[] = $key;
}
}
}
return implode(';', $ret_list);
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Contracts;
use Illuminate\Contracts\Events\Dispatcher;
abstract class Listener
{
public static $callbacks = [];
/**
* Sets up any callbacks that are defined in the child class
*
* @param $events
*/
public function subscribe(Dispatcher $events): void
{
foreach (static::$callbacks as $klass => $cb) {
$events->listen($klass, static::class.'@'.$cb);
}
}
}

99
app/Contracts/Metar.php Normal file
View File

@@ -0,0 +1,99 @@
<?php
namespace App\Contracts;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
/**
* Base class for implementing retrieving METARs
*/
abstract class Metar
{
/**
* Implement retrieving the METAR - return the METAR string. Needs to be protected,
* since this shouldn't be directly called. Call `metar($icao)`. If not implemented,
* return a blank string
*
* @param $icao
*
* @return mixed
*/
abstract protected function get_metar($icao): string;
/**
* Implement retrieving the TAF - return the string. Call `taf($icao)`. If not implemented,
* return a blank string
*
* @param $icao
*
* @return mixed
*/
abstract protected function get_taf($icao): string;
/**
* Download the METAR, wrap in caching
*
* @param $icao
*
* @return string
*/
public function metar($icao): string
{
$cache = config('cache.keys.METAR_WEATHER_LOOKUP');
$key = $cache['key'].$icao;
if (Cache::has($key)) {
$raw_metar = Cache::get($key);
if ($raw_metar !== '') {
return $raw_metar;
}
}
try {
$raw_metar = $this->get_metar($icao);
} catch (\Exception $e) {
Log::error('Error getting METAR: '.$e->getMessage(), $e->getTrace());
return '';
}
if ($raw_metar !== '') {
Cache::put($key, $raw_metar, $cache['time']);
}
return $raw_metar;
}
/**
* Download the TAF, wrap in caching
*
* @param $icao
*
* @return string
*/
public function taf($icao): string
{
$cache = config('cache.keys.TAF_WEATHER_LOOKUP');
$key = $cache['key'].$icao;
if (Cache::has($key)) {
$taf = Cache::get($key);
if ($taf !== '') {
return $taf;
}
}
try {
$taf = $this->get_taf($icao);
} catch (\Exception $e) {
Log::error('Error getting TAF: '.$e->getMessage(), $e->getTrace());
return '';
}
if ($taf !== '') {
Cache::put($key, $taf, $cache['time']);
}
return $taf;
}
}

View File

@@ -0,0 +1,11 @@
<?php
namespace App\Contracts;
use Closure;
use Illuminate\Http\Request;
interface Middleware
{
public function handle(Request $request, Closure $next);
}

107
app/Contracts/Migration.php Normal file
View File

@@ -0,0 +1,107 @@
<?php
namespace App\Contracts;
use App\Support\Database;
use Exception;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
/**
* Class Migration
*/
abstract class Migration extends \Illuminate\Database\Migrations\Migration
{
/**
* At a minimum, this function needs to be implemented
*
* @return mixed
*/
abstract public function up();
/**
* A method to reverse a migration doesn't need to be made
*/
public function down()
{
}
/**
* Add a module and enable it
*
* @param array $attrs
*/
public function addModule(array $attrs)
{
$module = array_merge([
'enabled' => true,
'created_at' => DB::raw('NOW()'),
'updated_at' => DB::raw('NOW()'),
], $attrs);
try {
DB::table('modules')->insert($module);
} catch (Exception $e) {
// setting already exists, just ignore it
if ($e->getCode() === 23000) {
return;
}
}
}
/**
* Seed a YAML file into the database
*
* @param string $file Full path to yml file to seed
*/
public function seedFile($file): void
{
try {
$path = base_path($file);
Database::seed_from_yaml_file($path, false);
} catch (Exception $e) {
Log::error('Unable to load '.$file.' file');
Log::error($e);
}
}
/**
* Add rows to a table
*
* @param $table
* @param $rows
*/
public function addData($table, $rows)
{
foreach ($rows as $row) {
try {
DB::table($table)->insert($row);
} catch (Exception $e) {
// setting already exists, just ignore it
if ($e->getCode() === 23000) {
continue;
}
}
}
}
/**
* Add an award from the migrations (for example, if you're adding an award module)
*
* @param array $award See \App\Models\Awardv
*
* @throws \Illuminate\Validation\ValidationException
*/
public function addAward(array $award)
{
$validator = Validator::make($award, \App\Models\Award::$rules);
if ($validator->fails()) {
throw new ValidationException($validator);
}
$awardModel = new \App\Models\Award($award);
$awardModel->save();
}
}

22
app/Contracts/Model.php Normal file
View File

@@ -0,0 +1,22 @@
<?php
namespace App\Contracts;
/**
* @property mixed $id
* @property bool $skip_mutator
*
* @mixin \Illuminate\Database\Eloquent\Builder
*/
abstract class Model extends \Illuminate\Database\Eloquent\Model
{
/**
* Max length of ID for string columns
*/
public const ID_MAX_LENGTH = 16;
/**
* For the factories, skip the mutators. Only apply to one instance
*/
public $skip_mutator = false;
}

View File

@@ -0,0 +1,49 @@
<?php
namespace App\Contracts\Modules;
/**
* Base class for module service providers
* Add-on module service providers must extend this class. Docs on Service Providers:
* https://laravel.com/docs/7.x/providers
*
* For a sample service provider, view the sample module one:
* https://github.com/nabeelio/phpvms-module/blob/master/Providers/SampleServiceProvider.php
*/
abstract class ServiceProvider extends \Illuminate\Support\ServiceProvider
{
/**
* A boot method is required, even if it doesn't do anything.
* https://laravel.com/docs/7.x/providers#the-boot-method
*
* This is normally where you'd register the routes or other startup tasks for your module
*/
public function boot(): void
{
}
/**
* This is required to register the links in either the public or admin toolbar
* For example, adding a frontend link:
*
* $this->moduleSvc->addFrontendLink('Sample', '/sample', '', $logged_in=true);
*
* Or an admin link:
*
* $this->moduleSvc->addAdminLink('Sample', '/admin/sample');
*/
public function registerLinks(): void
{
}
/**
* Deferred providers:
* https://laravel.com/docs/7.x/providers#deferred-providers
*
* @return array
*/
public function provides(): array
{
return [];
}
}

View File

@@ -0,0 +1,41 @@
<?php
namespace App\Contracts;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Log;
class Notification extends \Illuminate\Notifications\Notification implements ShouldQueue
{
use Queueable;
public $channels = [];
public $requires_opt_in = false;
public function __construct()
{
// Look in the notifications.channels config and see where this particular
// notification can go. Map it to $channels
$klass = static::class;
$notif_config = config('notifications.channels', []);
if (!array_key_exists($klass, $notif_config)) {
Log::error('Notification type '.$klass.' missing from notifications config, defaulting to mail');
return;
}
$this->channels = $notif_config[$klass];
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
*
* @return array
*/
public function via($notifiable)
{
return $this->channels;
}
}

View File

@@ -0,0 +1,140 @@
<?php
namespace App\Contracts;
use Illuminate\Validation\Validator;
use Prettus\Repository\Eloquent\BaseRepository;
/**
* @mixin \Prettus\Repository\Eloquent\BaseRepository
*/
abstract class Repository extends BaseRepository
{
/**
* @param $id
* @param array $columns
*
* @return mixed|null
*/
public function findWithoutFail($id, array $columns = ['*'])
{
try {
return $this->find($id, $columns);
} catch (\Exception $e) {
return;
}
}
/**
* @param $values
*
* @return bool
*/
public function validate($values)
{
$validator = Validator::make(
$values,
$this->model()->rules
);
if ($validator->fails()) {
return $validator->messages();
}
return true;
}
/**
* Return N most recent items, sorted by created_at
*
* @param int $count
* @param string $sort_by created_at (default) or updated_at
*
* @return mixed
*/
public function recent($count = null, $sort_by = 'created_at')
{
return $this->orderBy($sort_by, 'desc')->paginate($count);
}
/**
* Find records with a WHERE clause but also sort them
*
* @param $where
* @param $sort_by
* @param $order_by
*
* @return $this
*/
public function whereOrder($where, $sort_by, $order_by = 'asc')
{
return $this->scopeQuery(function ($query) use ($where, $sort_by, $order_by) {
$q = $query->where($where);
// See if there are multi-column sorts
if (\is_array($sort_by)) {
foreach ($sort_by as $key => $sort) {
$q = $q->orderBy($key, $sort);
}
} else {
$q = $q->orderBy($sort_by, $order_by);
}
return $q;
});
}
/**
* Find records where values don't match a list but sort the rest
*
* @param string $col
* @param array $values
* @param string $sort_by
* @param string $order_by
*
* @return $this
*/
public function whereNotInOrder($col, $values, $sort_by, $order_by = 'asc')
{
return $this->scopeQuery(function ($query) use ($col, $values, $sort_by, $order_by) {
$q = $query->whereNotIn($col, $values);
// See if there are multi-column sorts
if (\is_array($sort_by)) {
foreach ($sort_by as $key => $sort) {
$q = $q->orderBy($key, $sort);
}
} else {
$q = $q->orderBy($sort_by, $order_by);
}
return $q;
});
}
/**
* Retrieve all data of repository, paginated. Added in extra parameter to read from the
* request which page it should be on
*
* @param null $limit
* @param array $columns
* @param string $method
*
* @throws \Prettus\Repository\Exceptions\RepositoryException
*
* @return mixed
*/
public function paginate($limit = null, $columns = ['*'], $method = 'paginate')
{
$this->applyCriteria();
$this->applyScope();
$max = config('repository.pagination.limit', 50);
$limit = (int) ($limit ?? request()->query('limit') ?? $max);
$page = (int) request()->query('page', 1);
$results = $this->model->{$method}($limit, $columns, 'page', $page);
$results->appends(app('request')->query());
$this->resetModel();
return $this->parserResult($results);
}
}

View File

@@ -0,0 +1,29 @@
<?php
namespace App\Contracts;
use Illuminate\Http\Resources\Json\JsonResource;
/**
* Base class for a resource/response
*/
class Resource extends JsonResource
{
/**
* Iterate through the list of $fields and check if they're a "Unit"
* If they are, then add the response
*
* @param $response
* @param array $fields
*/
public function checkUnitFields(&$response, array $fields): void
{
foreach ($fields as $f) {
if ($this->{$f} instanceof Unit) {
$response[$f] = $this->{$f}->getResponseUnits();
} else {
$response[$f] = $this->{$f};
}
}
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Contracts;
/**
* Abstract class for finding a route from a departure airport to an arrival airport
* Can allow for multiple, configurable methods for finding a route, whether it reaches
* out to a REST API or implement some sort of internal logic to look through a file
* or whatever the logic might be.
*
* Just one public-facing method needs to be implemented
*/
abstract class RouteFinder
{
/**
* Find a route from the departure ICAO to the arrival ICAO
*
* @param $dptIcao
* @param $arrIcao
*
* @return string
*/
abstract public function findRoute($dptIcao, $arrIcao): string;
}

10
app/Contracts/Service.php Normal file
View File

@@ -0,0 +1,10 @@
<?php
namespace App\Contracts;
/**
* Class Service
*/
abstract class Service
{
}

129
app/Contracts/Unit.php Normal file
View File

@@ -0,0 +1,129 @@
<?php
namespace App\Contracts;
use ArrayAccess;
use PhpUnitsOfMeasure\Exception\UnknownUnitOfMeasure;
/**
* Abstract unit wrapper
*/
class Unit implements ArrayAccess
{
/**
* The unit this is kept as
*/
public $unit;
/**
* All of the units of this class
*/
public $units;
/**
* Holds an instance of the PhpUnit type
*
* @var \PhpUnitsOfMeasure\AbstractPhysicalQuantity
*/
protected $instance;
/**
* Units that are included as part of the REST response
*/
public $responseUnits = [];
/**
* @return mixed
*/
public function value()
{
return $this->__toString();
}
/**
* Just call toUnit() on the PhpUnitOfMeasure instance
*
* @param string $unit
*
* @return mixed
*/
public function toUnit($unit)
{
return $this->instance->toUnit($unit);
}
/**
* Return all of the units that get sent back in a response
*/
public function getResponseUnits(): array
{
$response = [];
foreach ($this->responseUnits as $unit) {
$response[$unit] = $this[$unit] ?? 0;
}
return $response;
}
/**
* Implements ArrayAccess
*
* @param $offset
*
* @return bool
*/
public function offsetExists($offset)
{
return $this->offsetGet($offset) !== null;
}
/**
* Implements ArrayAccess
*
* @param $offset
*
* @return mixed
*/
public function offsetGet($offset)
{
try {
$value = $this->instance->toUnit($offset);
if (!$value) {
return;
}
} catch (UnknownUnitOfMeasure $e) {
return;
}
return round($value, 2);
}
/**
* Implements ArrayAccess
*
* @param $offset
* @param $value
*/
public function offsetSet($offset, $value)
{
// $this->units[$offset] = $value;
}
/**
* Implements ArrayAccess
*
* @param $offset
*/
public function offsetUnset($offset)
{
// $this->units[$offset] = null;
}
/**
* @return mixed
*/
public function __toString()
{
return (string) $this->offsetGet($this->unit);
}
}

26
app/Contracts/Widget.php Normal file
View File

@@ -0,0 +1,26 @@
<?php
namespace App\Contracts;
use Arrilot\Widgets\AbstractWidget;
/**
* Class Widget
*/
abstract class Widget extends AbstractWidget
{
public $cacheTime = 0;
/**
* Render the template
*
* @param string $template
* @param array $vars
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function view(string $template, array $vars = [])
{
return view($template, $vars);
}
}

View File

@@ -0,0 +1,52 @@
<?php
namespace App\Cron\Hourly;
use App\Contracts\Listener;
use App\Events\CronHourly;
use App\Models\Enums\PirepState;
use App\Models\Pirep;
use App\Services\PirepService;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
/**
* Remove cancelled/deleted PIREPs. Look for PIREPs that were created before the setting time
* (e.g, 12 hours ago) and are marked with the
*/
class DeletePireps extends Listener
{
/**
* Remove expired bids
*
* @param CronHourly $event
*
* @throws \Exception
*/
public function handle(CronHourly $event): void
{
$this->deletePireps(setting('pireps.delete_rejected_hours'), PirepState::REJECTED);
$this->deletePireps(setting('pireps.delete_cancelled_hours'), PirepState::CANCELLED);
}
/**
* Look for and delete PIREPs which match the criteria
*
* @param int $expire_time_hours The time in hours to look for PIREPs
* @param int $state The PirepState enum value
*/
protected function deletePireps(int $expire_time_hours, int $state)
{
$dt = Carbon::now()->subHours($expire_time_hours);
$pireps = Pirep::whereDate('created_at', '<', $dt)->where(['state' => $state])->get();
/** @var PirepService $pirepSvc */
$pirepSvc = app(PirepService::class);
/** @var Pirep $pirep */
foreach ($pireps as $pirep) {
Log::info('Cron: Deleting PIREP id='.$pirep->id.', state='.PirepState::label($state));
$pirepSvc->delete($pirep);
}
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Cron\Hourly;
use App\Contracts\Listener;
use App\Events\CronHourly;
use App\Models\Bid;
use Carbon\Carbon;
/**
* Remove expired bids
*/
class RemoveExpiredBids extends Listener
{
/**
* Remove expired bids
*
* @param CronHourly $event
*
* @throws \Exception
*/
public function handle(CronHourly $event): void
{
if (setting('bids.expire_time') === 0) {
return;
}
$date = Carbon::now()->subHours(setting('bids.expire_time'));
Bid::whereDate('created_at', '<', $date)->delete();
}
}

View File

@@ -0,0 +1,34 @@
<?php
namespace App\Cron\Hourly;
use App\Contracts\Listener;
use App\Events\CronHourly;
use App\Models\Enums\PirepState;
use App\Models\Pirep;
use Carbon\Carbon;
/**
* Remove expired live flights
*/
class RemoveExpiredLiveFlights extends Listener
{
/**
* Remove expired live flights that haven't had an update in the live time
*
* @param CronHourly $event
*
* @throws \Exception
*/
public function handle(CronHourly $event): void
{
if (setting('acars.live_time') === 0) {
return;
}
$date = Carbon::now()->subHours(setting('acars.live_time'));
Pirep::whereDate('updated_at', '<', $date)
->where('state', PirepState::IN_PROGRESS)
->delete();
}
}

View File

@@ -0,0 +1,42 @@
<?php
namespace App\Cron\Monthly;
use App\Contracts\Listener;
use App\Events\CronMonthly;
use App\Models\Enums\ExpenseType;
use App\Services\Finance\RecurringFinanceService;
use Illuminate\Support\Facades\Log;
/**
* Go through and apply any finances that are daily
*/
class ApplyExpenses extends Listener
{
private $financeSvc;
/**
* ApplyExpenses constructor.
*
* @param RecurringFinanceService $financeSvc
*/
public function __construct(RecurringFinanceService $financeSvc)
{
$this->financeSvc = $financeSvc;
}
/**
* Apply all of the expenses for a month
*
* @param CronMonthly $event
*
* @throws \UnexpectedValueException
* @throws \InvalidArgumentException
* @throws \Prettus\Validator\Exceptions\ValidatorException
*/
public function handle(CronMonthly $event): void
{
Log::info('Monthly: Applying monthly expenses');
$this->financeSvc->processExpenses(ExpenseType::MONTHLY);
}
}

View File

@@ -0,0 +1,42 @@
<?php
namespace App\Cron\Nightly;
use App\Contracts\Listener;
use App\Events\CronNightly;
use App\Models\Enums\ExpenseType;
use App\Services\Finance\RecurringFinanceService;
use Illuminate\Support\Facades\Log;
/**
* Go through and apply any finances that are daily
*/
class ApplyExpenses extends Listener
{
private $financeSvc;
/**
* ApplyExpenses constructor.
*
* @param RecurringFinanceService $financeSvc
*/
public function __construct(RecurringFinanceService $financeSvc)
{
$this->financeSvc = $financeSvc;
}
/**
* Apply all of the expenses for a day
*
* @param CronNightly $event
*
* @throws \UnexpectedValueException
* @throws \InvalidArgumentException
* @throws \Prettus\Validator\Exceptions\ValidatorException
*/
public function handle(CronNightly $event): void
{
Log::info('Nightly: Applying daily expenses');
$this->financeSvc->processExpenses(ExpenseType::DAILY);
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace App\Cron\Nightly;
use App\Contracts\Listener;
use App\Events\CronNightly;
use App\Services\SimBriefService;
use Illuminate\Support\Facades\Log;
/**
* Clear any expired SimBrief flight briefs that aren't attached to a PIREP
*/
class ClearExpiredSimbrief extends Listener
{
private $simbriefSvc;
public function __construct(SimBriefService $simbriefSvc)
{
$this->simbriefSvc = $simbriefSvc;
}
/**
* @param \App\Events\CronNightly $event
*/
public function handle(CronNightly $event): void
{
Log::info('Nightly: Removing expired Simbrief entries');
$this->simbriefSvc->removeExpiredEntries();
}
}

View File

@@ -0,0 +1,35 @@
<?php
namespace App\Cron\Nightly;
use App\Contracts\Listener;
use App\Events\CronNightly;
use App\Services\VersionService;
use Illuminate\Support\Facades\Log;
/**
* Determine if any pilots should be set to ON LEAVE status
*/
class NewVersionCheck extends Listener
{
private $versionSvc;
/**
* @param VersionService $versionSvc
*/
public function __construct(VersionService $versionSvc)
{
$this->versionSvc = $versionSvc;
}
/**
* Set any users to being on leave after X days
*
* @param CronNightly $event
*/
public function handle(CronNightly $event): void
{
Log::info('Nightly: Checking for new version');
$this->versionSvc->isNewVersionAvailable();
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace App\Cron\Nightly;
use App\Contracts\Listener;
use App\Events\CronNightly;
use App\Services\UserService;
use Illuminate\Support\Facades\Log;
/**
* Determine if any pilots should be set to ON LEAVE status
*/
class PilotLeave extends Listener
{
private $userSvc;
/**
* PilotLeave constructor.
*
* @param UserService $userSvc
*/
public function __construct(UserService $userSvc)
{
$this->userSvc = $userSvc;
}
/**
* Set any users to being on leave after X days
*
* @param CronNightly $event
*
* @throws \UnexpectedValueException
* @throws \InvalidArgumentException
*/
public function handle(CronNightly $event): void
{
Log::info('Cron: Running pilot leave check');
$users = $this->userSvc->findUsersOnLeave();
Log::info('Found '.count($users).' users on leave');
foreach ($users as $user) {
Log::info('Setting user '.$user->ident.' to ON LEAVE status');
$this->userSvc->setStatusOnLeave($user);
}
}
}

View File

@@ -0,0 +1,54 @@
<?php
namespace App\Cron\Nightly;
use App\Contracts\Listener;
use App\Events\CronNightly;
use App\Models\Journal;
use App\Repositories\JournalRepository;
use Log;
/**
* This recalculates the balances on all of the journals
*/
class RecalculateBalances extends Listener
{
private $journalRepo;
/**
* Nightly constructor.
*
* @param JournalRepository $journalRepo
*/
public function __construct(JournalRepository $journalRepo)
{
$this->journalRepo = $journalRepo;
}
/**
* Recalculate all the balances for the different ledgers
*
* @param CronNightly $event
*
* @throws \UnexpectedValueException
* @throws \InvalidArgumentException
*/
public function handle(CronNightly $event): void
{
Log::info('Nightly: Recalculating balances');
$journals = Journal::all();
foreach ($journals as $journal) {
$old_balance = $journal->balance;
$this->journalRepo->recalculateBalance($journal);
$journal->refresh();
Log::info('Adjusting balance on '.
$journal->morphed_type.':'.$journal->morphed_id
.' from '.$old_balance.' to '.$journal->balance);
}
Log::info('Done calculating balances');
}
}

View File

@@ -0,0 +1,41 @@
<?php
namespace App\Cron\Nightly;
use App\Contracts\Listener;
use App\Events\CronNightly;
use App\Services\AircraftService;
use App\Services\UserService;
use Illuminate\Support\Facades\Log;
/**
* This recalculates the balances on all of the journals
*/
class RecalculateStats extends Listener
{
private $aircraftSvc;
private $userSvc;
public function __construct(AircraftService $aircraftSvc, UserService $userSvc)
{
$this->aircraftSvc = $aircraftSvc;
$this->userSvc = $userSvc;
}
/**
* Recalculate the stats for active users
*
* @param CronNightly $event
*
* @throws \UnexpectedValueException
* @throws \InvalidArgumentException
*/
public function handle(CronNightly $event): void
{
Log::info('Nightly: Recalculating user stats');
$this->userSvc->recalculateAllUserStats();
Log::info('Nightly: Recalcuating aircraft status');
$this->aircraftSvc->recalculateStats();
}
}

View File

@@ -0,0 +1,85 @@
<?php
namespace App\Cron\Nightly;
use App\Contracts\Listener;
use App\Events\CronNightly;
use App\Models\Enums\Days;
use App\Models\Flight;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
/**
* Figure out what flights need to be active for today
*/
class SetActiveFlights extends Listener
{
/**
* @param CronNightly $event
*/
public function handle(CronNightly $event): void
{
Log::info('Nightly: Setting active flights');
$this->checkFlights();
}
/**
* Look through every single flight, check the start/end dates,
* as well of the days of week if this flight is active on this day
*
* TODO: Option to check the flight active/inactive against departure TZ
* TODO: Move to FlightService
*/
public function checkFlights(): void
{
$today = Carbon::now('UTC');
$flights = Flight::all();
/**
* @var Flight $flight
*/
foreach ($flights as $flight) {
if (!$flight->active) {
continue;
}
// Set to visible by default
$flight->visible = true;
// dates aren't set, so just save if there were any changes above
// and move onto the next one
if ($flight->start_date === null || $flight->end_date === null) {
if ($flight->days !== null && $flight->days > 0) {
$flight->visible = Days::isToday($flight->days);
if (!$flight->visible) {
Log::info('Today='.date('N').', start=no, mask='.$flight->days.', in='
.Days::in($flight->days, Days::$isoDayMap[(int) date('N')]));
}
}
$flight->save();
continue;
}
// Check the day of week now first
// Start/end date is set, so make sure today is valid for it to be alive
// and then make sure if days of the week are specified, check that too
if ($today->gte($flight->start_date) && $today->lte($flight->end_date)) {
if ($flight->days !== null && $flight->days > 0) {
$flight->visible = Days::isToday($flight->days);
if (!$flight->visible) {
Log::info('Today='.date('N').', start=no, mask='.$flight->days.', in='
.Days::in($flight->days, Days::$isoDayMap[(int) date('N')]));
}
}
} else {
$flight->visible = false;
Log::info('Toggling flight '.$flight->ident.' to hidden, outside of start/end boundary');
}
$flight->save();
}
}
}

View File

@@ -4,18 +4,20 @@ use Faker\Generator as Faker;
$factory->define(App\Models\Acars::class, function (Faker $faker) {
return [
'id' => null,
'pirep_id' => null,
'log' => $faker->text(100),
'lat' => $faker->latitude,
'lon' => $faker->longitude,
'heading' => $faker->numberBetween(0, 359),
'altitude' => $faker->numberBetween(20, 400),
'vs' => $faker->numberBetween(-5000, 5000),
'gs' => $faker->numberBetween(300, 500),
'id' => null,
'pirep_id' => null,
'log' => $faker->text(100),
'lat' => $faker->latitude,
'lon' => $faker->longitude,
'distance' => $faker->randomFloat(2, 0, 6000),
'heading' => $faker->numberBetween(0, 359),
'altitude' => $faker->numberBetween(20, 400),
'vs' => $faker->numberBetween(-5000, 5000),
'gs' => $faker->numberBetween(300, 500),
'transponder' => $faker->numberBetween(200, 9999),
'autopilot' => $faker->text(10),
'fuel_flow' => $faker->randomFloat(2, 100, 1000),
'sim_time' => $faker->dateTime('now', 'UTC'),
'autopilot' => $faker->text(10),
'fuel' => $faker->randomFloat(2, 100, 1000),
'fuel_flow' => $faker->randomFloat(2, 100, 1000),
'sim_time' => $faker->dateTime('now', 'UTC'),
];
});

View File

@@ -1,23 +1,32 @@
<?php
use App\Models\Airport;
use App\Models\Enums\AircraftState;
use App\Models\Enums\AircraftStatus;
use App\Models\Subfleet;
use App\Support\ICAO;
use Faker\Generator as Faker;
$factory->define(App\Models\Aircraft::class, function (Faker $faker) {
return [
#'id' => $faker->unique()->numberBetween(10, 100000),
'subfleet_id' => function() {
return factory(App\Models\Subfleet::class)->create()->id;
'id' => null,
'subfleet_id' => function () {
return factory(Subfleet::class)->create()->id;
},
'airport_id' => function () {
return factory(App\Models\Airport::class)->create()->id;
return factory(Airport::class)->create()->id;
},
'icao' => $faker->unique()->text(5),
'name' => $faker->unique()->text(50),
'iata' => $faker->unique()->text(5),
'icao' => $faker->unique()->text(5),
'name' => $faker->text(50),
'registration' => $faker->unique()->text(10),
'tail_number' => $faker->unique()->text(10),
'active' => true,
'created_at' => $faker->dateTimeBetween('-1 week', 'now'),
'updated_at' => function (array $pirep) {
'hex_code' => ICAO::createHexCode(),
'mtow' => $faker->randomFloat(2, 0, 50000),
'zfw' => $faker->randomFloat(2, 0, 50000),
'status' => AircraftStatus::ACTIVE,
'state' => AircraftState::PARKED,
'created_at' => $faker->dateTimeBetween('-1 week', 'now'),
'updated_at' => function (array $pirep) {
return $pirep['created_at'];
},
];

View File

@@ -3,20 +3,23 @@
use Faker\Generator as Faker;
use Hashids\Hashids;
/**
/*
* Add any number of airports. Don't really care if they're real or not
*/
$factory->define(App\Models\Airline::class, function (Faker $faker) {
return [
#'id' => $faker->unique()->numberBetween(10, 10000),
'icao' => function (array $apt) use ($faker) {
'id' => null,
'icao' => function (array $apt) {
$hashids = new Hashids(microtime(), 5);
$mt = str_replace('.', '', microtime(true));
return $hashids->encode($mt);
},
'iata' => function (array $apt) { return $apt['icao']; },
'name' => $faker->sentence(3),
'iata' => function (array $apt) {
return $apt['icao'];
},
'name' => $faker->sentence(3),
'country' => $faker->country,
'active' => 1
'active' => 1,
];
});

View File

@@ -1,37 +1,56 @@
<?php
use Hashids\Hashids;
use Faker\Generator as Faker;
/**
/*
* Create an ICAO for use in the factory.
*/
if (!function_exists('createFactoryICAO')) {
function createFactoryICAO(): string
{
$characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$max = strlen($characters) - 1;
$string = '';
for ($i = 0; $i < 4; $i++) {
try {
$string .= $characters[random_int(0, $max)];
} catch (Exception $e) {
}
}
return $string;
}
}
/*
* Add any number of airports. Don't really care if they're real or not
*/
$factory->define(App\Models\Airport::class, function (Faker $faker) {
$usedIcaos = [];
return [
'id' => function(array $apt) use ($faker) {
$characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$string = '';
$max = strlen($characters) - 1;
for ($i = 0; $i < 5; $i++) {
$string .= $characters[random_int(0, $max)];
}
'id' => function () use ($usedIcaos) {
do {
$airport = createFactoryICAO();
} while (in_array($airport, $usedIcaos, true));
return $string;
#return $faker->unique()->text(5);
/*$hashids = new Hashids(microtime(), 5);
$mt = str_replace('.', '', microtime(true));
return $hashids->encode($mt);*/
return $airport;
},
'icao' => function(array $apt) { return $apt['id']; },
'iata' => function (array $apt) { return $apt['id']; },
'name' => $faker->sentence(3),
'country' => $faker->country,
'tz' => $faker->timezone,
'lat' => $faker->latitude,
'lon' => $faker->longitude,
'fuel_100ll_cost' => $faker->randomFloat(2),
'fuel_jeta_cost' => $faker->randomFloat(2),
'fuel_mogas_cost' => $faker->randomFloat(2),
'icao' => function (array $apt) {
return $apt['id'];
},
'iata' => function (array $apt) {
return $apt['id'];
},
'name' => $faker->sentence(3),
'country' => $faker->country,
'timezone' => $faker->timezone,
'lat' => $faker->latitude,
'lon' => $faker->longitude,
'hub' => false,
'ground_handling_cost' => $faker->randomFloat(2, 0, 500),
'fuel_100ll_cost' => $faker->randomFloat(2, 1, 10),
'fuel_jeta_cost' => $faker->randomFloat(2, 1, 10),
'fuel_mogas_cost' => $faker->randomFloat(2, 1, 10),
];
});

View File

@@ -0,0 +1,13 @@
<?php
use Faker\Generator as Faker;
$factory->define(App\Models\Award::class, function (Faker $faker) {
return [
'id' => null,
'name' => $faker->name,
'description' => $faker->text(10),
'ref_model' => null,
'ref_model_params' => null,
];
});

View File

@@ -0,0 +1,18 @@
<?php
use App\Models\Enums\ExpenseType;
use Faker\Generator as Faker;
$factory->define(App\Models\Expense::class, function (Faker $faker) {
return [
'id' => null,
'airline_id' => null,
'name' => $faker->text(20),
'amount' => $faker->randomFloat(2, 100, 1000),
'type' => ExpenseType::FLIGHT,
'multiplier' => false,
'ref_model' => \App\Models\Expense::class,
'ref_model_id' => null,
'active' => true,
];
});

View File

@@ -4,10 +4,13 @@ use Faker\Generator as Faker;
$factory->define(App\Models\Fare::class, function (Faker $faker) {
return [
#'id' => $faker->unique()->numberBetween(10, 10000),
'code' => $faker->text(5),
'name' => $faker->text(20),
'id' => null,
'code' => $faker->unique()->text(50),
'name' => $faker->text(50),
'price' => $faker->randomFloat(2, 100, 1000),
'cost' => function (array $fare) {
return round($fare['price'] / 2);
},
'capacity' => $faker->randomFloat(0, 20, 500),
];
});

View File

@@ -1,36 +1,44 @@
<?php
/**
* Create flights
*/
use Faker\Generator as Faker;
# Match the list available in tests/data/*.yml
$airlinesAvailable = [1];
$factory->define(App\Models\Flight::class, function (Faker $faker) use ($airlinesAvailable) {
$factory->define(App\Models\Flight::class, function (Faker $faker) {
return [
'id' => substr($faker->unique()->sha1, 28, 12),
'airline_id' => $faker->randomElement($airlinesAvailable),
'flight_number' => $faker->unique()->numberBetween(10, 1000000),
'route_code' => $faker->randomElement(['', $faker->text(5)]),
'route_leg' => $faker->randomElement(['', $faker->text(5)]),
'dpt_airport_id' => function() {
return factory(App\Models\Airport::class)->create()->id;
'id' => $faker->unique()->numberBetween(10, 10000000),
'airline_id' => function () {
return factory(\App\Models\Airline::class)->create()->id;
},
'flight_number' => $faker->unique()->numberBetween(10, 1000000),
'route_code' => $faker->randomElement(['', $faker->text(5)]),
'route_leg' => $faker->randomElement(['', $faker->numberBetween(0, 1000)]),
'dpt_airport_id' => function () {
return factory(\App\Models\Airport::class)->create()->id;
},
'arr_airport_id' => function () {
return factory(App\Models\Airport::class)->create()->id;
return factory(\App\Models\Airport::class)->create()->id;
},
'alt_airport_id' => function () {
return factory(App\Models\Airport::class)->create()->id;
return factory(\App\Models\Airport::class)->create()->id;
},
'route' => $faker->randomElement(['', $faker->text(5)]),
'dpt_time' => $faker->time(),
'arr_time' => $faker->time(),
'flight_time' => $faker->randomFloat(2),
'has_bid' => false,
'active' => true,
'created_at' => $faker->dateTimeBetween('-1 week', 'now'),
'updated_at' => function (array $pirep) {
return $pirep['created_at'];
'distance' => $faker->numberBetween(1, 1000),
'route' => null,
'level' => 0,
'dpt_time' => $faker->time(),
'arr_time' => $faker->time(),
'flight_time' => $faker->numberBetween(60, 360),
'load_factor' => $faker->randomElement([15, 20, 50, 90, 100]),
'load_factor_variance' => $faker->randomElement([15, 20, 50, 90, 100]),
'has_bid' => false,
'active' => true,
'visible' => true,
'days' => 0,
'start_date' => null,
'end_date' => null,
'created_at' => $faker->dateTimeBetween('-1 week', 'now'),
'updated_at' => static function (array $flight) {
return $flight['created_at'];
},
];
});

View File

@@ -0,0 +1,9 @@
<?php
use Faker\Generator as Faker;
$factory->define(App\Models\Journal::class, function (Faker $faker) {
return [
'currency' => 'USD',
];
});

View File

@@ -0,0 +1,17 @@
<?php
use Faker\Generator as Faker;
$factory->define(App\Models\JournalTransactions::class, function (Faker $faker) {
return [
'transaction_group' => \Ramsey\Uuid\Uuid::uuid4()->toString(),
'journal_id' => function () {
return factory(\App\Models\Journal::class)->create()->id;
},
'credit' => $faker->numberBetween(100, 10000),
'debit' => $faker->numberBetween(100, 10000),
'currency' => 'USD',
'memo' => $faker->sentence(6),
'post_date' => \Carbon\Carbon::now(),
];
});

Some files were not shown because too many files have changed in this diff Show More