Compare commits

..
Author SHA1 Message Date
Nabeel Shahzad e2bcd72e39 Flight history #807 2020-09-08 09:29:46 -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]andNabeel S 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 CabalandJorge 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 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
3328 changed files with 64218 additions and 14320 deletions
+1
View File
@@ -29,6 +29,7 @@ env.php
#Homestead.yaml #Homestead.yaml
Homestead.json Homestead.json
LocalValetDriver.php LocalValetDriver.php
docker-compose-profiler.yml
# Rocketeer PHP task runner and deployment package. https://github.com/rocketeers/rocketeer # Rocketeer PHP task runner and deployment package. https://github.com/rocketeers/rocketeer
.rocketeer/ .rocketeer/
+9 -9
View File
@@ -4,13 +4,12 @@
language: php language: php
php: php:
- '7.2'
- '7.3'
- '7.4' - '7.4'
- '7.3'
env: #env:
- DB=mysql # - DB=mysql
- DB=mariadb # - DB=mariadb
cache: cache:
# Cache lives for 10 min # Cache lives for 10 min
@@ -23,13 +22,14 @@ cache:
services: services:
- mysql - mysql
addons: #addons:
mariadb: '10.2' # mariadb: '10.2'
install: install:
- php --version - php --version
- mysql --version - mysql --version
- composer install --dev --no-interaction --verbose - composer install --dev --no-interaction --verbose
- npm i tar-to-zip -g
- cp .travis/env.travis.php env.php - cp .travis/env.travis.php env.php
- cp .travis/phpunit.travis.xml phpunit.xml - cp .travis/phpunit.travis.xml phpunit.xml
@@ -136,7 +136,7 @@ jobs:
on: on:
all_branches: true all_branches: true
repo: nabeelio/phpvms repo: nabeelio/phpvms
php: '7.2' php: '7.4'
tags: false tags: false
# RELEASE STAGE # RELEASE STAGE
@@ -157,4 +157,4 @@ jobs:
on: on:
tags: true tags: true
repo: nabeelio/phpvms repo: nabeelio/phpvms
php: '7.2' php: '7.4'
+147 -129
View File
@@ -1,132 +1,150 @@
#!/usr/bin/env bash #!/usr/bin/env bash
if [ "$TRAVIS" = "true" ]; then if [ "$TRAVIS" != "true" ]; then
exit 0
cd $TRAVIS_BUILD_DIR
if test "$TRAVIS_TAG"; then
PKG_NAME=$TRAVIS_TAG
VERSION=$TRAVIS_TAG
# Pass in the tag as the version to write out
php artisan phpvms:version --write $VERSION
else
echo "On branch $TRAVIS_BRANCH"
if [ "$TRAVIS_BRANCH" != "master" ] && [ "$TRAVIS_BRANCH" != "dev" ]; then
echo "Not on valid branch, exiting"
exit 0
fi
# Write the version out but place the branch ID in there
# This is only for the dev branch
BASE_VERSION=$(php artisan phpvms:version --base-only)
# This now includes the pre-release version, so "-dev" by default
PKG_NAME=${BASE_VERSION}
# Don't pass in a version here, just write out the latest hash
php artisan phpvms:version --write >VERSION
VERSION=$(cat VERSION)
fi
echo "Version: $VERSION"
echo "Package name: $TAR_NAME"
FILE_NAME="phpvms-$PKG_NAME"
TAR_NAME="$FILE_NAME.tar.gz"
echo "Cleaning files"
rm -rf vendor
composer install --no-dev --prefer-dist --no-interaction --verbose
# 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
# Regenerate the autoloader and classes
composer dump-autoload
make clean
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
# Upload the version for a tagged release. Move to a version file in different
# tags. Within phpVMS, we have an option of which version to track in the admin
if test "$TRAVIS_TAG"; then
echo "Uploading release version file"
cp "$TRAVIS_BUILD_DIR/VERSION" release_version
artifacts upload --target-paths "/" release_version
else
echo "Uploading ${TRAVIS_BRANCH}_version file"
cp $TRAVIS_BUILD_DIR/VERSION ${TRAVIS_BRANCH}_version
artifacts upload --target-paths "/" ${TRAVIS_BRANCH}_version
fi
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 fi
cd $TRAVIS_BUILD_DIR
if test "$TRAVIS_TAG"; then
VERSION=$TRAVIS_TAG
# Pass in the tag as the version to write out
php artisan phpvms:version --write --write-full-version "${VERSION}"
FULL_VERSION=$(php artisan phpvms:version)
else
echo "On branch $TRAVIS_BRANCH"
if [ "$TRAVIS_BRANCH" != "master" ] && [ "$TRAVIS_BRANCH" != "dev" ]; then
echo "Not on valid branch, exiting"
exit 0
fi
# Write the version out but place the branch ID in there
# This is only for the dev branch
BASE_VERSION=$(php artisan phpvms:version --base-only)
# This now includes the pre-release version, so "-dev" by default
VERSION=${BASE_VERSION}
# Don't pass in a version here, just write out the latest hash
php artisan phpvms:version --write "${VERSION}"
FULL_VERSION=$(php artisan phpvms:version)
fi
FILE_NAME="phpvms-${VERSION}"
TAR_NAME="$FILE_NAME.tar.gz"
ZIP_NAME="$FILE_NAME.zip"
echo "Version: ${VERSION}"
echo "Full Version: ${FULL_VERSION}"
echo "Package name: ${TAR_NAME}"
echo "==========================="
echo "Cleaning files"
rm -rf vendor
composer install --no-dev --prefer-dist --no-interaction --verbose
# 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
# Regenerate the autoloader and classes
composer dump-autoload
make clean
cd /tmp
ls -al $TRAVIS_BUILD_DIR/../
tar -czf $TAR_NAME -C $TRAVIS_BUILD_DIR .
sha256sum $TAR_NAME >"$TAR_NAME.sha256"
tar2zip $TAR_NAME
sha256sum $ZIP_NAME >"$ZIP_NAME.sha256"
ls -al /tmp
echo "Uploading to S3"
mkdir -p $TRAVIS_BUILD_DIR/build
cd $TRAVIS_BUILD_DIR/build
mv "/tmp/$TAR_NAME" "/tmp/$ZIP_NAME" "/tmp/$TAR_NAME.sha256" "/tmp/$ZIP_NAME.sha256" .
artifacts upload --target-paths "/" $ZIP_NAME $TAR_NAME $TRAVIS_BUILD_DIR/VERSION $TAR_NAME.sha256 $ZIP_NAME.sha256
# Upload the version for a tagged release. Move to a version file in different
# tags. Within phpVMS, we have an option of which version to track in the admin
if test "$TRAVIS_TAG"; then
echo "Uploading release version file"
cp "$TRAVIS_BUILD_DIR/VERSION" release_version
artifacts upload --target-paths "/" release_version
else
echo "Uploading ${TRAVIS_BRANCH}_version file"
cp $TRAVIS_BUILD_DIR/VERSION ${TRAVIS_BRANCH}_version
artifacts upload --target-paths "/" ${TRAVIS_BRANCH}_version
fi
#if [ "$TRAVIS_BRANCH" != "master" ] && [ "$TRAVIS_BRANCH" != "dev" ]; then
# echo "Skipping Discord branch update broadcast"
#else
curl -X POST \
--data "{\"content\": \"A new build is available at http://downloads.phpvms.net/$TAR_NAME (${FULL_VERSION})\"}" \
-H "Content-Type: application/json" \
$DISCORD_WEBHOOK_URL
#fi
+2 -2
View File
@@ -21,9 +21,9 @@
<directory suffix=".php">./app</directory> <directory suffix=".php">./app</directory>
</whitelist> </whitelist>
</filter> </filter>
<listeners> <!--<listeners>
<listener class="NunoMaduro\Collision\Adapters\Phpunit\Listener"/> <listener class="NunoMaduro\Collision\Adapters\Phpunit\Listener"/>
</listeners> </listeners>-->
<php> <php>
<ini name="error_reporting" value="E_ALL"/> <ini name="error_reporting" value="E_ALL"/>
<ini name="display_errors" value="On"/> <ini name="display_errors" value="On"/>
+703 -6
View File
@@ -1,9 +1,706 @@
## Beta 2 (7.0.0-beta.2) # Changelog
- Switching to semver ## [7.0.0-beta.4](https://github.com/nabeelio/phpvms/tree/7.0.0-beta.4) (2020-05-09)
- PHP 7.2 minimum
- Lots of fixes, view the [Github Milestone](https://github.com/nabeelio/phpvms/milestone/2?closed=1) for details
## Beta 1 (v7.0.0-beta) [Full Changelog](https://github.com/nabeelio/phpvms/compare/7.0.0-beta.3...7.0.0-beta.4)
- 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)*
+4 -4
View File
@@ -43,7 +43,7 @@ build:
# This is to build all the stylesheets, etc # This is to build all the stylesheets, etc
.PHONY: build-assets .PHONY: build-assets
build-assets: build-assets:
yarn run production npm run production
.PHONY: install .PHONY: install
install: build install: build
@@ -75,12 +75,12 @@ tests: test
.PHONY: test .PHONY: test
test: test:
#php artisan database:create --reset @#php artisan database:create --reset
vendor/bin/phpunit --debug --verbose @vendor/bin/phpunit --verbose
.PHONY: phpcs .PHONY: phpcs
phpcs: phpcs:
@vendor/bin/php-cs-fixer fix --config=.php_cs -v --diff --dry-run @vendor/bin/php-cs-fixer fix --config=.php_cs -v --diff --diff-format=udiff --dry-run
#.PHONY: phpstan #.PHONY: phpstan
#phpstan: #phpstan:
+1 -1
View File
@@ -14,7 +14,7 @@ A full distribution, with all of the composer dependencies, is available at this
## Requirements ## Requirements
- PHP 7.1+, extensions: - PHP 7.3+, extensions:
- cURL - cURL
- JSON - JSON
- mbstring - mbstring
+2 -2
View File
@@ -3,7 +3,7 @@
namespace App\Console\Commands; namespace App\Console\Commands;
use App\Contracts\Command; use App\Contracts\Command;
use App\Facades\Utils; use App\Support\Units\Time;
use GuzzleHttp\Client; use GuzzleHttp\Client;
use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Collection;
@@ -64,7 +64,7 @@ class AcarsReplay extends Command
protected function startPirep($flight): string protected function startPirep($flight): string
{ {
// convert the planned flight time to be completely in minutes // convert the planned flight time to be completely in minutes
$pft = Utils::hoursToMinutes( $pft = Time::hoursToMinutes(
$flight->planned_hrsenroute, $flight->planned_hrsenroute,
$flight->planned_minenroute $flight->planned_minenroute
); );
+41
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();
}
}
+10 -3
View File
@@ -79,6 +79,13 @@ class CreateDatabase extends Command
*/ */
protected function create_sqlite($dbkey) protected function create_sqlite($dbkey)
{ {
$dbPath = config($dbkey.'database');
// Skip if running in memory
if ($dbPath === ':memory:') {
return;
}
$exec = 'sqlite3'; $exec = 'sqlite3';
if ($this->os->isWindowsLike()) { if ($this->os->isWindowsLike()) {
$exec = 'sqlite3.exe'; $exec = 'sqlite3.exe';
@@ -89,11 +96,11 @@ class CreateDatabase extends Command
$this->runCommand($cmd); $this->runCommand($cmd);
} }
if (!file_exists(config($dbkey.'database'))) { if (!file_exists($dbPath)) {
$cmd = [ $cmd = [
$exec, $exec,
config($dbkey.'database'), $dbPath,
'""', '".exit"',
]; ];
$this->runCommand($cmd); $this->runCommand($cmd);
+12
View File
@@ -7,6 +7,7 @@ use App\Models\Acars;
use App\Models\Airline; use App\Models\Airline;
use App\Models\Pirep; use App\Models\Pirep;
use App\Models\User; use App\Models\User;
use App\Notifications\Messages\UserRegistered;
use App\Repositories\AcarsRepository; use App\Repositories\AcarsRepository;
use App\Services\AirportService; use App\Services\AirportService;
use App\Services\AwardService; use App\Services\AwardService;
@@ -60,6 +61,7 @@ class DevCommands extends Command
'metar' => 'getMetar', 'metar' => 'getMetar',
'recalculate-stats' => 'recalculateStats', 'recalculate-stats' => 'recalculateStats',
'reset-install' => 'resetInstall', 'reset-install' => 'resetInstall',
'new-user-email' => 'newUserEmail',
'xml-to-yaml' => 'xmlToYaml', 'xml-to-yaml' => 'xmlToYaml',
]; ];
@@ -290,6 +292,16 @@ class DevCommands extends Command
$this->info('Done!'); $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 public function liveFlights(): void
{ {
$acarsRepo = app(AcarsRepository::class); $acarsRepo = app(AcarsRepository::class);
+4 -3
View File
@@ -34,7 +34,7 @@ class Version extends Command
// If a version is being passed in, the update the build, etc data against this // If a version is being passed in, the update the build, etc data against this
if ($this->argument('version')) { if ($this->argument('version')) {
$version = \SemVer\SemVer\Version::fromString($this->argument('version')); $version = \SemVer\SemVer\Version::fromString($this->argument('version'));
if ($this->option('write_full_version')) { if ($this->option('write-full-version')) {
$cfg['current']['major'] = $version->getMajor(); $cfg['current']['major'] = $version->getMajor();
$cfg['current']['minor'] = $version->getMinor(); $cfg['current']['minor'] = $version->getMinor();
$cfg['current']['patch'] = $version->getPatch(); $cfg['current']['patch'] = $version->getPatch();
@@ -51,14 +51,15 @@ class Version extends Command
} }
// Always write out the build ID/build number which is the commit hash // Always write out the build ID/build number which is the commit hash
$build_number = $this->versionSvc->getBuildId($cfg); $build_number = $this->versionSvc->generateBuildId($cfg);
$cfg['current']['commit'] = $build_number; $cfg['current']['commit'] = $build_number;
$cfg['build']['number'] = $build_number; $cfg['build']['number'] = $build_number;
file_put_contents($version_file, Yaml::dump($cfg, 4, 2)); file_put_contents($version_file, Yaml::dump($cfg, 4, 2));
} }
$version = $this->versionSvc->getCurrentVersion(!$this->option('base-only')); $incl_build = empty($this->option('base-only')) ? true : false;
$version = $this->versionSvc->getCurrentVersion($incl_build);
echo $version."\n"; echo $version."\n";
} }
} }
+1 -1
View File
@@ -2,10 +2,10 @@
namespace App\Contracts; namespace App\Contracts;
use App\Facades\Utils;
use App\Models\Award as AwardModel; use App\Models\Award as AwardModel;
use App\Models\User; use App\Models\User;
use App\Models\UserAward; use App\Models\UserAward;
use App\Support\Utils;
use Exception; use Exception;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
+7 -6
View File
@@ -3,6 +3,7 @@
namespace App\Contracts; namespace App\Contracts;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use function is_array;
use Symfony\Component\Process\Process; use Symfony\Component\Process\Process;
/** /**
@@ -82,9 +83,9 @@ abstract class Command extends \Illuminate\Console\Command
} }
/** /**
* @param $cmd * @param array|string $cmd
* @param bool $return * @param bool $return
* @param mixed $verbose * @param mixed $verbose
* *
* @throws \Symfony\Component\Process\Exception\RuntimeException * @throws \Symfony\Component\Process\Exception\RuntimeException
* @throws \Symfony\Component\Process\Exception\LogicException * @throws \Symfony\Component\Process\Exception\LogicException
@@ -93,16 +94,16 @@ abstract class Command extends \Illuminate\Console\Command
*/ */
public function runCommand($cmd, $return = false, $verbose = true): string public function runCommand($cmd, $return = false, $verbose = true): string
{ {
if (\is_array($cmd)) { if (is_array($cmd)) {
$cmd = implode(' ', $cmd); $cmd = implode(' ', $cmd);
} }
if ($verbose) { if ($verbose) {
$this->info('Running "'.$cmd.'"'); $this->info('Running '.$cmd);
} }
$val = ''; $val = '';
$process = new Process($cmd); $process = Process::fromShellCommandline($cmd);
$process->run(function ($type, $buffer) use ($return, &$val) { $process->run(function ($type, $buffer) use ($return, &$val) {
if ($return) { if ($return) {
$val .= $buffer; $val .= $buffer;
+10
View File
@@ -0,0 +1,10 @@
<?php
namespace App\Contracts;
use Illuminate\View\View;
abstract class Composer
{
abstract public function compose(View $view);
}
+2 -1
View File
@@ -6,6 +6,7 @@ use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Laracasts\Flash\Flash;
/** /**
* Class Controller * Class Controller
@@ -26,7 +27,7 @@ abstract class Controller extends \Illuminate\Routing\Controller
*/ */
public function flashError($message, $route) public function flashError($message, $route)
{ {
flash()->error($message); Flash::error($message);
return redirect(route($route))->withInput(); return redirect(route($route))->withInput();
} }
+6 -1
View File
@@ -46,7 +46,12 @@ abstract class Enum
final public static function label($value) final public static function label($value)
{ {
if (isset(static::$labels[$value])) { if (isset(static::$labels[$value])) {
return trans(static::$labels[$value]); $val = static::$labels[$value];
if (strpos($val, '.') !== false) {
return trans($val);
}
return $val;
} }
} }
+12
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;
}
+20 -5
View File
@@ -2,15 +2,16 @@
namespace App\Contracts; namespace App\Contracts;
/** use Illuminate\Validation\Rule;
* Class FormRequest
*/
class FormRequest extends \Illuminate\Foundation\Http\FormRequest class FormRequest extends \Illuminate\Foundation\Http\FormRequest
{ {
/** /**
* Authorized by default
*
* @return bool * @return bool
*/ */
public function authorize() public function authorize(): bool
{ {
return true; return true;
} }
@@ -18,8 +19,22 @@ class FormRequest extends \Illuminate\Foundation\Http\FormRequest
/** /**
* @return array * @return array
*/ */
public function rules() public function rules(): array
{ {
return []; return [];
} }
/**
* Set a given column as being unique
*
* @param $table
*
* @return array
*/
public function unique($table)
{
return [
Rule::unique($table)->ignore($this->id, 'id'),
];
}
} }
+1 -1
View File
@@ -16,7 +16,7 @@ abstract class Listener
public function subscribe(Dispatcher $events): void public function subscribe(Dispatcher $events): void
{ {
foreach (static::$callbacks as $klass => $cb) { foreach (static::$callbacks as $klass => $cb) {
$events->listen($klass, get_class($this).'@'.$cb); $events->listen($klass, static::class.'@'.$cb);
} }
} }
} }
+1 -1
View File
@@ -13,7 +13,7 @@ abstract class Model extends \Illuminate\Database\Eloquent\Model
/** /**
* Max length of ID for string columns * Max length of ID for string columns
*/ */
public const ID_MAX_LENGTH = 12; public const ID_MAX_LENGTH = 16;
/** /**
* For the factories, skip the mutators. Only apply to one instance * For the factories, skip the mutators. Only apply to one instance
@@ -1,26 +1,26 @@
<?php <?php
namespace App\Notifications; namespace App\Contracts;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
class BaseNotification extends Notification implements ShouldQueue class Notification extends \Illuminate\Notifications\Notification implements ShouldQueue
{ {
use Queueable; use Queueable;
public $channels = []; public $channels = [];
public $requires_opt_in = false;
public function __construct() public function __construct()
{ {
// Look in the notifications.channels config and see where this particular // Look in the notifications.channels config and see where this particular
// notification can go. Map it to $channels // notification can go. Map it to $channels
$klass = get_class($this); $klass = static::class;
$notif_config = config('notifications.channels', []); $notif_config = config('notifications.channels', []);
if (!array_key_exists($klass, $notif_config)) { if (!array_key_exists($klass, $notif_config)) {
Log::error('Notification type '.$klass.' missing from notifications config'); Log::error('Notification type '.$klass.' missing from notifications config, defaulting to mail');
return; return;
} }
+4
View File
@@ -5,6 +5,10 @@ namespace App\Contracts;
use Illuminate\Validation\Validator; use Illuminate\Validation\Validator;
use Prettus\Repository\Eloquent\BaseRepository; use Prettus\Repository\Eloquent\BaseRepository;
/**
* @mixin Model
* @mixin BaseRepository
*/
abstract class Repository extends BaseRepository abstract class Repository extends BaseRepository
{ {
/** /**
@@ -1,14 +1,13 @@
<?php <?php
namespace App\Http\Resources; namespace App\Contracts;
use App\Contracts\Unit; use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Http\Resources\Json\Resource;
/** /**
* Class Response * Base class for a resource/response
*/ */
class Response extends Resource class Resource extends JsonResource
{ {
/** /**
* Iterate through the list of $fields and check if they're a "Unit" * Iterate through the list of $fields and check if they're a "Unit"
+1 -1
View File
@@ -59,7 +59,7 @@ class Unit implements ArrayAccess
{ {
$response = []; $response = [];
foreach ($this->responseUnits as $unit) { foreach ($this->responseUnits as $unit) {
$response[$unit] = $this[$unit]; $response[$unit] = $this[$unit] ?? 0;
} }
return $response; return $response;
+28
View File
@@ -0,0 +1,28 @@
<?php
namespace App\Cron\Nightly;
use App\Contracts\Listener;
use App\Events\CronNightly;
use App\Services\SimBriefService;
/**
* 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
{
$this->simbriefSvc->removeExpiredEntries();
}
}
+8 -5
View File
@@ -4,6 +4,7 @@ namespace App\Cron\Nightly;
use App\Contracts\Listener; use App\Contracts\Listener;
use App\Events\CronNightly; use App\Events\CronNightly;
use App\Services\AircraftService;
use App\Services\UserService; use App\Services\UserService;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
@@ -12,11 +13,13 @@ use Illuminate\Support\Facades\Log;
*/ */
class RecalculateStats extends Listener class RecalculateStats extends Listener
{ {
private $aircraftSvc;
private $userSvc; private $userSvc;
public function __construct(UserService $userService) public function __construct(AircraftService $aircraftSvc, UserService $userSvc)
{ {
$this->userSvc = $userService; $this->aircraftSvc = $aircraftSvc;
$this->userSvc = $userSvc;
} }
/** /**
@@ -29,10 +32,10 @@ class RecalculateStats extends Listener
*/ */
public function handle(CronNightly $event): void public function handle(CronNightly $event): void
{ {
Log::info('Recalculating balances'); Log::info('Recalculating user stats');
$this->userSvc->recalculateAllUserStats(); $this->userSvc->recalculateAllUserStats();
Log::info('Done recalculating stats'); Log::info('Recalcuating aircraft status');
$this->aircraftSvc->recalculateStats();
} }
} }
+11 -5
View File
@@ -1,24 +1,30 @@
<?php <?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; use Faker\Generator as Faker;
$factory->define(App\Models\Aircraft::class, function (Faker $faker) { $factory->define(App\Models\Aircraft::class, function (Faker $faker) {
return [ return [
'id' => null, 'id' => null,
'subfleet_id' => function () { 'subfleet_id' => function () {
return factory(App\Models\Subfleet::class)->create()->id; return factory(Subfleet::class)->create()->id;
}, },
'airport_id' => function () { 'airport_id' => function () {
return factory(App\Models\Airport::class)->create()->id; return factory(Airport::class)->create()->id;
}, },
'iata' => $faker->unique()->text(5), 'iata' => $faker->unique()->text(5),
'icao' => $faker->unique()->text(5), 'icao' => $faker->unique()->text(5),
'name' => $faker->text(50), 'name' => $faker->text(50),
'registration' => $faker->unique()->text(10), 'registration' => $faker->unique()->text(10),
'hex_code' => \App\Support\ICAO::createHexCode(), 'hex_code' => ICAO::createHexCode(),
'mtow' => $faker->randomFloat(2, 0, 50000),
'zfw' => $faker->randomFloat(2, 0, 50000), 'zfw' => $faker->randomFloat(2, 0, 50000),
'status' => \App\Models\Enums\AircraftStatus::ACTIVE, 'status' => AircraftStatus::ACTIVE,
'state' => \App\Models\Enums\AircraftState::PARKED, 'state' => AircraftState::PARKED,
'created_at' => $faker->dateTimeBetween('-1 week', 'now'), 'created_at' => $faker->dateTimeBetween('-1 week', 'now'),
'updated_at' => function (array $pirep) { 'updated_at' => function (array $pirep) {
return $pirep['created_at']; return $pirep['created_at'];
+1 -1
View File
@@ -9,7 +9,7 @@ use Hashids\Hashids;
$factory->define(App\Models\Airline::class, function (Faker $faker) { $factory->define(App\Models\Airline::class, function (Faker $faker) {
return [ return [
'id' => null, 'id' => null,
'icao' => function (array $apt) use ($faker) { 'icao' => function (array $apt) {
$hashids = new Hashids(microtime(), 5); $hashids = new Hashids(microtime(), 5);
$mt = str_replace('.', '', microtime(true)); $mt = str_replace('.', '', microtime(true));
+20 -18
View File
@@ -8,34 +8,36 @@ $factory->define(App\Models\Flight::class, function (Faker $faker) {
return [ return [
'id' => $faker->unique()->numberBetween(10, 10000000), 'id' => $faker->unique()->numberBetween(10, 10000000),
'airline_id' => function () { 'airline_id' => function () {
return factory(App\Models\Airline::class)->create()->id; return factory(\App\Models\Airline::class)->create()->id;
}, },
'flight_number' => $faker->unique()->numberBetween(10, 1000000), 'flight_number' => $faker->unique()->numberBetween(10, 1000000),
'route_code' => $faker->randomElement(['', $faker->text(5)]), 'route_code' => $faker->randomElement(['', $faker->text(5)]),
'route_leg' => $faker->randomElement(['', $faker->numberBetween(0, 1000)]), 'route_leg' => $faker->randomElement(['', $faker->numberBetween(0, 1000)]),
'dpt_airport_id' => function () { 'dpt_airport_id' => function () {
return factory(App\Models\Airport::class)->create()->id; return factory(\App\Models\Airport::class)->create()->id;
}, },
'arr_airport_id' => function () { 'arr_airport_id' => function () {
return factory(App\Models\Airport::class)->create()->id; return factory(\App\Models\Airport::class)->create()->id;
}, },
'alt_airport_id' => function () { 'alt_airport_id' => function () {
return factory(App\Models\Airport::class)->create()->id; return factory(\App\Models\Airport::class)->create()->id;
}, },
'distance' => $faker->numberBetween(1, 1000), 'distance' => $faker->numberBetween(1, 1000),
'route' => null, 'route' => null,
'level' => 0, 'level' => 0,
'dpt_time' => $faker->time(), 'dpt_time' => $faker->time(),
'arr_time' => $faker->time(), 'arr_time' => $faker->time(),
'flight_time' => $faker->numberBetween(60, 360), 'flight_time' => $faker->numberBetween(60, 360),
'has_bid' => false, 'load_factor' => $faker->randomElement([15, 20, 50, 90, 100]),
'active' => true, 'load_factor_variance' => $faker->randomElement([15, 20, 50, 90, 100]),
'visible' => true, 'has_bid' => false,
'days' => 0, 'active' => true,
'start_date' => null, 'visible' => true,
'end_date' => null, 'days' => 0,
'created_at' => $faker->dateTimeBetween('-1 week', 'now'), 'start_date' => null,
'updated_at' => static function (array $flight) { 'end_date' => null,
'created_at' => $faker->dateTimeBetween('-1 week', 'now'),
'updated_at' => static function (array $flight) {
return $flight['created_at']; return $flight['created_at'];
}, },
]; ];
@@ -6,7 +6,7 @@ $factory->define(App\Models\JournalTransactions::class, function (Faker $faker)
return [ return [
'transaction_group' => \Ramsey\Uuid\Uuid::uuid4()->toString(), 'transaction_group' => \Ramsey\Uuid\Uuid::uuid4()->toString(),
'journal_id' => function () { 'journal_id' => function () {
return factory(App\Models\Journal::class)->create()->id; return factory(\App\Models\Journal::class)->create()->id;
}, },
'credit' => $faker->numberBetween(100, 10000), 'credit' => $faker->numberBetween(100, 10000),
'debit' => $faker->numberBetween(100, 10000), 'debit' => $faker->numberBetween(100, 10000),
+1 -1
View File
@@ -6,7 +6,7 @@ $factory->define(App\Models\News::class, function (Faker $faker) {
return [ return [
'id' => null, 'id' => null,
'user_id' => function () { 'user_id' => function () {
return factory(App\Models\User::class)->create()->id; return factory(\App\Models\User::class)->create()->id;
}, },
'subject' => $faker->text(), 'subject' => $faker->text(),
'body' => $faker->sentence, 'body' => $faker->sentence,
+4 -4
View File
@@ -10,8 +10,8 @@ use Faker\Generator as Faker;
* Create a new PIREP * Create a new PIREP
*/ */
$factory->define(App\Models\Pirep::class, function (Faker $faker) { $factory->define(App\Models\Pirep::class, function (Faker $faker) {
$airline = factory(App\Models\Airline::class)->create(); $airline = factory(\App\Models\Airline::class)->create();
$flight = factory(App\Models\Flight::class)->create([ $flight = factory(\App\Models\Flight::class)->create([
'airline_id' => $airline->id, 'airline_id' => $airline->id,
]); ]);
@@ -21,10 +21,10 @@ $factory->define(App\Models\Pirep::class, function (Faker $faker) {
return $airline->id; return $airline->id;
}, },
'user_id' => function () { 'user_id' => function () {
return factory(App\Models\User::class)->create()->id; return factory(\App\Models\User::class)->create()->id;
}, },
'aircraft_id' => function () { 'aircraft_id' => function () {
return factory(App\Models\Aircraft::class)->create()->id; return factory(\App\Models\Aircraft::class)->create()->id;
}, },
'flight_id' => function () use ($flight) { 'flight_id' => function () use ($flight) {
return $flight->id; return $flight->id;
@@ -0,0 +1,21 @@
<?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use Carbon\Carbon;
use Faker\Generator as Faker;
$factory->define(App\Models\SimBrief::class, function (Faker $faker) {
return [
'id' => $faker->unique()->numberBetween(10, 10000000),
'user_id' => null,
'flight_id' => null,
'pirep_id' => null,
'acars_xml' => '',
'ofp_xml' => '',
'created_at' => Carbon::now('UTC')->toDateTimeString(),
'updated_at' => function (array $sb) {
return $sb['created_at'];
},
];
});
+1 -1
View File
@@ -6,7 +6,7 @@ $factory->define(App\Models\Subfleet::class, function (Faker $faker) {
return [ return [
'id' => null, 'id' => null,
'airline_id' => function () { 'airline_id' => function () {
return factory(App\Models\Airline::class)->create()->id; return factory(\App\Models\Airline::class)->create()->id;
}, },
'name' => $faker->unique()->text(50), 'name' => $faker->unique()->text(50),
'type' => $faker->unique()->text(7), 'type' => $faker->unique()->text(7),
+4 -2
View File
@@ -1,20 +1,22 @@
<?php <?php
use App\Models\Airline;
use App\Models\Enums\UserState; use App\Models\Enums\UserState;
use Faker\Generator as Faker; use Faker\Generator as Faker;
use Illuminate\Support\Facades\Hash;
$factory->define(App\Models\User::class, function (Faker $faker) { $factory->define(App\Models\User::class, function (Faker $faker) {
static $password; static $password;
return [ return [
'id' => null, 'id' => null,
'pilot_id' => 0, 'pilot_id' => null,
'name' => $faker->name, 'name' => $faker->name,
'email' => $faker->safeEmail, 'email' => $faker->safeEmail,
'password' => $password ?: $password = Hash::make('secret'), 'password' => $password ?: $password = Hash::make('secret'),
'api_key' => $faker->sha1, 'api_key' => $faker->sha1,
'airline_id' => function () { 'airline_id' => function () {
return factory(App\Models\Airline::class)->create()->id; return factory(Airline::class)->create()->id;
}, },
'rank_id' => 1, 'rank_id' => 1,
'flights' => $faker->numberBetween(0, 1000), 'flights' => $faker->numberBetween(0, 1000),
@@ -1,6 +1,7 @@
<?php <?php
use App\Contracts\Migration; use App\Contracts\Migration;
use App\Models\Pirep;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
@@ -24,7 +25,7 @@ class CreateUsersTable extends Migration
$table->string('country', 2)->nullable(); $table->string('country', 2)->nullable();
$table->string('home_airport_id', 5)->nullable(); $table->string('home_airport_id', 5)->nullable();
$table->string('curr_airport_id', 5)->nullable(); $table->string('curr_airport_id', 5)->nullable();
$table->string('last_pirep_id', \App\Models\Pirep::ID_MAX_LENGTH)->nullable(); $table->string('last_pirep_id', Pirep::ID_MAX_LENGTH)->nullable();
$table->unsignedBigInteger('flights')->default(0); $table->unsignedBigInteger('flights')->default(0);
$table->unsignedBigInteger('flight_time')->nullable()->default(0); $table->unsignedBigInteger('flight_time')->nullable()->default(0);
$table->unsignedBigInteger('transfer_time')->nullable()->default(0); $table->unsignedBigInteger('transfer_time')->nullable()->default(0);
@@ -1,6 +1,7 @@
<?php <?php
use App\Contracts\Migration; use App\Contracts\Migration;
use App\Contracts\Model;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
@@ -14,8 +15,8 @@ class CreateAcarsTables extends Migration
public function up() public function up()
{ {
Schema::create('acars', function (Blueprint $table) { Schema::create('acars', function (Blueprint $table) {
$table->string('id', 12); $table->string('id', Model::ID_MAX_LENGTH);
$table->string('pirep_id', \App\Contracts\Model::ID_MAX_LENGTH); $table->string('pirep_id', Model::ID_MAX_LENGTH);
$table->unsignedTinyInteger('type'); $table->unsignedTinyInteger('type');
$table->unsignedInteger('nav_type')->nullable(); $table->unsignedInteger('nav_type')->nullable();
$table->unsignedInteger('order')->default(0); $table->unsignedInteger('order')->default(0);
@@ -2,6 +2,7 @@
use App\Contracts\Migration; use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateStatsTable extends Migration class CreateStatsTable extends Migration
{ {
@@ -22,28 +23,6 @@ class CreateStatsTable extends Migration
$table->primary('id'); $table->primary('id');
$table->timestamps(); $table->timestamps();
}); });
/*$this->addCounterGroups([
'flights' => 1,
]);
$stats = [
[
'id' => $this->formatSettingId('flights.total_flights'),
'order' => $this->getNextOrderNumber('flights'),
'value' => 0,
'type' => 'int',
'description' => 'Total number of flights in the VA',
],
[
'id' => $this->formatSettingId('flights.total_time'),
'order' => $this->getNextOrderNumber('flights'),
'value' => 0,
'type' => 'int',
'description' => 'Total number of hours in the VA',
],
];
$this->addData('stats', $stats);*/
} }
/** /**
@@ -53,6 +32,6 @@ class CreateStatsTable extends Migration
*/ */
public function down() public function down()
{ {
Schema::dropIfExists('settings'); Schema::dropIfExists('stats');
} }
} }
@@ -2,6 +2,7 @@
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
class AddReadonlyToRoles extends Migration class AddReadonlyToRoles extends Migration
@@ -18,7 +18,7 @@ class UsersAddPilotId extends Migration
*/ */
public function up() public function up()
{ {
Schema::table('users', function (Blueprint $table) { Schema::table('users', static function (Blueprint $table) {
$table->unsignedBigInteger('pilot_id') $table->unsignedBigInteger('pilot_id')
->after('id') ->after('id')
->unique() ->unique()
@@ -26,8 +26,7 @@ class UsersAddPilotId extends Migration
->index('users_pilot_id'); ->index('users_pilot_id');
}); });
// Migrate the current pilot IDs DB::table('users')->update(['pilot_id' => DB::raw('`id`')]);
DB::update('UPDATE `users` SET `pilot_id`=`id`');
} }
/** /**
@@ -16,8 +16,9 @@ class PirepsChangeStateType extends Migration
public function up() public function up()
{ {
// Migrate the old rejected state // Migrate the old rejected state
DB::update('UPDATE `pireps` SET `state`='.PirepState::REJECTED DB::table('pireps')
.' WHERE state=-1'); ->where(['state' => -1])
->update(['state' => PirepState::REJECTED]);
// Change the column type to an unsigned small int (tinyint not supported on all) // Change the column type to an unsigned small int (tinyint not supported on all)
Schema::table('pireps', function (Blueprint $table) { Schema::table('pireps', function (Blueprint $table) {
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class ExpensesAddFlightType extends Migration
{
/**
* Add a `flight_type` column to the expenses table
*/
public function up()
{
Schema::table('expenses', function (Blueprint $table) {
$table->string('flight_type', 50)
->nullable()
->after('type');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('expenses', function (Blueprint $table) {
$table->dropColumn('flight_type');
});
}
}
@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
/**
* Turn the airport coordinates and other lat/lon coords into decimal type
*/
class ModifyAirportsCoordinates extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('acars', function ($table) {
$table->decimal('lat', 10, 5)->change()->default(0.0)->nullable();
$table->decimal('lon', 11, 5)->change()->default(0.0)->nullable();
});
Schema::table('airports', function ($table) {
$table->decimal('lat', 10, 5)->change()->default(0.0)->nullable();
$table->decimal('lon', 11, 5)->change()->default(0.0)->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
}
}
@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
/**
* Allow the flight field value to be nullable
*/
class FlightFieldNullable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('flight_field_values', function ($table) {
$table->text('value')->change()->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
}
}
@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class FlightsAddLoadFactor extends Migration
{
/**
* Add a `load_factor` and `load_factor_variance` columns to the expenses table
*/
public function up()
{
Schema::table('flights', function (Blueprint $table) {
$table->decimal('load_factor', 5, 2)
->nullable()
->after('flight_type');
$table->decimal('load_factor_variance', 5, 2)
->nullable()
->after('load_factor');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('flights', function (Blueprint $table) {
$table->dropColumn('load_factor');
$table->dropColumn('load_factor_variance');
});
}
}
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class FlightsAddPilotPay extends Migration
{
/**
* Add a `pilot_pay` column for a fixed amount to pay to a pilot for a flight
*/
public function up()
{
Schema::table('flights', function (Blueprint $table) {
$table->decimal('pilot_pay')
->nullable()
->after('route');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('flights', function (Blueprint $table) {
$table->dropColumn('pilot_pay');
});
}
}
@@ -0,0 +1,34 @@
<?php
use App\Models\Enums\FareType;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class FaresAddType extends Migration
{
/**
* Add a `pilot_pay` column for a fixed amount to pay to a pilot for a flight
*/
public function up()
{
Schema::table('fares', function (Blueprint $table) {
$table->unsignedTinyInteger('type')
->default(FareType::PASSENGER)
->nullable()
->after('capacity');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('fares', function (Blueprint $table) {
$table->dropColumn('type');
});
}
}
@@ -0,0 +1,45 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
/**
* Increase string ID lengths because of collisions
*/
class IncreaseIdLengths extends Migration
{
public function up()
{
$tables = [
'acars' => ['id', 'pirep_id'],
'bids' => ['flight_id'],
'flights' => ['id'],
'pireps' => ['id', 'flight_id'],
'flight_fare' => ['flight_id'],
'flight_field_values' => ['flight_id'],
'flight_subfleet' => ['flight_id'],
'pirep_comments' => ['pirep_id'],
'pirep_fares' => ['pirep_id'],
'pirep_field_values' => ['pirep_id'],
'users' => ['last_pirep_id'],
];
foreach ($tables as $table_name => $columns) {
Schema::table($table_name, function (Blueprint $table) use ($columns) {
foreach ($columns as $column) {
$table->string($column, 36)->change();
}
});
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
}
}
@@ -0,0 +1,27 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
/**
* Remove the unique index from subfleets.type
*/
class RemoveSubfleetTypeIndex extends Migration
{
public function up()
{
Schema::table('subfleets', function (Blueprint $table) {
$table->dropUnique(['type']);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
}
}
@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
/**
* Add a table to store the Simbrief data
*/
class AddSimbriefTable extends Migration
{
public function up()
{
Schema::create('simbrief', function (Blueprint $table) {
$table->string('id', 36); // The OFP ID
$table->unsignedInteger('user_id');
$table->string('flight_id', 36)->nullable();
$table->string('pirep_id', 36)->nullable();
$table->mediumText('acars_xml');
$table->mediumText('ofp_xml');
$table->timestamps();
$table->primary('id');
$table->index(['user_id', 'flight_id']);
$table->index('pirep_id');
$table->unique('pirep_id'); // Can only belong to a single PIREP
});
}
public function down()
{
Schema::drop('simbrief');
}
}
@@ -0,0 +1,45 @@
<?php
use App\Models\Enums\PageType;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
/**
* Create the pages
* https://github.com/nabeelio/phpvms/issues/641
*/
class CreatePages extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('pages', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('slug');
$table->string('icon');
$table->unsignedSmallInteger('type')->default(PageType::PAGE);
$table->boolean('public');
$table->boolean('enabled');
$table->mediumText('body');
$table->timestamps();
$table->index('slug');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('pages');
}
}
@@ -0,0 +1,19 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AirlineRemoveNullable extends Migration
{
public function up()
{
Schema::table('airlines', function (Blueprint $table) {
$table->dropUnique('airlines_iata_unique');
});
}
public function down()
{
}
}
@@ -0,0 +1,19 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class PageIconNullable extends Migration
{
public function up()
{
Schema::table('pages', function (Blueprint $table) {
$table->string('icon')->change()->nullable();
});
}
public function down()
{
}
}
@@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class PagesAddLink extends Migration
{
/**
* Add a `link` column and make the body optional. Also add a "new_window" bool
* which determines if we open this link in a new window or not
*/
public function up()
{
Schema::table('pages', function (Blueprint $table) {
$table->string('body')->change()->nullable();
$table->string('link')
->default('')
->nullable()
->after('body');
$table->boolean('new_window')->default(false);
});
}
/**
* @return void
*/
public function down()
{
Schema::table('fares', function (Blueprint $table) {
$table->dropColumn('link');
$table->dropColumn('new_window');
});
}
}
@@ -0,0 +1,49 @@
<?php
use App\Contracts\Model;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUserFields extends Migration
{
/**
* Add two tables for holding user fields and the values
*/
public function up()
{
/*
* Hold a master list of fields
*/
Schema::create('user_fields', function (Blueprint $table) {
$table->increments('id');
$table->string('name', 200);
$table->text('description')->nullable();
$table->boolean('show_on_registration')->default(false)->nullable();
$table->boolean('required')->default(false)->nullable();
$table->boolean('private')->default(false)->nullable();
$table->boolean('active')->default(true)->nullable();
$table->timestamps();
});
/*
* The values for the actual fields
*/
Schema::create('user_field_values', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_field_id');
$table->string('user_id', Model::ID_MAX_LENGTH);
$table->text('value')->nullable();
$table->timestamps();
$table->index(['user_field_id', 'user_id']);
});
}
/**
* @return void
*/
public function down()
{
}
}
@@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
/**
* Add a `mtow` column for the max takeoff weight
*/
class AircraftAddMtow extends Migration
{
public function up()
{
Schema::table('aircraft', function (Blueprint $table) {
$table->unsignedDecimal('mtow')
->nullable()
->default(0.0)
->after('hex_code');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('aircraft', function (Blueprint $table) {
$table->dropColumn('mtow');
});
}
}
+1
View File
@@ -0,0 +1 @@
local.yml
+8
View File
@@ -12,3 +12,11 @@ airlines:
active: 1 active: 1
created_at: now created_at: now
updated_at: now updated_at: now
- id: 2
icao: XXX
iata: XX
name: inactive airline
country: us
active: 0
created_at: now
updated_at: now
+49 -7
View File
@@ -124,7 +124,16 @@ airports:
lat: 25.2528 lat: 25.2528
lon: 55.3644 lon: 55.3644
ground_handling_cost: 50 ground_handling_cost: 50
- id: OMAA
iata: AUH
icao: OMAA
name: Abu Dhabi International Airport
location: Abu Dhabi
country:
timezone: Asia/Dubai
lat: 24.433
lon: 54.6511
ground_handling_cost: 50
# #
aircraft: aircraft:
- id: 1 - id: 1
@@ -132,24 +141,28 @@ aircraft:
airport_id: KJFK airport_id: KJFK
name: Boeing 747-438 name: Boeing 747-438
registration: 001Z registration: 001Z
flight_time: 360
status: A status: A
- id: 2 - id: 2
subfleet_id: 2 subfleet_id: 2
airport_id: LGRP airport_id: LGRP
name: Boeing 777-200 name: Boeing 777-200
registration: C202 registration: C202
flight_time: 260
status: A status: A
- id: 3 - id: 3
subfleet_id: 1 subfleet_id: 1
airport_id: KAUS airport_id: KAUS
name: Boeing 747-412 name: Boeing 747-412
registration: S2333 registration: S2333
flight_time: 0
status: A status: A
- id: 4 - id: 4
subfleet_id: 1 subfleet_id: 1
airport_id: KAUS airport_id: KAUS
name: Boeing 747-436 RETIRED name: Boeing 747-436 RETIRED
registration: registration:
flight_time: 45
status: R status: R
expenses: expenses:
@@ -283,6 +296,7 @@ flights:
arr_time: 11PM EST arr_time: 11PM EST
flight_time: 240 flight_time: 240
flight_type: J flight_type: J
load_factor: 100
created_at: NOW created_at: NOW
updated_at: NOW updated_at: NOW
- id: flightid_3 - id: flightid_3
@@ -294,6 +308,7 @@ flights:
arr_airport_id: KJFK arr_airport_id: KJFK
flight_time: 480 flight_time: 480
flight_type: J flight_type: J
load_factor: 63
dpt_time: 9AM CST dpt_time: 9AM CST
arr_time: 1030AM CST arr_time: 1030AM CST
route: PITZZ4 MNURE WLEEE4 route: PITZZ4 MNURE WLEEE4
@@ -308,6 +323,37 @@ flights:
arr_airport_id: MWCR arr_airport_id: MWCR
flight_time: 70 flight_time: 70
flight_type: 'J' flight_type: 'J'
load_factor: 80
dpt_time: '0800'
arr_time: '0900'
route: 'MLY5 KEMBO UG442 SIA UG633 OTEKO UR640 NALRO GUBEL3'
created_at: NOW
updated_at: NOW
- id: flightid_5
airline_id: 1
flight_number: 112
route_code:
route_leg:
dpt_airport_id: OMAA
arr_airport_id: OMDB
flight_time: 30
flight_type: 'J'
load_factor:
dpt_time: '0800'
arr_time: '0900'
route: 'MLY5 KEMBO UG442 SIA UG633 OTEKO UR640 NALRO GUBEL3'
created_at: NOW
updated_at: NOW
- id: flightid_6
airline_id: 1
flight_number: 113
route_code:
route_leg:
dpt_airport_id: OMDB
arr_airport_id: OMAA
flight_time: 30
flight_type: 'J'
load_factor: 100
dpt_time: '0800' dpt_time: '0800'
arr_time: '0900' arr_time: '0900'
route: 'MLY5 KEMBO UG442 SIA UG633 OTEKO UR640 NALRO GUBEL3' route: 'MLY5 KEMBO UG442 SIA UG633 OTEKO UR640 NALRO GUBEL3'
@@ -467,12 +513,8 @@ pirep_fares:
pirep_fields: pirep_fields:
- id: 1 - id: 1
name: departure terminal name: Cost Index
slug: departure-terminal slug: cost-index
required: 1
- id: 2
name: arrival terminal
slug: arrival-terminal
required: 0 required: 0
pirep_field_values: pirep_field_values:
File diff suppressed because one or more lines are too long
+23
View File
@@ -69,3 +69,26 @@ role_user:
- user_id: 3 - user_id: 3
role_id: 2 role_id: 2
user_type: App\Models\User user_type: App\Models\User
user_fields:
- id: 1
name: 'VATSIM ID'
show_on_registration: true
required: false
private: false
- id: 2
name: 'Referral'
description: 'Who referred you'
show_on_registration: true
required: false
private: true
user_field_values:
- id: 1
user_field_id: 1
user_id: 1
value: 'my vatsim id'
- id: 2
user_field_id: 2
user_id: 1
value: 'Nobody did'
+6
View File
@@ -3,6 +3,9 @@
- name: admin-access - name: admin-access
display_name: Admin Panel display_name: Admin Panel
description: Access the admin panel description: Access the admin panel
- name: aircraft
display_name: Aircraft
description: Create/edit aircraft
- name: airlines - name: airlines
display_name: Airlines display_name: Airlines
description: Create/edit airlines description: Create/edit airlines
@@ -30,6 +33,9 @@
- name: finances - name: finances
display_name: Finances display_name: Finances
description: Create/view finance related items description: Create/view finance related items
- name: pages
display_name: Pages
description: Add/edit/delete pages
- name: pireps - name: pireps
display_name: PIREPs display_name: PIREPs
description: Accept/reject/edit PIREPs description: Accept/reject/edit PIREPs
+55
View File
@@ -26,6 +26,13 @@
options: options:
type: boolean type: boolean
description: If an airport isn't added, try to look it up when adding schedules description: If an airport isn't added, try to look it up when adding schedules
- key: general.allow_unadded_airports
name: 'Allow unadded airports'
group: general
value: false
options:
type: boolean
description: If an un-added airport is used, it is looked up and added
- key: general.check_prerelease_version - key: general.check_prerelease_version
name: 'Pre-release versions in version check' name: 'Pre-release versions in version check'
group: general group: general
@@ -40,6 +47,19 @@
options: '' options: ''
type: boolean type: boolean
description: 'Send some data (php version, mysql version) to phpVMS. See AnalyticsSvc code for details' description: 'Send some data (php version, mysql version) to phpVMS. See AnalyticsSvc code for details'
- key: general.google_analytics_id
name: 'Google Analytics Tracking ID'
group: general
value: ''
options: ''
type: text
description: 'Enter your Google Analytics Tracking ID'
- key: units.currency
name: 'Currency'
group: units
value: USD
type: select
description: 'The currency to use'
- key: units.distance - key: units.distance
name: 'Distance Units' name: 'Distance Units'
group: units group: units
@@ -131,6 +151,41 @@
options: '' options: ''
type: int type: int
description: 'Number of hours to expire bids after' description: 'Number of hours to expire bids after'
- key: flights.default_load_factor
name: 'Load Factor'
group: flights
value: 82
options: ''
type: number
description: 'The default load factor for a flight, as a percent'
- key: flights.load_factor_variance
name: 'Load Factor Variance'
group: flights
value: 5
options: ''
type: number
description: 'How much the load factor can vary per-flight'
- key: simbrief.api_key
name: 'SimBrief API Key'
group: simbrief
value: ''
options: ''
type: string
description: 'Your SimBrief API key'
- key: simbrief.only_bids
name: 'Only allow for bids'
group: simbrief
value: true
options: ''
type: boolean
description: 'Only allow briefs to be created for bidded flights'
- key: simbrief.expire_days
name: 'SimBrief Expire Time'
group: simbrief
value: 5
options: ''
type: number
description: 'Days after how long to remove unused briefs'
- key: pireps.duplicate_check_time - key: pireps.duplicate_check_time
name: 'PIREP duplicate time check' name: 'PIREP duplicate time check'
group: pireps group: pireps
+22
View File
@@ -0,0 +1,22 @@
<?php
namespace App\Events;
use App\Contracts\Event;
use App\Models\Acars;
use App\Models\Pirep;
class AcarsUpdate extends Event
{
/** @var Pirep */
public $pirep;
/** @var Acars */
public $acars;
public function __construct(Pirep $pirep, Acars $acars)
{
$this->pirep = $pirep;
$this->acars = $acars;
}
}
+5 -7
View File
@@ -2,13 +2,11 @@
namespace App\Events; namespace App\Events;
use Illuminate\Broadcasting\InteractsWithSockets; use App\Contracts\Event;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class BaseEvent /**
* @deprecated Extend App\Contracts\Event directly
*/
class BaseEvent extends Event
{ {
use Dispatchable;
use InteractsWithSockets;
use SerializesModels;
} }
+3 -1
View File
@@ -2,6 +2,8 @@
namespace App\Events; namespace App\Events;
class CronHourly extends BaseEvent use App\Contracts\Event;
class CronHourly extends Event
{ {
} }
+3 -1
View File
@@ -2,10 +2,12 @@
namespace App\Events; namespace App\Events;
use App\Contracts\Event;
/** /**
* This event is dispatched when the monthly cron is run * This event is dispatched when the monthly cron is run
* It happens after all of the default nightly tasks * It happens after all of the default nightly tasks
*/ */
class CronMonthly extends BaseEvent class CronMonthly extends Event
{ {
} }
+3 -1
View File
@@ -2,10 +2,12 @@
namespace App\Events; namespace App\Events;
use App\Contracts\Event;
/** /**
* This event is dispatched when the daily cron is run * This event is dispatched when the daily cron is run
* It happens after all of the default nightly tasks * It happens after all of the default nightly tasks
*/ */
class CronNightly extends BaseEvent class CronNightly extends Event
{ {
} }
+3 -1
View File
@@ -2,11 +2,13 @@
namespace App\Events; namespace App\Events;
use App\Contracts\Event;
/** /**
* This event is dispatched when the weekly cron is run * This event is dispatched when the weekly cron is run
* It happens after all of the default nightly tasks * It happens after all of the default nightly tasks
*/ */
class CronWeekly extends BaseEvent class CronWeekly extends Event
{ {
public function __construct() public function __construct()
{ {
+2 -1
View File
@@ -2,6 +2,7 @@
namespace App\Events; namespace App\Events;
use App\Contracts\Event;
use App\Models\Pirep; use App\Models\Pirep;
/** /**
@@ -25,7 +26,7 @@ use App\Models\Pirep;
* *
* The event will have a copy of the PIREP model, if it's applicable * The event will have a copy of the PIREP model, if it's applicable
*/ */
class Expenses extends BaseEvent class Expenses extends Event
{ {
public $pirep; public $pirep;
+2 -1
View File
@@ -2,9 +2,10 @@
namespace App\Events; namespace App\Events;
use App\Contracts\Event;
use App\Models\News; use App\Models\News;
class NewsAdded extends BaseEvent class NewsAdded extends Event
{ {
public $news; public $news;
+2 -1
View File
@@ -2,9 +2,10 @@
namespace App\Events; namespace App\Events;
use App\Contracts\Event;
use App\Models\Pirep; use App\Models\Pirep;
class PirepAccepted extends BaseEvent class PirepAccepted extends Event
{ {
public $pirep; public $pirep;
+16
View File
@@ -0,0 +1,16 @@
<?php
namespace App\Events;
use App\Contracts\Event;
use App\Models\Pirep;
class PirepCancelled extends Event
{
public $pirep;
public function __construct(Pirep $pirep)
{
$this->pirep = $pirep;
}
}
+2 -1
View File
@@ -2,9 +2,10 @@
namespace App\Events; namespace App\Events;
use App\Contracts\Event;
use App\Models\Pirep; use App\Models\Pirep;
class PirepFiled extends BaseEvent class PirepFiled extends Event
{ {
public $pirep; public $pirep;
+16
View File
@@ -0,0 +1,16 @@
<?php
namespace App\Events;
use App\Contracts\Event;
use App\Models\Pirep;
class PirepPrefiled extends Event
{
public $pirep;
public function __construct(Pirep $pirep)
{
$this->pirep = $pirep;
}
}
+2 -1
View File
@@ -2,9 +2,10 @@
namespace App\Events; namespace App\Events;
use App\Contracts\Event;
use App\Models\Pirep; use App\Models\Pirep;
class PirepRejected extends BaseEvent class PirepRejected extends Event
{ {
public $pirep; public $pirep;
+16
View File
@@ -0,0 +1,16 @@
<?php
namespace App\Events;
use App\Contracts\Event;
use App\Models\Pirep;
class PirepUpdated extends Event
{
public $pirep;
public function __construct(Pirep $pirep)
{
$this->pirep = $pirep;
}
}
+2 -1
View File
@@ -2,9 +2,10 @@
namespace App\Events; namespace App\Events;
use App\Contracts\Event;
use App\Models\User; use App\Models\User;
class TestEvent extends BaseEvent class TestEvent extends Event
{ {
public $user; public $user;
+2 -1
View File
@@ -2,9 +2,10 @@
namespace App\Events; namespace App\Events;
use App\Contracts\Event;
use App\Models\User; use App\Models\User;
class UserAccepted extends BaseEvent class UserAccepted extends Event
{ {
public $user; public $user;
+2 -1
View File
@@ -2,9 +2,10 @@
namespace App\Events; namespace App\Events;
use App\Contracts\Event;
use App\Models\User; use App\Models\User;
class UserRegistered extends BaseEvent class UserRegistered extends Event
{ {
public $user; public $user;
+2 -1
View File
@@ -2,12 +2,13 @@
namespace App\Events; namespace App\Events;
use App\Contracts\Event;
use App\Models\User; use App\Models\User;
/** /**
* Event triggered when a user's state changes * Event triggered when a user's state changes
*/ */
class UserStateChanged extends BaseEvent class UserStateChanged extends Event
{ {
public $old_state; public $old_state;
public $user; public $user;
+2 -1
View File
@@ -2,9 +2,10 @@
namespace App\Events; namespace App\Events;
use App\Contracts\Event;
use App\Models\User; use App\Models\User;
class UserStatsChanged extends BaseEvent class UserStatsChanged extends Event
{ {
public $stat_name; public $stat_name;
public $old_value; public $old_value;
+47
View File
@@ -0,0 +1,47 @@
<?php
namespace App\Exceptions;
use App\Models\Aircraft;
class AircraftInvalid extends AbstractHttpException
{
public const MESSAGE = 'The supplied aircraft is invalid';
private $aircraft;
public function __construct(Aircraft $aircraft)
{
$this->aircraft = $aircraft;
parent::__construct(
400,
static::MESSAGE
);
}
/**
* Return the RFC 7807 error type (without the URL root)
*/
public function getErrorType(): string
{
return 'aircraft-invalid';
}
/**
* Get the detailed error string
*/
public function getErrorDetails(): string
{
return $this->getMessage();
}
/**
* Return an array with the error details, merged with the RFC7807 response
*/
public function getErrorMetadata(): array
{
return [
'aircraft_id' => optional($this->aircraft)->id,
];
}
}
@@ -3,13 +3,13 @@
namespace App\Exceptions\Converters; namespace App\Exceptions\Converters;
use App\Exceptions\AbstractHttpException; use App\Exceptions\AbstractHttpException;
use Exception; use Throwable;
class GenericExceptionAbstract extends AbstractHttpException class GenericExceptionAbstract extends AbstractHttpException
{ {
private $exception; private $exception;
public function __construct(Exception $exception) public function __construct(Throwable $exception)
{ {
$this->exception = $exception; $this->exception = $exception;
parent::__construct( parent::__construct(
+10 -37
View File
@@ -5,8 +5,7 @@ namespace App\Exceptions;
use App\Exceptions\Converters\GenericExceptionAbstract; use App\Exceptions\Converters\GenericExceptionAbstract;
use App\Exceptions\Converters\SymfonyException; use App\Exceptions\Converters\SymfonyException;
use App\Exceptions\Converters\ValidationException; use App\Exceptions\Converters\ValidationException;
use Exception; use App\Http\Middleware\SetActiveTheme;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Auth\AuthenticationException; use Illuminate\Auth\AuthenticationException;
use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Contracts\Container\BindingResolutionException;
use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Database\Eloquent\ModelNotFoundException;
@@ -15,10 +14,9 @@ use Illuminate\Http\Request;
use Illuminate\Session\TokenMismatchException; use Illuminate\Session\TokenMismatchException;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Illuminate\Validation\ValidationException as IlluminateValidationException; use Illuminate\Validation\ValidationException as IlluminateValidationException;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\HttpException as SymfonyHttpException; use Symfony\Component\HttpKernel\Exception\HttpException as SymfonyHttpException;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Throwable;
use Whoops\Handler\HandlerInterface; use Whoops\Handler\HandlerInterface;
/** /**
@@ -42,19 +40,19 @@ class Handler extends ExceptionHandler
/** /**
* Render an exception into an HTTP response. * Render an exception into an HTTP response.
* *
* @param Request $request * @param Request $request
* @param Exception $exception * @param \Throwable $exception
* *
* @return mixed * @return mixed
*/ */
public function render($request, Exception $exception) public function render($request, Throwable $exception)
{ {
if ($request->is('api/*')) { if ($request->is('api/*')) {
return $this->handleApiError($request, $exception); return $this->handleApiError($request, $exception);
} }
if ($exception instanceof AbstractHttpException (new SetActiveTheme())->setTheme($request);
&& $exception->getStatusCode() === 403) { if ($exception instanceof AbstractHttpException && $exception->getStatusCode() === 403) {
return redirect()->guest('login'); return redirect()->guest('login');
} }
@@ -65,11 +63,11 @@ class Handler extends ExceptionHandler
* Handle errors in the API * Handle errors in the API
* *
* @param $request * @param $request
* @param \Exception $exception * @param \Throwable $exception
* *
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Response * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Response
*/ */
private function handleApiError($request, Exception $exception) private function handleApiError($request, Throwable $exception)
{ {
Log::error('API Error', $exception->getTrace()); Log::error('API Error', $exception->getTrace());
@@ -118,38 +116,13 @@ class Handler extends ExceptionHandler
{ {
if ($request->expectsJson() || $request->is('api/*')) { if ($request->expectsJson() || $request->is('api/*')) {
$error = new Unauthenticated(); $error = new Unauthenticated();
return $error->getResponse(); return $error->getResponse();
} }
return redirect()->guest('login'); return redirect()->guest('login');
} }
/**
* Render the given HttpException.
*
* @param AbstractHttpException $e
*
* @return \Illuminate\Http\Response|Response
*/
protected function renderHttpException(HttpExceptionInterface $e)
{
$status = $e->getStatusCode();
view()->replaceNamespace('errors', [
resource_path('views/layouts/'.setting('general.theme', 'default').'/errors'),
resource_path('views/errors'),
__DIR__.'/views',
]);
if (view()->exists("errors::{$status}")) {
return response()->view("errors::{$status}", [
'exception' => $e,
'SKIN_NAME' => setting('general.theme', 'default'),
], $status, $e->getHeaders());
}
return $this->convertExceptionToResponse($e);
}
/** /**
* Ignition error page integration * Ignition error page integration
*/ */
+43
View File
@@ -0,0 +1,43 @@
<?php
namespace App\Exceptions;
use Exception;
class PageNotFound extends AbstractHttpException
{
private $exception;
public function __construct(Exception $exception)
{
$this->exception = $exception;
parent::__construct(
404,
$exception->getMessage()
);
}
/**
* Return the RFC 7807 error type (without the URL root)
*/
public function getErrorType(): string
{
return 'not-found';
}
/**
* Get the detailed error string
*/
public function getErrorDetails(): string
{
return $this->getMessage();
}
/**
* Return an array with the error details, merged with the RFC7807 response
*/
public function getErrorMetadata(): array
{
return [];
}
}
+43
View File
@@ -0,0 +1,43 @@
<?php
namespace App\Exceptions;
class PilotIdNotFound extends AbstractHttpException
{
private $pilot_id;
public function __construct($pilot_id)
{
$this->pilot_id = $pilot_id;
parent::__construct(
404,
'Pilot '.$pilot_id.' not found'
);
}
/**
* Return the RFC 7807 error type (without the URL root)
*/
public function getErrorType(): string
{
return 'pilot-id-not-found';
}
/**
* Get the detailed error string
*/
public function getErrorDetails(): string
{
return $this->getMessage();
}
/**
* Return an array with the error details, merged with the RFC7807 response
*/
public function getErrorMetadata(): array
{
return [
'pilot_id' => $this->pilot_id,
];
}
}
+43
View File
@@ -0,0 +1,43 @@
<?php
namespace App\Exceptions;
use Exception;
class Unauthorized extends AbstractHttpException
{
private $exception;
public function __construct(Exception $exception)
{
$this->exception = $exception;
parent::__construct(
403,
$exception->getMessage()
);
}
/**
* Return the RFC 7807 error type (without the URL root)
*/
public function getErrorType(): string
{
return 'unauthorized';
}
/**
* Get the detailed error string
*/
public function getErrorDetails(): string
{
return $this->getMessage();
}
/**
* Return an array with the error details, merged with the RFC7807 response
*/
public function getErrorMetadata(): array
{
return [];
}
}
+46
View File
@@ -0,0 +1,46 @@
<?php
namespace App\Exceptions;
use App\Models\Page;
class UnknownPageType extends AbstractHttpException
{
private $page;
public function __construct(Page $page)
{
$this->page = $page;
parent::__construct(
400,
'Unknown page type "'.$page->type.'"'
);
}
/**
* Return the RFC 7807 error type (without the URL root)
*/
public function getErrorType(): string
{
return 'unknown-page-type';
}
/**
* Get the detailed error string
*/
public function getErrorDetails(): string
{
return $this->getMessage();
}
/**
* Return an array with the error details, merged with the RFC7807 response
*/
public function getErrorMetadata(): array
{
return [
'id' => $this->page->id,
'type' => $this->page->type,
];
}
}
-222
View File
@@ -1,222 +0,0 @@
<?php
namespace App\Facades;
use GuzzleHttp\Client;
use Illuminate\Support\Facades\Facade;
class Utils extends Facade
{
/**
* @return string
*/
protected static function getFacadeAccessor(): string
{
return 'utils';
}
/**
* Simple check on the first character if it's an object or not
*
* @param $obj
*
* @return bool
*/
public static function isObject($obj): bool
{
if (!$obj) {
return false;
}
if ($obj[0] === '{' || $obj[0] === '[') {
return true;
}
return false;
}
/**
* Download a URI. If a file is given, it will save the downloaded
* content into that file
*
* @param string $uri
* @param null $file
*
* @throws \RuntimeException
* @throws \GuzzleHttp\Exception\GuzzleException
*
* @return string
*/
public static function downloadUrl($uri, $file = null): string
{
$opts = [];
if ($file !== null) {
$opts['sink'] = $file;
}
$client = new Client();
$response = $client->request('GET', $uri, $opts);
$body = $response->getBody()->getContents();
if ($response->getHeader('content-type') === 'application/json') {
$body = \GuzzleHttp\json_decode($body);
}
return $body;
}
/**
* Returns a 40 character API key that a user can use
*
* @return string
*/
public static function generateApiKey(): string
{
$key = substr(sha1(time().mt_rand()), 0, 20);
return $key;
}
/**
* @param string $minutes
*
* @return array
*/
public static function minutesToTimeParts($minutes): array
{
$hours = floor($minutes / 60);
$minutes %= 60;
return ['h' => $hours, 'm' => $minutes];
}
public static function minutesToTimeString($minutes): string
{
$hm = self::minutesToTimeParts($minutes);
return $hm['h'].'h '.$hm['m'].'m';
}
/**
* Convert seconds to an array of hours, minutes, seconds
*
* @param int $seconds
*
* @throws \Exception
*
* @return array['h', 'm', 's']
*/
public static function secondsToTimeParts($seconds): array
{
$dtF = new \DateTimeImmutable('@0', new \DateTimeZone('UTC'));
$dtT = new \DateTimeImmutable("@$seconds", new \DateTimeZone('UTC'));
$t = $dtF->diff($dtT);
$retval = [];
$retval['h'] = (int) $t->format('%h');
$retval['m'] = (int) $t->format('%i');
$retval['s'] = (int) $t->format('%s');
return $retval;
}
/**
* Convert seconds to HH MM format
*
* @param int $seconds
* @param bool $incl_sec
*
* @throws \Exception
*
* @return string
*/
public static function secondsToTimeString($seconds, $incl_sec = false): string
{
$hms = self::secondsToTimeParts($seconds);
$format = $hms['h'].'h '.$hms['m'].'m';
if ($incl_sec) {
$format .= ' '.$hms['s'].'s';
}
return $format;
}
/**
* @param $minutes
*
* @return float|int
*/
public static function minutesToSeconds($minutes)
{
return $minutes * 60;
}
/**
* Convert the seconds to minutes and then round it up
*
* @param $seconds
*
* @return float|int
*/
public static function secondsToMinutes($seconds)
{
return ceil($seconds / 60);
}
/**
* Convert hours to minutes. Pretty complex
*
* @param $minutes
*
* @return float|int
*/
public static function minutesToHours($minutes)
{
return $minutes / 60;
}
/**
* @param $hours
* @param null $minutes
*
* @return float|int
*/
public static function hoursToMinutes($hours, $minutes = null)
{
$total = (int) $hours * 60;
if ($minutes) {
$total += (int) $minutes;
}
return $total;
}
/**
* Bitwise operator for setting days of week to integer field
*
* @param int $datefield initial datefield
* @param array $day_enums Array of values from config("enum.days")
*
* @return int
*/
public static function setDays(int $datefield, array $day_enums): int
{
foreach ($day_enums as $day) {
$datefield |= $day;
}
return $datefield;
}
/**
* Bit check if a day exists within a integer bitfield
*
* @param int $datefield datefield from database
* @param int $day_enum Value from config("enum.days")
*
* @return bool
*/
public static function hasDay(int $datefield, int $day_enum): bool
{
return ($datefield & $day_enum) === $datefield;
}
}
+50
View File
@@ -0,0 +1,50 @@
<?php
namespace App\Http\Composers;
use App\Contracts\Composer;
use App\Repositories\PageRepository;
use Exception;
use Illuminate\Support\Facades\Auth;
use Illuminate\View\View;
class PageLinksComposer extends Composer
{
private static $fields = ['id', 'name', 'slug', 'icon', 'type', 'link', 'new_window'];
/** @var \App\Repositories\PageRepository */
private $pageRepo;
/**
* PageLinksComposer constructor.
*
* @param \App\Repositories\PageRepository $pageRepo
*/
public function __construct(PageRepository $pageRepo)
{
$this->pageRepo = $pageRepo;
}
/**
* @param \Illuminate\View\View $view
*/
public function compose(View $view)
{
try {
$w = [
'enabled' => true,
];
// If not logged in, then only get the public pages
if (!Auth::check()) {
$w['public'] = true;
}
$pages = $this->pageRepo->findWhere($w, static::$fields);
} catch (Exception $e) {
$pages = [];
}
$view->with('page_links', $pages);
}
}
+23
View File
@@ -0,0 +1,23 @@
<?php
namespace App\Http\Composers;
use App\Contracts\Composer;
use App\Services\VersionService;
use Illuminate\View\View;
class VersionComposer extends Composer
{
protected $versionSvc;
public function __construct(VersionService $versionSvc)
{
$this->versionSvc = $versionSvc;
}
public function compose(View $view)
{
$view->with('version', $this->versionSvc->getCurrentVersion(false));
$view->with('version_full', $this->versionSvc->getCurrentVersion(true));
}
}
@@ -3,11 +3,12 @@
namespace App\Http\Controllers\Admin; namespace App\Http\Controllers\Admin;
use App\Contracts\Controller; use App\Contracts\Controller;
use App\Http\Controllers\Admin\Traits\Importable;
use App\Http\Requests\CreateAircraftRequest; use App\Http\Requests\CreateAircraftRequest;
use App\Http\Requests\ImportRequest;
use App\Http\Requests\UpdateAircraftRequest; use App\Http\Requests\UpdateAircraftRequest;
use App\Models\Aircraft; use App\Models\Aircraft;
use App\Models\Enums\AircraftStatus; use App\Models\Enums\AircraftStatus;
use App\Models\Enums\ImportExportType;
use App\Models\Expense; use App\Models\Expense;
use App\Models\Subfleet; use App\Models\Subfleet;
use App\Repositories\AircraftRepository; use App\Repositories\AircraftRepository;
@@ -15,15 +16,12 @@ use App\Repositories\AirportRepository;
use App\Services\ExportService; use App\Services\ExportService;
use App\Services\ImportService; use App\Services\ImportService;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use Laracasts\Flash\Flash; use Laracasts\Flash\Flash;
/**
* Class AircraftController
*/
class AircraftController extends Controller class AircraftController extends Controller
{ {
use Importable;
private $aircraftRepo; private $aircraftRepo;
private $airportRepo; private $airportRepo;
private $importSvc; private $importSvc;
@@ -82,7 +80,7 @@ class AircraftController extends Controller
return view('admin.aircraft.create', [ return view('admin.aircraft.create', [
'airports' => $this->airportRepo->selectBoxList(), 'airports' => $this->airportRepo->selectBoxList(),
'subfleets' => Subfleet::all()->pluck('name', 'id'), 'subfleets' => Subfleet::all()->pluck('name', 'id'),
'statuses' => AircraftStatus::select(true), 'statuses' => AircraftStatus::select(false),
'subfleet_id' => $request->query('subfleet'), 'subfleet_id' => $request->query('subfleet'),
]); ]);
} }
@@ -90,7 +88,11 @@ class AircraftController extends Controller
/** /**
* Store a newly created Aircraft in storage. * Store a newly created Aircraft in storage.
* *
* @param \App\Http\Requests\CreateAircraftRequest $request
*
* @throws \Prettus\Validator\Exceptions\ValidatorException * @throws \Prettus\Validator\Exceptions\ValidatorException
*
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/ */
public function store(CreateAircraftRequest $request) public function store(CreateAircraftRequest $request)
{ {
@@ -142,14 +144,15 @@ class AircraftController extends Controller
'aircraft' => $aircraft, 'aircraft' => $aircraft,
'airports' => $this->airportRepo->selectBoxList(), 'airports' => $this->airportRepo->selectBoxList(),
'subfleets' => Subfleet::all()->pluck('name', 'id'), 'subfleets' => Subfleet::all()->pluck('name', 'id'),
'statuses' => AircraftStatus::select(true), 'statuses' => AircraftStatus::select(false),
]); ]);
} }
/** /**
* Update the specified Aircraft in storage. * Update the specified Aircraft in storage.
* *
* @param mixed $id * @param mixed $id
* @param UpdateAircraftRequest $request
* *
* @throws \Prettus\Validator\Exceptions\ValidatorException * @throws \Prettus\Validator\Exceptions\ValidatorException
* *
@@ -218,8 +221,6 @@ class AircraftController extends Controller
/** /**
* @param Request $request * @param Request $request
* *
* @throws \Illuminate\Validation\ValidationException
*
* @return mixed * @return mixed
*/ */
public function import(Request $request) public function import(Request $request)
@@ -230,16 +231,7 @@ class AircraftController extends Controller
]; ];
if ($request->isMethod('post')) { if ($request->isMethod('post')) {
ImportRequest::validate($request); $logs = $this->importFile($request, ImportExportType::AIRCRAFT);
$path = Storage::putFileAs(
'import',
$request->file('csv_file'),
'import_aircraft.csv'
);
$path = storage_path('app/'.$path);
Log::info('Uploaded aircraft import file to '.$path);
$logs = $this->importSvc->importAircraft($path);
} }
return view('admin.aircraft.import', [ return view('admin.aircraft.import', [
@@ -63,7 +63,7 @@ class AirlinesController extends Controller
public function store(CreateAirlineRequest $request) public function store(CreateAirlineRequest $request)
{ {
$input = $request->all(); $input = $request->all();
$airlines = $this->airlineRepo->create($input); $this->airlineSvc->createAirline($input);
Flash::success('Airlines saved successfully.'); Flash::success('Airlines saved successfully.');
return redirect(route('admin.airlines.index')); return redirect(route('admin.airlines.index'));
@@ -3,10 +3,11 @@
namespace App\Http\Controllers\Admin; namespace App\Http\Controllers\Admin;
use App\Contracts\Controller; use App\Contracts\Controller;
use App\Http\Controllers\Admin\Traits\Importable;
use App\Http\Requests\CreateAirportRequest; use App\Http\Requests\CreateAirportRequest;
use App\Http\Requests\ImportRequest;
use App\Http\Requests\UpdateAirportRequest; use App\Http\Requests\UpdateAirportRequest;
use App\Models\Airport; use App\Models\Airport;
use App\Models\Enums\ImportExportType;
use App\Models\Expense; use App\Models\Expense;
use App\Repositories\AirportRepository; use App\Repositories\AirportRepository;
use App\Repositories\Criteria\WhereCriteria; use App\Repositories\Criteria\WhereCriteria;
@@ -14,12 +15,12 @@ use App\Services\ExportService;
use App\Services\ImportService; use App\Services\ImportService;
use App\Support\Timezonelist; use App\Support\Timezonelist;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use Laracasts\Flash\Flash; use Laracasts\Flash\Flash;
class AirportController extends Controller class AirportController extends Controller
{ {
use Importable;
private $airportRepo; private $airportRepo;
private $importSvc; private $importSvc;
@@ -223,16 +224,7 @@ class AirportController extends Controller
]; ];
if ($request->isMethod('post')) { if ($request->isMethod('post')) {
ImportRequest::validate($request); $logs = $this->importFile($request, ImportExportType::AIRPORT);
$path = Storage::putFileAs(
'import',
$request->file('csv_file'),
'import_airports.csv'
);
$path = storage_path('app/'.$path);
Log::info('Uploaded airport import file to '.$path);
$logs = $this->importSvc->importAirports($path);
} }
return view('admin.airports.import', [ return view('admin.airports.import', [
@@ -3,21 +3,23 @@
namespace App\Http\Controllers\Admin; namespace App\Http\Controllers\Admin;
use App\Contracts\Controller; use App\Contracts\Controller;
use App\Http\Requests\ImportRequest; use App\Http\Controllers\Admin\Traits\Importable;
use App\Models\Enums\ExpenseType; use App\Models\Enums\ExpenseType;
use App\Models\Enums\FlightType;
use App\Models\Enums\ImportExportType;
use App\Models\Expense; use App\Models\Expense;
use App\Repositories\AirlineRepository; use App\Repositories\AirlineRepository;
use App\Repositories\ExpenseRepository; use App\Repositories\ExpenseRepository;
use App\Services\ExportService; use App\Services\ExportService;
use App\Services\ImportService; use App\Services\ImportService;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use Laracasts\Flash\Flash; use Laracasts\Flash\Flash;
use Prettus\Repository\Criteria\RequestCriteria; use Prettus\Repository\Criteria\RequestCriteria;
class ExpenseController extends Controller class ExpenseController extends Controller
{ {
use Importable;
private $airlineRepo; private $airlineRepo;
private $expenseRepo; private $expenseRepo;
private $importSvc; private $importSvc;
@@ -68,6 +70,7 @@ class ExpenseController extends Controller
return view('admin.expenses.create', [ return view('admin.expenses.create', [
'airlines_list' => $this->airlineRepo->selectBoxList(true), 'airlines_list' => $this->airlineRepo->selectBoxList(true),
'expense_types' => ExpenseType::select(), 'expense_types' => ExpenseType::select(),
'flight_types' => FlightType::select(),
]); ]);
} }
@@ -134,6 +137,7 @@ class ExpenseController extends Controller
'expense' => $expense, 'expense' => $expense,
'airlines_list' => $this->airlineRepo->selectBoxList(true), 'airlines_list' => $this->airlineRepo->selectBoxList(true),
'expense_types' => ExpenseType::select(), 'expense_types' => ExpenseType::select(),
'flight_types' => FlightType::select(),
]); ]);
} }
@@ -153,14 +157,12 @@ class ExpenseController extends Controller
if (empty($expenses)) { if (empty($expenses)) {
Flash::error('Expense not found'); Flash::error('Expense not found');
return redirect(route('admin.expenses.index')); return redirect(route('admin.expenses.index'));
} }
$this->expenseRepo->update($request->all(), $id); $this->expenseRepo->update($request->all(), $id);
Flash::success('Expense updated successfully.'); Flash::success('Expense updated successfully.');
return redirect(route('admin.expenses.index')); return redirect(route('admin.expenses.index'));
} }
@@ -223,16 +225,7 @@ class ExpenseController extends Controller
]; ];
if ($request->isMethod('post')) { if ($request->isMethod('post')) {
ImportRequest::validate($request); $logs = $this->importFile($request, ImportExportType::EXPENSES);
$path = Storage::putFileAs(
'import',
$request->file('csv_file'),
'import_expenses.csv'
);
$path = storage_path('app/'.$path);
Log::info('Uploaded expenses import file to '.$path);
$logs = $this->importSvc->importExpenses($path);
} }
return view('admin.expenses.import', [ return view('admin.expenses.import', [
+16 -16
View File
@@ -3,20 +3,22 @@
namespace App\Http\Controllers\Admin; namespace App\Http\Controllers\Admin;
use App\Contracts\Controller; use App\Contracts\Controller;
use App\Http\Controllers\Admin\Traits\Importable;
use App\Http\Requests\CreateFareRequest; use App\Http\Requests\CreateFareRequest;
use App\Http\Requests\ImportRequest;
use App\Http\Requests\UpdateFareRequest; use App\Http\Requests\UpdateFareRequest;
use App\Models\Enums\FareType;
use App\Models\Enums\ImportExportType;
use App\Repositories\FareRepository; use App\Repositories\FareRepository;
use App\Services\ExportService; use App\Services\ExportService;
use App\Services\ImportService; use App\Services\ImportService;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use Laracasts\Flash\Flash; use Laracasts\Flash\Flash;
use Prettus\Repository\Criteria\RequestCriteria; use Prettus\Repository\Criteria\RequestCriteria;
class FareController extends Controller class FareController extends Controller
{ {
use Importable;
private $fareRepo; private $fareRepo;
private $importSvc; private $importSvc;
@@ -57,7 +59,9 @@ class FareController extends Controller
*/ */
public function create() public function create()
{ {
return view('admin.fares.create'); return view('admin.fares.create', [
'fare_types' => FareType::select(),
]);
} }
/** /**
@@ -93,7 +97,9 @@ class FareController extends Controller
return redirect(route('admin.fares.index')); return redirect(route('admin.fares.index'));
} }
return view('admin.fares.show')->with('fare', $fare); return view('admin.fares.show', [
'fare' => $fare,
]);
} }
/** /**
@@ -111,7 +117,10 @@ class FareController extends Controller
return redirect(route('admin.fares.index')); return redirect(route('admin.fares.index'));
} }
return view('admin.fares.edit')->with('fare', $fare); return view('admin.fares.edit', [
'fare' => $fare,
'fare_types' => FareType::select(),
]);
} }
/** /**
@@ -196,16 +205,7 @@ class FareController extends Controller
]; ];
if ($request->isMethod('post')) { if ($request->isMethod('post')) {
ImportRequest::validate($request); $logs = $this->importFile($request, ImportExportType::FARES);
$path = Storage::putFileAs(
'import',
$request->file('csv_file'),
'import_fares.csv'
);
$path = storage_path('app/'.$path);
Log::info('Uploaded fares import file to '.$path);
$logs = $this->importSvc->importFares($path);
} }
return view('admin.fares.import', [ return view('admin.fares.import', [
@@ -3,9 +3,11 @@
namespace App\Http\Controllers\Admin; namespace App\Http\Controllers\Admin;
use App\Contracts\Controller; use App\Contracts\Controller;
use App\Http\Controllers\Admin\Traits\Importable;
use App\Http\Requests\CreateFlightRequest; use App\Http\Requests\CreateFlightRequest;
use App\Http\Requests\UpdateFlightRequest; use App\Http\Requests\UpdateFlightRequest;
use App\Models\Enums\FlightType; use App\Models\Enums\FlightType;
use App\Models\Enums\ImportExportType;
use App\Models\Flight; use App\Models\Flight;
use App\Models\FlightField; use App\Models\FlightField;
use App\Models\FlightFieldValue; use App\Models\FlightFieldValue;
@@ -23,14 +25,12 @@ use App\Services\ImportService;
use App\Support\Units\Time; use App\Support\Units\Time;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use Laracasts\Flash\Flash; use Laracasts\Flash\Flash;
/**
* Class FlightController
*/
class FlightController extends Controller class FlightController extends Controller
{ {
use Importable;
private $airlineRepo; private $airlineRepo;
private $airportRepo; private $airportRepo;
private $fareRepo; private $fareRepo;
@@ -325,15 +325,7 @@ class FlightController extends Controller
]; ];
if ($request->isMethod('post')) { if ($request->isMethod('post')) {
$path = Storage::putFileAs( $logs = $this->importFile($request, ImportExportType::FLIGHTS);
'import',
$request->file('csv_file'),
'import_flights.csv'
);
$path = storage_path('app/'.$path);
Log::info('Uploaded flights import file to '.$path);
$logs = $this->importSvc->importFlights($path);
} }
return view('admin.flights.import', [ return view('admin.flights.import', [
@@ -3,18 +3,33 @@
namespace App\Http\Controllers\Admin; namespace App\Http\Controllers\Admin;
use App\Contracts\Controller; use App\Contracts\Controller;
use App\Repositories\KvpRepository;
use App\Services\CronService; use App\Services\CronService;
use App\Services\VersionService;
use Codedge\Updater\UpdaterManager;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Log;
use Laracasts\Flash\Flash; use Laracasts\Flash\Flash;
use Nwidart\Modules\Facades\Module;
class MaintenanceController extends Controller class MaintenanceController extends Controller
{ {
private $cronSvc; private $cronSvc;
private $kvpRepo;
private $updateManager;
private $versionSvc;
public function __construct(CronService $cronSvc) public function __construct(
{ CronService $cronSvc,
KvpRepository $kvpRepo,
UpdaterManager $updateManager,
VersionService $versionSvc
) {
$this->cronSvc = $cronSvc; $this->cronSvc = $cronSvc;
$this->kvpRepo = $kvpRepo;
$this->updateManager = $updateManager;
$this->versionSvc = $versionSvc;
} }
public function index() public function index()
@@ -22,6 +37,8 @@ class MaintenanceController extends Controller
return view('admin.maintenance.index', [ return view('admin.maintenance.index', [
'cron_path' => $this->cronSvc->getCronExecString(), 'cron_path' => $this->cronSvc->getCronExecString(),
'cron_problem_exists' => $this->cronSvc->cronProblemExists(), 'cron_problem_exists' => $this->cronSvc->cronProblemExists(),
'new_version' => $this->kvpRepo->get('new_version_available', false),
'new_version_tag' => $this->kvpRepo->get('latest_version_tag'),
]); ]);
} }
@@ -30,7 +47,7 @@ class MaintenanceController extends Controller
* *
* @param \Illuminate\Http\Request $request * @param \Illuminate\Http\Request $request
* *
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector * @return mixed
*/ */
public function cache(Request $request) public function cache(Request $request)
{ {
@@ -57,4 +74,47 @@ class MaintenanceController extends Controller
Flash::success('Cache cleared!'); Flash::success('Cache cleared!');
return redirect(route('admin.maintenance.index')); return redirect(route('admin.maintenance.index'));
} }
/**
* Force an update check
*
* @param \Illuminate\Http\Request $request
*
* @return mixed
*/
public function forcecheck(Request $request)
{
$this->versionSvc->isNewVersionAvailable();
$new_version_avail = $this->kvpRepo->get('new_version_available', false);
$new_version_tag = $this->kvpRepo->get('latest_version_tag');
Log::info('Force check, available='.$new_version_avail.', tag='.$new_version_tag);
if (!$new_version_avail) {
Flash::success('No new version available');
} else {
Flash::success('New version available: '.$new_version_tag);
}
return redirect(route('admin.maintenance.index'));
}
/**
* Update the phpVMS install
*
* @param \Illuminate\Http\Request $request
*
* @return mixed
*/
public function update(Request $request)
{
$new_version_tag = $this->kvpRepo->get('latest_version_tag');
Log::info('Attempting to update to '.$new_version_tag);
$module = Module::find('updater');
$module->enable();
return redirect('/update/downloader');
}
} }

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