Jump to content

DisposableHero

Members
  • Posts

    784
  • Joined

  • Last visited

  • Days Won

    126

Everything posted by DisposableHero

  1. Following my own suggestion, refactored the code a little bit and made it more "Laravel"ish Getting only not owned flights and building up the airline dropdown with airlines which are active, have active and visible flights. End result should be same (except the airline dropdown contents) while reducing the resource usage and speeding up the load. <?php namespace Modules\DestinationsMap\Http\Controllers\Api; use App\Contracts\Controller; use App\Models\Airline; use App\Models\Airport; use App\Models\Flight; use Illuminate\Http\Request; use Illuminate\Http\JsonResponse; class MapController extends Controller { public function airlines(Request $request): JsonResponse { $airlines = Airline::withCount(['flights' => function ($query) { $query->whereNull('owner_id')->whereNull('user_id')->where(['active' => 1, 'visible' => 1]); }])->where('active', 1)->having('flights_count', '>', 0)->orderBy('icao')->get(); return response()->json(['data' => $airlines]); } public function origins(Request $request): JsonResponse { $airlineId = $request->get('airline_id'); $origins = Flight::where(['active' => 1, 'visible' => 1])->whereNull('owner_id')->whereNull('user_id')->when($airlineId, function ($query) use ($airlineId) { $query->where('airline_id', $airlineId); })->orderBy('dpt_airport_id')->groupBy('dpt_airport_id')->pluck('dpt_airport_id')->toArray(); $airports = Airport::whereIn('id', $origins)->orderBy('icao')->get(); return response()->json(['data' => $airports]); } public function destinations(Request $request): JsonResponse { $origin = $request->get('origin'); $airlineId = $request->get('airline_id'); if (!$origin) { return response()->json(['data' => []]); } $destinations = Flight::where(['dpt_airport_id' => $origin, 'active' => 1, 'visible' => 1])->whereNull('owner_id')->whereNull('user_id')->when($airlineId, function ($query) use ($airlineId) { $query->where('airline_id', $airlineId); })->orderBy('arr_airport_id')->groupBy('arr_airport_id')->pluck('arr_airport_id')->toArray(); $airports = Airport::whereIn('id', $destinations)->orderBy('icao')->get(); return response()->json(['data' => $airports]); } public function connecting(Request $request): JsonResponse { $airport = $request->get('airport'); $exclude = $request->get('exclude'); // origin to exclude $airlineId = $request->get('airline_id'); if (!$airport) { return response()->json(['data' => []]); } $connecting = Flight::where(['dpt_airport_id' => $airport, 'active' => 1, 'visible' => 1])->whereNull('owner_id')->whereNull('user_id')->when($exclude, function ($query) use ($exclude) { $query->where('arr_airport_id', '!=', $exclude); })->when($airlineId, function ($query) use ($airlineId) { $query->where('airline_id', $airlineId); })->orderBy('arr_airport_id')->groupBy('arr_airport_id')->pluck('arr_airport_id')->toArray(); $airports = Airport::whereIn('id', $connecting)->orderBy('icao')->get(); return response()->json(['data' => $airports]); } public function schedules(Request $request): JsonResponse { $origin = $request->get('origin'); $destination = $request->get('destination'); $airlineId = $request->get('airline_id'); if (!$origin || !$destination) { return response()->json(['data' => []]); } $schedules = Flight::with(['airline', 'dpt_airport', 'arr_airport', 'subfleets']) ->where([ 'dpt_airport_id' => $origin, 'arr_airport_id' => $destination, 'active' => 1, 'visible' => 1, ])->whereNull('owner_id')->whereNull('user_id')->when($airlineId, function ($query) use ($airlineId) { $query->where('airline_id', $airlineId); })->orderBy('flight_number')->limit(200)->get()->map(function ($f) { return [ 'id' => $f->id, 'ident' => $f->airline?->icao . $f->flight_number, 'airline' => $f->airline?->icao, 'airline_logo' => $f->airline?->logo, 'dpt' => $f->dpt_airport?->icao, 'arr' => $f->arr_airport?->icao, 'dpt_time' => $f->dpt_time, 'arr_time' => $f->arr_time, 'route' => $f->route, 'aircraft' => $f->subfleets?->pluck('type')->filter()->values()->implode(', '), ]; }); return response()->json(['data' => $schedules]); } } Safe flights.
  2. // Gets only active airlines with active and not owned flights (of 3rd party addons) public function airlines(Request $request): JsonResponse { $airlines = Airline::withCount(['flights' => function ($query) { $query->whereNull('owner_id')->whereNull('user_id')->where('active', 1); }])->where('active', 1)->having('flights_count', '>', 0)->orderBy('icao')->get(); return response()->json(['data' => $airlines]); } Similar approach regarding checking owner_id and user_id of flights can be applied to other parts of the code too.
  3. Hi William, As I wrote before, many thanks for the module... I just have a suggestion, like not listing airlines without flights in the dropdown. As the map focuses on destinations of airlines we have, a training airline, or a historic one without scheduled flights should not be there Also, if the map is getting all flights, including 3rd party module owned flights, it may be risky (as they may be not available to the pilot inspecting the map) I will work on these suggestions on my end and can share the controller with you later if you wish to implement too. Safe flights
  4. View File Disposable Airports Module aims to create and/or update airports of a phpVMS v7 install via open source data with all possible features provided. Uses MWGG Airports as the main source (so far it looks ok and enough for general VA usage) Displays deleted airports and provides functions to restore Uses CRON features to automatically check the source and update automatically Current dataset offers around 29.000 airports. Due to high amount of airports, "Update Only" setting is enabled by default. Updates will be published at GitHub, so please check the public repository for readme and possible future updates. Safe flights, Dispo Submitter DisposableHero Submitted 10/28/25 Category Add-ons  
  5. Version 1.0.6

    17 downloads

    Module aims to create and/or update airports of a phpVMS v7 install via open source data with all possible features provided. Uses MWGG Airports as the main source (so far it looks ok and enough for general VA usage) Displays deleted airports and provides functions to restore Uses CRON features to automatically check the source and update automatically Current dataset offers around 29.000 airports. Due to high amount of airports, "Update Only" setting is enabled by default. Updates will be published at GitHub, so please check the public repository for readme and possible future updates. Safe flights, Dispo
  6. Great news... First of all congratulations and thank you for your efforts, considering community and sharing your work. Will try to test it on some non vanilla installs
  7. Why not, you may need to edit required scripts and then compile them properly. Even if you want to go deep, I think you can define different icons for aircraft types you operate and use them (saw someone doing that). Also without compiling assets it can be possible to overwrite some stuff with some map code change. https://docs.phpvms.net/developers/building-assets https://github.com/phpvms/phpvms/blob/main/resources/views/layouts/beta/widgets/live_map.blade.php Good luck
  8. Then you are in the wrong section of the forum. This section is only for phpVMS v7. Maybe @ProAvia can move your post to relevant section (phpVMS Classic - v2/v5) By the look of it, your server is struggling to respond the load when you enter admin area. Maybe something is updated in the background, some server settings changed or somehow your increasing pireps are creating extra load and it is hurting the admin area now. Hope you can find the root cause. https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/503 Good luck
  9. Yeah you are definitely in wrong section, vmsAcars has nothing to do with auto removal of cancelled/leftover pireps from the map of phpVMS, neither do Disposable Basic You just need to be sure your cron is working properly and your phpvms admin settings are done accordingly (map live time, delete cancelled pireps in xx hours etc.) Good luck
  10. Did you checked docs about Apache vhost config ? https://docs.phpvms.net/installation/vhost#apache At least you can see the difference(s) between your config and the example, most probably your RewriteEngine is off or miss configured, thus your server is trying to open a physical directory (/install) instead of considering it as a route. Good luck
  11. Be sure you are using php8.1 or up and be 1000% sure it is the default version, this is related to either a missing/broken php module or multi php usage problem. Switching to a different php version and cleaning all cache (including nginx if you are using it) may help too. In some cases, Apache tries to use php8.2 but nginx running on top if is set to utilize php8.1 or vice versa. Good luck. PS: Running older versions of phpVMS (like the classic series 2.x/5.x) or older beta versions of v7 does not mean that your hosting service (or server) is fully compatible with the released version
  12. That is the main problem. Unfortunately both sources vaCentral uses are free and unofficial / public databases. Most of the time they can contain wrong data, saved by contributors, or they can come up with some sort of quick solutions themselves (like automated ICAO codes as TR-00085 etc.) I posted my concerns about the sources before but so far no solid solution was found, we will have problems from time to time. (Worst part, they do affect vmsAcars operations too, not limited to phpVMS)
  13. They should be reported at GitHub probably (if there is an open repository for it), any reports will be lost in a blink of an eye here at forum.
  14. If you know the timezone of the airport in question then you can edit and have a correct record. Like in many other errors (like missing ICAO, wrong IATA, old name etc.) an admin can always edit the airport records via admin interface. Good luck BTW, conversion uses Carbon interface and yes it uses the timezone value (it has to)
  15. Do you really need an API Key or authorization for this ? Below is a plain query result without an API key. { "icao": "EGEW", "iata": "WRY", "name": "Westray Airport", "city": "Westray", "country": "GB", "region": "GB-SCT", "tz": "Europe/London", "elevation": 29, "lat": 59.3502998352, "lon": -2.9500000477 } And it will be better if you just use the "code" feature of the forum with "php" language selected. Your cleaned up, more readable code will look like this if you do so. <?php /** * Class and Function List: * Function list: * Classes list: */ /** \file vacentral.php * \brief Text getting data from Vacentral using Curl * \details This Script is used tinstead of Composer installation * \author Leslie Jarrett * \version 1.0 * \date 2025 * \copyright 2025 Leslie Jarrett */ // // GET AIRPORT INFORMATION FROM VACENTRAL // // The following URl string is required to get Airport Information // https://api.vacentral.net/api/airports/[ICAO]?apiKey=[API_KEY] // Where you replace [ICAO] with the Airport code you want to get data forr // and replace [API_KEY] with your user API Key string // Below is a worked example for the airport EGEW // Using my own API KEY which is then hidden from the code // set up your API KEY $ApiKey = 'zzzzzzzzzzzzzzzzzzzzzzzzzzz'; // set up the Airport ICAO code $AirportIcao = 'EGEW'; // set up the first part of the CURL URl $AirportApiUrl = 'https://api.vacentral.net/api/airports/'; // add in the Airport Icao Code $AirportApiUrl = $AirportApiUrl.$AirportIcao; // add in the API Key $AirportApiUrl = $AirportApiUrl.'?apiKey='.$ApiKey; // now process the call to the API using Curl // set the api curl handle $AirportApiHandle = curl_init(); // Will return the response, if false it prints the response curl_setopt($AirportApiHandle, CURLOPT_RETURNTRANSFER, true); // Set the url curl_setopt($AirportApiHandle, CURLOPT_URL,$AirportApiUrl); // Execute the session and store the contents in $AirporApiRaw $AirporApiRaw =curl_exec($AirportApiHandle,); // Closing the session curl_close($AirportApiHandle); // unpack the Json data to PHP array $AirportData = json_decode($AirporApiRaw, true); // the array $AirportData will have the following fields // array(10) { // ["icao"] => string(4) "EGEW" // ["iata"] => string(3) "WRY" // ["name"] => string(15) "Westray Airport" // ["city"] => string(7) "Westray" // ["country"] => string(2) "GB" // ["region"] => string(6) "GB-SCT" // ["tz"] => string(13) "Europe/London" // ["elevation"] => int(29) // ["lat"]=> float(59.3502998352) // ["lon"]=> float(-2.9500000477) // } ?> Have a nice day.
  16. Yeah if they release some changes for the API, improvements like defining avoids, either country or FIR based, those can be easily implemented in the form too. But don't expect everything to be done by phpVMS (or theme developers). Generally what phpVMS offers you a fully working API access system which is capable of two way communications with their servers. And phpVMS already passes more than enough data to that form, in which you can develop your own stuff, apply improvements, following API changes etc. easily. As an example, SimBrief API allows you to define 4 alternates with their routes, also ETOPS alternates etc. but these are not present in the form. Any VA owner or developer can enhance the form as they wish if required by following the main form logic and the API docs. This is why I ended my first post with "Good luck and God speed"
  17. Reference API Docs : https://forum.navigraph.com/t/the-simbrief-api/5298
  18. If you are talking about these, my answer will be "No, because I do not see anything there to be API access compatible". These are mostly for their own planning page (or edit flight plan page). Any API (and phpVMS) user can create lots of features internally on their end, as an example one can allow defining FPL Remarks via their code, or aircraft equipment selection (including PBN) etc. If you check the API documents (of SimBrief) and the form utilizing that API (at phpVMS) you will see how it works, and then you can develop anything you wish to have. Good luck and God speed.
  19. Hi, As far as I know, we are using Laravel Socialite to use oAuth, and all of the options (Discord, IVAO, VATSIM) are provided by the system. I am not sure if you can alter it to work with a totally custom system, but it should be possible. Below are docs related to it; https://laravel.com/docs/10.x/socialite https://socialiteproviders.com/about/ Hope it helps a little
  20. My pleasure, glad it helped a little and gave you some direction If you need to use them for evaluation purposes, I mean like having a check for gear or flap operation speeds you have two options; 1. Custom rule (vmsAcars premium feature, still being enhanced by development) 2. Custom module (running at web, can run when a pirep gets filed and check log entries for some specific text and then compare speed/altitude, apply a penalty or write a comment etc.) Above example is for the web, to display stuff but can give you ideas about how to access the log entries. Good luck for the rest
  21. Hi @ang143 What you want or seek is already a part of vmsAcars log entries, you can see an example below from one of my old reports. Every logged action was being reported back to your phpVMS with location, heading, altitude and speed value. And this is what it looks like nowadays with latest version of vmsAcars. Technically speaking, the values are still reported back and saved in your database, just the textual display is removed (and i think this is better because it gives us more control over the display). Depending on your needs you can still reach them via some custom work (like displaying only, evaluating etc.) As an example, by editing your pireps/show.blade.php you can have something like this. I just added some fields to show you the possibilities, location is there too. @foreach($pirep->acars_logs->sortBy('created_at') as $log) <tr> <td class="col-md-3">{{ $log->created_at->format('d.M.Y H:i') }}</td> <td>{{ $log->log }}</td> <td>{{ $log->altitude_agl.'ft agl | '.$log->altitude_msl.'ft msl' }}</td> <td>{{ $log->gs.'kt gs' }}</td> <td>{{ $log->ias.'kt ias' }}</td> </tr> @endforeach Hope this helps, safe flights.
  22. If you just want to add a link pointing to your WP, edit the menu/nav of your phpVMS theme then. This is just templating and basic html / stylesheet stuff. Check nav.blade.php of your theme, it will probably hold the menu items or at best it will guide you to the file holding menu items. Good luck
  23. We do have some oAuth providers enabled (Discord, IVAO and VATSIM) but they do not provide automated registration, only sign in and account linking options are provided. https://docs.phpvms.net/oauth/discord
  24. @Nabeel, I noticed some unexpected pauses in my VA logs too, from XP12 as @Potus88 mentioned. Will try to test myself during weekend (I will have some free time and public holiday afterwards)
  25. Acars logs would be great, if you can upload them to somewhere and share a link we can investigate. (Kindly check Documents\vmsAcars\logs folder) Also kindly check the AcarsConnect.txt file, which is located at the root of your XP installation, share the contents of it too As far as I remember, whenever you go to any menu XP sends a "sim pause" signal, which is understandable. If this is the case, like you opened a menu and then adjusted settings or some other stuff this can happen (imagine like you do this 7 times and each is around 1 minute, then it will be a total of 7 minutes pause for phpVMS). While sharing the logs, would you please think about the above logic, did you "unintentionally" paused your sim for doing settings etc? Safe flights https://docs.phpvms.net/help#vmsacars
×
×
  • Create New...