public static function getHorairesByLigne($ligne, $date, $heure, $minute, $idTypeSemaine = null) { if (is_null($idTypeSemaine)) { if (!TypeSemaine::getIdType($date)) { return false; } $idTypeSemaine = TypeSemaine::getIdType($date); } else { $idTypeSemaine = [0 => $idTypeSemaine]; } if ($heure == null || $minute == null) { $heureMin = '00:00'; } else { $heureMin = $heure . ':' . $minute; } $results = []; $trouve = false; $idSemaine = DB::table('horaire')->remember(120)->where('idLigne', '=', $ligne)->whereIn('idTypeSemaine', $idTypeSemaine)->groupBy('idTypeSemaine')->lists('idTypeSemaine'); foreach ($idSemaine as $semaine) { $arretsAller = DB::table('horaire')->remember(120)->where('idLigne', '=', $ligne)->where('idTypeSemaine', '=', $semaine)->where('sens', '=', '1')->orderBy('ordre1')->groupBy('ordre1')->lists('idArret'); $arretsRetour = DB::table('horaire')->remember(120)->where('idLigne', '=', $ligne)->where('idTypeSemaine', '=', $semaine)->where('sens', '=', '2')->orderBy('ordre1')->groupBy('ordre1')->lists('idArret'); $premiereCourse = 50; $derniereCourse = 0; foreach ($arretsAller as $arret) { $horairesArret = DB::table('horaire')->remember(120)->where('idLigne', '=', $ligne)->where('idTypeSemaine', '=', $semaine)->where('idArret', $arret)->where('sens', '=', '1')->where('heure', '>', $heureMin)->orderBy('course', 'asc')->lists('heure', 'course'); if ($heureMin != '00:00:00') { foreach ($horairesArret as $course => $horaire) { if ($horaire != '00:00:00' && $course < $premiereCourse) { $premiereCourse = $course; } if ($horaire != '00:00:00' && $course > $derniereCourse) { $derniereCourse = $course; } } } $nomArret = trim(Arret::findNameById($arret)); $results[$semaine]['aller'][$nomArret] = $horairesArret; } if ($heureMin != '00:00:00') { foreach ($results[$semaine]['aller'] as $nomArret => $horaire) { for ($i = $premiereCourse; $i < $derniereCourse + 1; $i++) { if (!isset($horaire[$i])) { $results[$semaine]['aller'][$nomArret][$i] = '00:00:00'; } } foreach ($horaire as $course => $horaireArret) { if ($course < $premiereCourse) { unset($results[$semaine]['aller'][$nomArret][$course]); } } ksort($results[$semaine]['aller'][$nomArret]); } } $premiereCourse = 50; $derniereCourse = 0; foreach ($arretsRetour as $arret) { $horairesArret = DB::table('horaire')->remember(120)->where('idLigne', '=', $ligne)->where('idTypeSemaine', '=', $semaine)->where('idArret', $arret)->where('sens', '=', '2')->where('heure', '>', $heureMin)->orderBy('course', 'asc')->lists('heure'); if ($heureMin != '00:00:00') { foreach ($horairesArret as $course => $horaire) { if ($horaire != '00:00:00' && $course < $premiereCourse) { $premiereCourse = $course; } if ($horaire != '00:00:00' && $course > $derniereCourse) { $derniereCourse = $course; } } } $nomArret = trim(Arret::findNameById($arret)); $results[$semaine]['retour'][$nomArret] = $horairesArret; } if ($heureMin != '00:00:00') { foreach ($results[$semaine]['retour'] as $nomArret => $horaire) { for ($i = $premiereCourse; $i < $derniereCourse + 1; $i++) { if (!isset($horaire[$i])) { $results[$semaine]['retour'][$nomArret][$i] = '00:00:00'; } } foreach ($horaire as $course => $horaireArret) { if ($course < $premiereCourse) { unset($results[$semaine]['retour'][$nomArret][$course]); } } ksort($results[$semaine]['retour'][$nomArret]); } } } return $results; }