Compare commits

..

9 Commits
v1.0.0 ... main

Author SHA1 Message Date
Valentin dce7330f73 fix(homepage) miss removing previous fix 2024-06-22 21:25:48 +02:00
Valentin db71adc9f2 fix(favicon) new icon 2024-06-22 21:19:32 +02:00
Valentin 9d36d93ad6
Update README.MD 2024-06-22 21:03:33 +02:00
Valentin ee12ab5324 fix(home) displaying users favorites... 2024-06-19 17:51:40 +02:00
Maxime H 9801bc99d9
fix(issues) 2024-06-19 17:49:31 +02:00
Valentin c80e41c953 fix(home) direction for 3 branches 2024-06-19 17:08:35 +02:00
Valentin 8d942f4e78 fix(register) fix check request 2024-06-17 11:28:49 +02:00
Maxime H ca48276b2b Add 3 checks 2024-06-17 11:02:42 +02:00
Valentin 3e4cb6ddd9 feat(logs) displaying logs on account page 2024-06-17 10:59:03 +02:00
13 changed files with 103 additions and 46 deletions

View File

@ -30,7 +30,7 @@ Note: This app is not intended for production use, but for personal or education
This section list major frameworks/libraries used
* ![](https://img.shields.io/badge/php-20232A?style=for-the-badge&logo=php)
* ![](https://img.shields.io/badge/SqLite-20232A?style=for-the-badge&logo=mysql)
* ![](https://img.shields.io/badge/MySQL-20232A?style=for-the-badge&logo=mysql)
* ![](https://img.shields.io/badge/Bootstrap-20232A?style=for-the-badge&logo=bootstrap)
<p align="right">(<a href="#readme-top">back to top</a>)</p>
@ -74,7 +74,9 @@ Then, create a user with a database
<p align="right">(<a href="#readme-top">back to top</a>)</p>
## Known issues
- Some stations with RER A doesnt display timetables
## License

View File

@ -70,4 +70,38 @@ $userDetails = getUserDetails($_SESSION['user_id']);
</div>
<button type="submit" class="btn btn-primary">Save Changes</button>
</form>
</div>
</div>
<?php
function getUserLogs($userId) {
global $conn;
try {
$query = $conn->prepare("SELECT logs.ip, logs.date, users.email FROM logs JOIN users ON logs.userId = users.id WHERE logs.userId = ?");
$query->execute([$userId]);
return $query->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
return [];
}
}
$logDetails = getUserLogs($_SESSION['user_id']);
?>
<table class="table mt-4">
<thead>
<tr>
<th>IP</th>
<th>Date</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<?php foreach ($logDetails as $log): ?>
<tr>
<td><?php echo $log['ip']; ?></td>
<td><?php echo $log['date']; ?></td>
<td><?php echo $log['email']; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>

View File

@ -12,8 +12,8 @@ function getStopName($stopId) {
function getFavorites($lineId) {
global $conn;
try {
$query = $conn->prepare("SELECT stopId FROM favorites WHERE lineId = ?");
$query->execute([$lineId]);
$query = $conn->prepare("SELECT stopId FROM favorites WHERE lineId = ? AND userId = ?");
$query->execute([$lineId, $_SESSION['user_id']]);
$result = $query->fetchAll(PDO::FETCH_ASSOC);
return $result;

View File

@ -13,13 +13,15 @@ $directions = [];
if (isset($data['Siri']['ServiceDelivery']['StopMonitoringDelivery'][0]['MonitoredStopVisit'])) {
foreach ($data['Siri']['ServiceDelivery']['StopMonitoringDelivery'][0]['MonitoredStopVisit'] as $visit) {
$vehicleJourney = $visit['MonitoredVehicleJourney'];
if (isset($vehicleJourney['MonitoredCall']['ExpectedArrivalTime'])) {
$direction = $vehicleJourney['DirectionName'][0]['value'];
$expectedArrival = $vehicleJourney['MonitoredCall']['ExpectedArrivalTime'];
if (strpos($vehicleJourney['OperatorRef']['value'], '.' . $lineId . '.' . $lineId . ':')) {
if (isset($vehicleJourney['MonitoredCall']['ExpectedDepartureTime'])) {
$direction = $vehicleJourney['DestinationName'][0]['value'];
$expectedDeparture = $vehicleJourney['MonitoredCall']['ExpectedDepartureTime'];
$departureTime = date('H:i', strtotime($expectedArrival . ' +2 hours'));
$departureTime = date('H:i', strtotime($expectedDeparture . ' +2 hours'));
$currentTime = date('H:i', strtotime('now' . ' +2 hours'));
if ($departureTime > $currentTime) {
if (!isset($directions[$direction])) {
$directions[$direction] = [];
}
@ -28,6 +30,8 @@ if (isset($data['Siri']['ServiceDelivery']['StopMonitoringDelivery'][0]['Monitor
}
}
}
}
}
}
$finalDirections = [];

View File

@ -13,9 +13,10 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$_SESSION['is_admin'] = $user['is_admin'];
header("Location: /");
$log = $conn->prepare("INSERT INTO logs (userId, date) VALUES (:userId, :date)");
$log = $conn->prepare("INSERT INTO logs (userId, date, ip) VALUES (:userId, :date, :ip)");
$log->bindParam(':userId', $user['id']);
$log->bindParam(':date', date('Y-m-d-H-i-s'));
$log->bindParam(':ip', $_SERVER['REMOTE_ADDR']);
$log->execute();
} else {
$errorMessage = "Invalid email or password.";

View File

@ -91,11 +91,11 @@ document.addEventListener('DOMContentLoaded', function() {
if (action === 'add') {
buttonElement.classList.remove('add-stop', 'btn-success');
buttonElement.classList.add('remove-stop', 'btn-danger');
buttonElement.textContent = 'Retirer';
buttonElement.textContent = 'Revoke';
} else {
buttonElement.classList.remove('remove-stop', 'btn-danger');
buttonElement.classList.add('add-stop', 'btn-success');
buttonElement.textContent = 'Ajouter';
buttonElement.textContent = 'Add';
}
buttonElement.removeEventListener('click', arguments.callee);
buttonElement.addEventListener('click', arguments.callee);

View File

@ -14,11 +14,13 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
}
if (!isset($errorMessage)) {
try {
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$query = $conn->prepare("INSERT INTO users (firstName, lastName, email, password) VALUES (:firstName, :lastName, :email, :password)");
$query->bindParam(':firstName', $_POST['firstName']);
$query->bindParam(':lastName', $_POST['lastName']);
$query->bindParam(':email', $_POST['email']);
$query->bindParam(':password', password_hash($_POST['password'], PASSWORD_DEFAULT));
$query->bindParam(':password', $password);
$query->execute();
$query = $conn->prepare("SELECT COUNT(*) as count FROM users");
@ -33,6 +35,9 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
header("Location: login.php");
exit();
} catch (PDOException $e) {
$errorMessage = "Please fill correct values";
}
}
}

View File

@ -3,7 +3,8 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Subway schedules</title>
<title>Subway</title>
<link rel="icon" href="assets/logo/favicon.png">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<?php
if (!isset($_SESSION['user_id'])) {

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@ -11,11 +11,17 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['stopId'], $_POST['lin
try {
if ($action === 'add') {
$stmt = $conn->prepare("INSERT INTO favorites (userId, stopId, lineId) VALUES (?, ?, ?)");
$stmt->execute([$userId, $stopId, $lineId]);
$query = $conn->prepare("SELECT * FROM favorites WHERE userId = ? AND stopId = ? AND lineId = ?");
$query->execute([$userId, $stopId, $lineId]);
$existingFavorite = $query->fetch();
if (!$existingFavorite) {
$query = $conn->prepare("INSERT INTO favorites (userId, stopId, lineId) VALUES (?, ?, ?)");
$query->execute([$userId, $stopId, $lineId]);
}
} elseif ($action === 'remove') {
$stmt = $conn->prepare("DELETE FROM favorites WHERE userId = ? AND stopId = ? AND lineId = ?");
$stmt->execute([$userId, $stopId, $lineId]);
$query = $conn->prepare("DELETE FROM favorites WHERE userId = ? AND stopId = ? AND lineId = ?");
$query->execute([$userId, $stopId, $lineId]);
}
echo json_encode(['success' => true]);
} catch (PDOException $e) {

View File

@ -11,7 +11,10 @@ try {
lastName VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
is_admin BOOLEAN NOT NULL DEFAULT 0
is_admin BOOLEAN NOT NULL DEFAULT 0,
CHECK (LENGTH(firstName) >= 2),
CHECK (LENGTH(lastName) >= 2),
CHECK (email REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$')
)");
$conn->exec("CREATE TABLE IF NOT EXISTS favorites (
@ -24,6 +27,7 @@ try {
$conn->exec("CREATE TABLE IF NOT EXISTS logs (
userId INT NOT NULL,
date DATETIME NOT NULL,
ip VARCHAR(255) NOT NULL,
FOREIGN KEY (userId) REFERENCES users(id)
)");