request->getGet('period')) { $period = $this->request->getGet('period'); setcookie( "period", $period, time()+(60*60*24*30) ); } else $period = 'today'; $tplData['period'] = $period; switch ($period) { case 'today': //today $datediff = (1*24*60*60); $backto = time() - $datediff; $tplData['periodString'] = 'In the last day'; break; case 'week': //last week $datediff = (7*24*60*60); $backto = time() - $datediff; $tplData['periodString'] = 'In the last week'; break; case 'month': //last month $datediff = (30*24*60*60); $backto = time()-$datediff; $tplData['periodString'] = 'In the last month'; break; case 'year': //last year $datediff = (365*24*60*60); $backto = time()-$datediff; $tplData['periodString'] = 'In the last year'; break; case 'allTime'://always $datediff = (50000*24*60*60); $backto = time() - $datediff; $tplData['periodString'] = 'all time'; break; default: throw \CodeIgniter\Exceptions\PageNotFoundException::forPageNotFound(); } //select the category to display $catId = $this->request->getGet('cat'); if ($catId) { // Check if the cat exists $exists = $carCatModel->find($catId); if (!$exists) throw \CodeIgniter\Exceptions\PageNotFoundException::forPageNotFound(); $carCatId = $catId; } else { $first = $carCatModel->select('id')->findAll(1); $carCatId = $first[0]->id; } $tplData['carCatId'] = $carCatId; // Get cars categories $categoriesList = $carCatModel->select('id, name, count(carId) as totalCars')->groupBy('id')->findAll(); $currCat = $carCatModel->find($carCatId); $carsCatList = $carCatModel->select('carId')->where('id', $carCatId)->findAll(); $tplData['currCat'] = $currCat; $tplData['carCategoriesList'] = $categoriesList; $carsCatIds = []; foreach ($carsCatList as $car) $carsCatIds[] = $car->carId; //UGLY: there is some category that have no car assigned so create a fake $carsql for them //to prevent errors in the generated queries /* $carsql = '0'; if($carsql == ''){ $carsql = " B.car_id='NonExistentCarIdFindThisIfYouCan'"; } */ /* ################################ ## MOST ACTIVE USER OF THIS CATEGORY BASED ON LAPS RUN ## WITH A CAR OF THIS CATEGORY ################################ */ $builder = $this->db->table('races r'); $builder->select('r.user_id, COUNT(*) AS count, u.username'); $builder->join('users u', 'u.id = r.user_id'); $builder->where('UNIX_TIMESTAMP(r.timestamp) >', $backto); $builder->whereIn('r.car_id', $carsCatIds); $builder->groupBy('r.user_id'); $builder->orderBy('count DESC'); $tplData['users'] = []; $query = $builder->get(); if ($query && $query->getNumRows() > 0) $tplData['users'] = $query->getResult(); /* ################################ ## SELECT THE BEST LAPS FOR EACH TRACK ## WITH A CAR OFT HIS CATEGORY ################################ */ /* $builder = $this->db->table('laps l'); $builder->select('l.race_id, r.track_id, r.car_id, r.user_id, r.timestamp, l.wettness, min(l.laptime) as bestlap, c.name AS car_name, t.name AS track_name, u.username'); $builder->join('races r', 'l.race_id = r.id'); $builder->join('cars c', 'c.id = r.car_id'); $builder->join('tracks t', 't.id = r.track_id'); $builder->join('users u', 'u.id = r.user_id'); $builder->where('UNIX_TIMESTAMP(r.timestamp) >', $backto); $builder->whereIn('r.car_id', $carsCatIds); $builder->groupBy(['r.track_id', 'l.wettness']); */ $builder = $this->db->table('bests_laps bl'); $builder->join('laps l', 'l.id = bl.lap_id'); $builder->select('l.race_id, r.track_id, r.car_id, r.user_id, r.timestamp, l.wettness, bl.laptime AS bestlap, c.name AS car_name, t.name AS track_name, u.username'); $builder->join('races r', 'r.id = bl.race_id'); $builder->join('cars c', 'c.id = bl.car_id'); $builder->join('tracks t', 't.id = bl.track_id'); $builder->join('users u', 'u.id = bl.user_id'); $builder->where('UNIX_TIMESTAMP(r.timestamp) >', $backto); $builder->where('bl.car_cat', $carCatId); $builder->groupBy(['r.track_id', 'l.wettness']); $tplData['mylaps'] = []; $query = $builder->get(); if ($query && $query->getNumRows() > 0) $tplData['mylaps'] = $query->getResult(); $tplData['tracks'] = []; $builder = $this->db->table('races'); $builder->select('track_id, COUNT(*) AS count'); $builder->where('UNIX_TIMESTAMP(timestamp) >', $backto); $builder->whereIn('car_id', $carsCatIds); $builder->groupBy('track_id'); $builder->orderBy('count DESC'); $query = $builder->get(); if ($query && $query->getNumRows() > 0) { $tracks = $query->getResult(); $tracksIds = []; foreach($tracks as $track) $tracksIds[] = $track->track_id; $tracksModel = new TracksModel(); $tracksNames = []; $tracksNamesList = $tracksModel->select('id, name')->whereIn('id', $tracksIds)->findAll(); foreach($tracksNamesList as $name) $tracksNames[$name->id] = $name->name; foreach($tracksIds as $id) { if (!key_exists($id, $tracksNames)) $tracksNames[$id] = "$id (Modded)"; } $tplData['tracks'] = $tracks; $tplData['tracksNames'] = $tracksNames; } $tplData['cars'] = []; $builder = $this->db->table('races r'); $builder->join('cars c', 'c.id = r.car_id'); $builder->select('r.car_id, COUNT(r.car_id) as count, c.name'); $builder->where('UNIX_TIMESTAMP(r.timestamp) >', $backto); $builder->whereIn('r.car_id', $carsCatIds); $builder->groupBy('r.car_id'); $builder->orderBy('count DESC'); $query = $builder->get(); if ($query && $query->getNumRows() > 0) $tplData['cars'] = $query->getResult(); echo get_header('Home'); echo view('main', $tplData); echo get_footer(); } public function error404() { return view('404'); } }