LanceDesigns Posted February 15, 2015 Report Posted February 15, 2015 Hey Guys! So I am developing my pilots center, and I had successfully modified the search form and results form. I tried using Simpilot's addon, but it is not compatible with the current PHPvms. Because I have over 8000 routes, it takes over 30 seconds for it to load. Is there a way where I can limit how many routes it loads at first so it can load faster? I tried pagination, but it still does the same thing (loads all at first then puts it in order). Attached is a photo of my schedules/view page. Is there a way where I can have a search form first, then display the schedules instead of having the schedules and search form? Quote
freshJet Posted February 15, 2015 Report Posted February 15, 2015 If you go into your core/modules/Schedules.php, look at the index() function and you should find a line similar to $this->show('schedules_results.tpl'); (or .php). Just remove that and it will not display when you open the schedules page. Was a little confused with the screenshot, thought it was an admin center (which is obviously what the author intended it to be). Quote
LanceDesigns Posted February 16, 2015 Author Report Posted February 16, 2015 Thanks! Ill check it out right now. You like the look? EDIT: It still isnt working. Below is the code of Schedulesdata.class.php Can i change something here? Quote
freshJet Posted February 16, 2015 Report Posted February 16, 2015 The class is fine, it's the module you're concerned with. Can you paste the code for the index function of the core/modules/Schedules.php? Quote
LanceDesigns Posted February 16, 2015 Author Report Posted February 16, 2015 Yea, Here it is: <?php /** * phpVMS - Virtual Airline Administration Software * Copyright © 2008 Nabeel Shahzad * For more information, visit www.phpvms.net * Forums: http://www.phpvms.net/forum * Documentation: http://www.phpvms.net/docs * * phpVMS is licenced under the following license: * Creative Commons Attribution Non-commercial Share Alike (by-nc-sa) * View license.txt in the root, or visit http://creativecommo...s/by-nc-sa/3.0/ * * @author Nabeel Shahzad * @copyright Copyright © 2008, Nabeel Shahzad * @link http://www.phpvms.net * @license http://creativecommo...s/by-nc-sa/3.0/ */ class Schedules extends CodonModule { /** * Schedules::index() * * @return */ public function index() { $this->view(); } /** * Schedules::view() * * @return */ public function view() { if (isset($this->post->action) && $this->post->action == 'findflight') { $this->FindFlight(); return; } $this->showSchedules(); } /** * Schedules::detail() * * @param string $routeid * @return */ public function detail($routeid = '') { $this->details($routeid); } /** * Schedules::details() * * @param string $routeid * @return */ public function details($routeid = '') { //$routeid = $this->get->id; if (!is_numeric($routeid)) { preg_match('/^([A-Za-z]{3})(\d*)/', $routeid, $matches); $code = $matches[1]; $flightnum = $matches[2]; $params = array('s.code' => $code, 's.flightnum' => $flightnum); } else { $params = array('s.id' => $routeid); } $schedule = SchedulesData::getScheduleDetailed($routeid); $this->set('schedule', $schedule); $this->render('schedule_details.tpl'); $this->render('route_map.tpl'); } /** * Schedules::brief() * * @param string $routeid * @return */ public function brief($routeid = '') { if ($routeid == '') { $this->set('message', 'You must be logged in to access this feature!'); $this->render('core_error.tpl'); return; } $schedule = SchedulesData::getScheduleDetailed($routeid); $this->set('schedule', $schedule); $this->render('schedule_briefing.tpl'); } /** * Schedules::boardingpass() * * @param mixed $routeid * @return */ public function boardingpass($routeid) { if ($routeid == '') { $this->set('message', 'You must be logged in to access this feature!'); $this->render('core_error.tpl'); return; } $schedule = SchedulesData::getScheduleDetailed($routeid); $this->set('schedule', $schedule); $this->render('schedule_boarding_pass.tpl'); } /** * Schedules::bids() * * @return */ public function bids() { if (!Auth::LoggedIn()) return; $this->set('bids', SchedulesData::GetBids(Auth::$pilot->pilotid)); $this->render('schedule_bids.tpl'); } /** * Schedules::addbid() * * @return */ public function addbid() { if (!Auth::LoggedIn()) return; $routeid = $this->get->id; if ($routeid == '') { echo 'No route passed'; return; } // See if this is a valid route $route = SchedulesData::findSchedules(array('s.id' => $routeid)); if (!is_array($route) && !isset($route[0])) { echo 'Invalid Route'; return; } CodonEvent::Dispatch('bid_preadd', 'Schedules', $routeid); /* Block any other bids if they've already made a bid */ if (Config::Get('DISABLE_BIDS_ON_BID') == true) { $bids = SchedulesData::getBids(Auth::$pilot->pilotid); # They've got somethin goin on if (count($bids) > 0) { echo 'Bid exists!'; return; } } $ret = SchedulesData::AddBid(Auth::$pilot->pilotid, $routeid); CodonEvent::Dispatch('bid_added', 'Schedules', $routeid); if ($ret == true) { echo 'Bid added'; } else { echo 'Already in bids!'; } } /** * Schedules::removebid() * * @return */ public function removebid() { if (!Auth::LoggedIn()) return; SchedulesData::RemoveBid($this->post->id); } /** * Schedules::showSchedules() * * @return */ public function showSchedules() { $depapts = OperationsData::GetAllAirports(); $equip = OperationsData::GetAllAircraftSearchList(true); $airlines = OperationsData::GetAllAirlines(); $this->set('airlines', $airlines); #deprecated $this->set('airline_list', $airlines); $this->set('depairports', $depapts); $this->set('equipment', $equip); # deprecated $this->set('aircraft_list', $equip); $this->render('schedule_searchform.tpl'); # Show the routes. Remote this to not show them. $schedules = SchedulesData::getSchedules(); # Do some filtering and whatnots, take it out of the template... $today = getdate(); $week_number = intval(($today['mday'] - 1) / 7) + 1; $current_day == date('w'); $var_name = 'week'.$week_number; # query once, save for later if(Config::get('SCHEDULES_ONLY_LAST_PIREP') === true && Auth::LoggedIn() == true) { $pirep_list = PIREPData::findPIREPS(array( 'p.pilotid' => Auth::$pilot->pilotid, 'p.accepted' => PIREP_ACCEPTED ), 1); // return only one } foreach($schedules as $key => $s) { # should we skip schedules based on day of week? if(Config::get('CHECK_SCHEDULE_DAY_OF_WEEK') === true) { if(isset($s->{$var_name}) && !empty($s->{$var_name})) { # check if today is in the active list for this week if(@substr_count($s->{$var_name}, $current_day) == 0) { unset($schedules[$key]); continue; } } else { if(substr_count($s->daysofweek, date('w')) == 0) { unset($schedules[$key]); continue; } } } # remove this schedule from the list if there's a bid on it if(Config::get('DISABLE_SCHED_ON_BID') === true && $route->bidid != 0) { unset($schedules[$key]); continue; } /* This means the aircraft rank level is higher than what the pilot's ranklevel, so just do "continue" and move onto the next route in the list */ if(Config::get('RESTRICT_AIRCRAFT_RANKS') === true && Auth::LoggedIn()) { if($route->aircraftlevel > Auth::$pilot->ranklevel) { unset($schedules[$key]); continue; } } if(Config::get('SCHEDULES_ONLY_LAST_PIREP') === true && Auth::LoggedIn() == true) { if(count($pirep_list) > 0) { # IF the arrival airport doesn't match the departure airport if($pirep_list[0]->arricao != $s->depicao) { unset($schedules[$key]); continue; } } } } // end foreach schedules $this->set('allroutes', $schedules); $this->set('schedule_list', $schedules); $this->render('schedule_list.tpl'); } /** * Schedules::findFlight() * * @return */ public function findFlight() { $params = array(); if($this->post->airlines != '') { $params['s.code'] = $this->post->airlines; } if ($this->post->depicao != '') { $params['s.depicao'] = $this->post->depicao; } if ($this->post->arricao != '') { $params['s.arricao'] = $this->post->arricao; } if ($this->post->equipment != '') { $params['a.name'] = $this->post->equipment; } if ($this->post->distance != '') { if ($this->post->type == 'greater') $value = '> '; else $value = '< '; $value .= $this->post->distance; $params['s.distance'] = $value; } $params['s.enabled'] = 1; $schedule_list = SchedulesData::findSchedules($params); $this->set('allroutes', $schedule_list); #deprecated $this->set('schedule_list', $schedule_list); $this->render('schedule_results.tpl'); } /** * Schedules::statsdaysdata() * * @param mixed $routeid * @return */ public function statsdaysdata($routeid) { $schedule = SchedulesData::findSchedules(array('s.id' => $routeid)); $schedule = $schedule[0]; // Last 30 days stats $data = PIREPData::getIntervalDataByDays(array( 'p.code' => $schedule->code, 'p.flightnum' => $schedule->flightnum, ), 30); $this->create_line_graph('Schedule Flown Counts', $data); } /** * Schedules::create_line_graph() * * @param mixed $title * @param mixed $data * @return */ protected function create_line_graph($title, $data) { if (!$data) { $data = array(); } $titles = array(); $bar_titles = array(); foreach ($data as $val) { $titles[] = $val->ym; $values[] = floatval($val->total); } OFCharts::add_data_set($titles, $values); echo OFCharts::create_line_graph($title); } } Quote
freshJet Posted February 16, 2015 Report Posted February 16, 2015 Take $this->showSchedules(); out of public function view() Quote
LanceDesigns Posted February 16, 2015 Author Report Posted February 16, 2015 If I do that, the search form does not appear. Is there a way I can limit the amount of schedules that are returned instead? Quote
StartVM Posted February 16, 2015 Report Posted February 16, 2015 Replace your SchedulesData.class.php with this file http://pastebin.com/YYs8UF4w The default load is set to 500 schedules. If you wish to change this, the value is held on line 55. Quote
StartVM Posted February 16, 2015 Report Posted February 16, 2015 The class is fine, it's the module you're concerned with. Can you paste the code for the index function of the core/modules/Schedules.php? The class controls the module. Check out my last post on the thread. Quote
LanceDesigns Posted February 16, 2015 Author Report Posted February 16, 2015 Chase, Thanks for Commenting on the post. I am actually not running that version PHPvms. I am running the extended version. Here is my Schedulesdata.class.php: http://pastebin.com/VDd72pWT Quote
freshJet Posted February 19, 2015 Report Posted February 19, 2015 Just to clarify, you say you want the form to be displayed and then the schedules? By this, do you mean all schedules are hidden until the form is submitted? If you didn't, this would work far better. Quote
freshJet Posted February 24, 2015 Report Posted February 24, 2015 Going back to this because I forgot to share my solution. Although you said you were happy with that one, it's not ideal further down the line because if you for some reason need to load all your schedules it will only show 500. So, take out the $count = '500'. Instead, phpVMS has a few things included by default to accomodate the thing you wanted. In core/modules/Schedules/Schedules.php, you'll see around line 169 and 170 it says: # Show the routes. Remote this to not show them. $this->set('allroutes', SchedulesData::GetSchedules()); Do what it says and remote the $this->set ... part: # Show the routes. Remote this to not show them. # $this->set('allroutes', SchedulesData::GetSchedules()); That will hide the routes when you first load the schedules page, leaving only the form. It's as simple as adding '#'. After that, I recommend you use pagination like you mentioned in the first post, because loading all flights from major hubs like KPHX and KPHL might take a while. Quote
Boogace Posted May 10, 2015 Report Posted May 10, 2015 Hi Guys I have the same problem but all my days are selected for example I have flight number 0001 - 0124 flight numbers 1- 3 not showing and random others, I have been into each flight and checked all is ok.. can anyone help ? Wazza Quote
ahughes3 Posted February 26, 2016 Report Posted February 26, 2016 Just saw this post and tried removing the line as mentioned above. Mine is formatted as so; # Show the routes. Remote this to not show them. #$schedules = SchedulesData::getSchedules(); This now makes my schedule search form show up nicely but I get an additional error relating to the foreach() function just underneath it in the Schedules.php file. The code that is throwing the error is; foreach($schedules as $key => $s) { # should we skip schedules based on day of week? if(Config::get('CHECK_SCHEDULE_DAY_OF_WEEK') === true) { if(isset($s->{$var_name}) && !empty($s->{$var_name})) { # check if today is in the active list for this week if(@substr_count($s->{$var_name}, $current_day) == 0) { unset($schedules[$key]); continue; } } else { if(substr_count($s->daysofweek, date('w')) == 0) { unset($schedules[$key]); continue; } } } # remove this schedule from the list if there's a bid on it if(Config::get('DISABLE_SCHED_ON_BID') === true && $route->bidid != 0) { unset($schedules[$key]); continue; } /* This means the aircraft rank level is higher than what the pilot's ranklevel, so just do "continue" and move onto the next route in the list */ if(Config::get('RESTRICT_AIRCRAFT_RANKS') === true && Auth::LoggedIn()) { if($route->aircraftlevel > Auth::$pilot->ranklevel) { unset($schedules[$key]); continue; } } if(Config::get('SCHEDULES_ONLY_LAST_PIREP') === true && Auth::LoggedIn() == true) { if(count($pirep_list) > 0) { # IF the arrival airport doesn't match the departure airport if($pirep_list[0]->arricao != $s->depicao) { unset($schedules[$key]); continue; } } } } It looks to me like the foreach statement is calling on the $schedules that I just commented out. I have tried making this $schedules = SchedulesData(); but that didn't seem to work. Any help anyone can give? Thank you. Quote
web541 Posted February 26, 2016 Report Posted February 26, 2016 try commenting out this part $this->set('allroutes', $schedules); to this # $this->set('allroutes', $schedules); and keep $schedules = SchedulesData::getSchedules(); Quote
mseiwald Posted February 26, 2016 Report Posted February 26, 2016 That doesnt make much sense as the function would still query all schedules that way. Instead just use if in the template file. if($schedules) foreach($schedules as $whatever) Quote
ahughes3 Posted February 26, 2016 Report Posted February 26, 2016 Ok I can confirm that commenting out; $this->set('allroutes', $schedules); does indeed result in the same original memory error. Thank you anyway web541 as always. That doesnt make much sense as the function would still query all schedules that way. Instead just use if in the template file. if($schedules) foreach($schedules as $whatever) Not sure what you mean here mseiwald. Do you mean include the "if" statement in the schedule_searchform.php? Quote
ahughes3 Posted February 26, 2016 Report Posted February 26, 2016 Nope I'm lost lol. I've had an attempt at putting an if statement at the top of the schedule_searchform.php and clearly I know even less about php than I thought. Quote
mseiwald Posted February 27, 2016 Report Posted February 27, 2016 No it is The foreach Loop in schedule_results.php Quote
ahughes3 Posted February 28, 2016 Report Posted February 28, 2016 No it is The foreach Loop in schedule_results.php Ok, bear with me as I'm just learning PHP and just trying to understand this. I get the IF statement at the top of the page is just checking there are actually any routes. The bit further down in effect says, from the $schedules_list array, set each to $schedule. From this point all the echo statements are there just to show routes in separate entities on the resulting page. (tell me if I'm mistaken). So, I am assuming that for your comment, it would need to go inside the existing foreach statement in order to turn the already created $schedules variable into something else such as $whatever, yes? What I don't get, is how this would stop the routes still being shown. <?php if(!defined('IN_PHPVMS') && IN_PHPVMS !== true) { die(); } ?> <?php if(!$schedule_list) { echo '<p align="center">No routes have been found!</p>'; return; } ?> <table id="tabledlist" class="tablesorter"> <thead> <tr> <th>Flight Info</th> <th>Options</th> </tr> </thead> <tbody> <?php foreach($schedule_list as $schedule) { ?> <tr> <td> <a href="<?php echo url('/schedules/details/'.$schedule->id);?>"><?php echo $schedule->code . $schedule->flightnum?> <?php echo '('.$schedule->depicao.' - '.$schedule->arricao.')'?> </a> <br /> <strong>Departure: </strong><?php echo $schedule->deptime;?> <strong>Arrival: </strong><?php echo $schedule->arrtime;?><br /> <strong>Equipment: </strong><?php echo $schedule->aircraft; ?> (<?php echo $schedule->registration;?>) <strong>Distance: </strong><?php echo $schedule->distance . Config::Get('UNITS');?> Quote
mseiwald Posted February 28, 2016 Report Posted February 28, 2016 I had a look at the module now and you were right its actually in the module where you commented out this: # Show the routes. Remote this to not show them. // $schedules = SchedulesData::getSchedules(); a bit below is this: foreach($schedules as $key => $s) { and the if statement needs to go there like: if($schedules) foreach($schedules as $key => $s) { Quote
ahughes3 Posted February 29, 2016 Report Posted February 29, 2016 Yep, sorted it now thank you. Now showing the form correctly. Just noticed that the events module from you (crazy creatives) does the same thing. When trying to add a scheduled flight to an event, I get a php memory error. When I look at the code, it's the same issue. The function is trying to show all schedules. I was thinking, it would make more sense for the addflights.php file to also have a form which is preset with the depicao and the arricao and then the form shows only those routes that apply, rather than all routes. It's the function addflights1 that looks like it's calling all schedules. Would there be a way to stop all the schedules showing as with the above and just call the relevant schedules using the ICAOs? Quote
mseiwald Posted March 1, 2016 Report Posted March 1, 2016 For that please open a topic in my own support forum here: http://forum.crazycreatives.com/forum/14-module-issues/ I dont really want to hijack this forum here for support on my payware modules. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.