Added: favicon, Dashboard, Habits list, some styles, dashboard redirect

This commit is contained in:
2024-12-27 02:06:32 +01:00
parent d33d233f0f
commit 2847231376
17 changed files with 266 additions and 45 deletions

View File

@ -0,0 +1,16 @@
<?php
class DashboardController extends Controller {
public function index() {
$habit = new Habit();
$habits = $habit->getHabitsByUser($_SESSION['user']['id']);
$this->view('dashboard/index', [
'title' => 'Dashboard',
'habits' => $habits,
]);
}
public function reroute(){
$this->redirect('/dashboard');
}
}

View File

@ -2,7 +2,9 @@
class HabitController extends Controller {
public function index() {
// Display the list of habits (to be implemented later)
$habit = new Habit();
$habits = $habit->getHabitsByUser($_SESSION['user']['id']);
$this->view('habits/index', ['title' => 'Habits', 'habits' => $habits]);
}
public function create() {
@ -17,15 +19,12 @@ class HabitController extends Controller {
}
if ($frequency === 'Custom') {
var_dump($_POST);
$daysOfWeek = $_POST['days_of_week'] ?? [];
$daysOfMonth = $_POST['days_of_month'] ?? '*';
$months = $_POST['months'] ?? '*';
// Combine into crontab-like string
$customFrequency = implode(',', $daysOfWeek) . " $daysOfMonth $months";
var_dump($customFrequency);
}
$habit = new Habit();
@ -38,7 +37,7 @@ class HabitController extends Controller {
]);
if ($result) {
//$this->redirect('/habits');
$this->redirect('/habits');
} else {
$this->view('habits/create', ['error' => 'Failed to create habit.']);
}

View File

@ -29,4 +29,18 @@ class Habit {
return false;
}
}
public function getHabitsByUser($userId) {
$stmt = $this->db->prepare("SELECT id, title, frequency, custom_frequency, reward_points, created_at FROM habits WHERE user_id = ?");
$stmt->bind_param("i", $userId);
$stmt->execute();
$result = $stmt->get_result();
$habits = [];
while ($row = $result->fetch_assoc()) {
$habits[] = $row;
}
return $habits;
}
}

View File

@ -1,5 +1,6 @@
<link rel="stylesheet" href="/css/login.css">
<section class="signin">
<link rel="stylesheet" href="/css/form.css">
<section class="form signin">
<div class="header-form">
<img src="/img/logo.jpg" alt="Habit Tracker Logo">
<h1>Sign in to Habit Tracker</h1>

View File

@ -1,5 +1,6 @@
<link rel="stylesheet" href="/css/login.css">
<section class="signin">
<link rel="stylesheet" href="/css/form.css">
<section class="form signup">
<div class="header-form">
<img src="/img/logo.jpg" alt="Habit Tracker Logo">
<h1>Sign up to Habit Tracker</h1>

View File

@ -1,3 +1,44 @@
<h1>Welcome <?= $_SESSION['user']['username']?>!</h1>
<link rel="stylesheet" href="/css/dashboard.css">
<a href="/habits/create">Create new Habit</a>
<section class="dashboard">
<h1>Welcome, <?= htmlspecialchars($_SESSION['user']['username']) ?>!</h1>
<a href="/habits/create" class="btn-primary">Create new habit!</a>
<div class="card-wrapper">
<section class="card upcoming">
<h2>Upcoming</h2>
<div class="habit">
<b>Habit Title</b>
<p>Frequency</p>
<p>Reward points</p>
</div>
</section>
<section class="card recent">
<h2>Recent</h2>
<div class="habit">
<b>Habit Title</b>
<p>Frequency</p>
<p>Reward points</p>
</div>
</section>
<section class="card missed">
<h2>Missed</h2>
<div class="habit">
<b>Habit Title</b>
<p>Frequency</p>
<p>Reward points</p>
</div>
</section>
<section class="card history-graph">
<h2>Graph of History</h2>
</section>
<section class="card streak">
<h2>Streak</h2>
<p>You're current streak is 123 days</p>
<p>Good job!</p>
</section>
</div>
</section>

View File

@ -1,5 +1,7 @@
<section class="habit-create">
<h1><?= $this->get('title', 'Create Habit') ?></h1>
<link rel="stylesheet" href="/css/form.css">
<link rel="stylesheet" href="/css/habits_create.css">
<section class="form habit-create">
<h1 class="header-form"><?= $this->get('title', 'Create Habit') ?></h1>
<?php if ($this->get('error')): ?>
<div class="error" style="color: red; margin-bottom: 1rem;">
@ -19,29 +21,50 @@
</select>
<div id="custom-frequency" style="display: none;">
<label>Days of the Week:</label>
<input type="checkbox" name="days_of_week[]" value="1"> Monday
<input type="checkbox" name="days_of_week[]" value="2"> Tuesday
<input type="checkbox" name="days_of_week[]" value="3"> Wednesday
<input type="checkbox" name="days_of_week[]" value="4"> Thursday
<input type="checkbox" name="days_of_week[]" value="5"> Friday
<input type="checkbox" name="days_of_week[]" value="6"> Saturday
<input type="checkbox" name="days_of_week[]" value="7"> Sunday
<label id="lbl_dow">Days of the Week:</label>
<div class="dow_chb_wrapper">
<label for="dow_mon">Monday</label>
<input type="checkbox" name="days_of_week[]" id="dow_mon" value="1">
</div>
<div class="dow_chb_wrapper">
<label for="dow_tue">Tuesday</label>
<input type="checkbox" name="days_of_week[]" id="dow_tue" value="2">
</div>
<div class="dow_chb_wrapper">
<label for="dow_wed">Wednesday</label>
<input type="checkbox" name="days_of_week[]" id="dow_wed" value="3">
</div>
<div class="dow_chb_wrapper">
<label for="dow_thu">Thursday</label>
<input type="checkbox" name="days_of_week[]" id="dow_thu" value="4">
</div>
<div class="dow_chb_wrapper">
<label for="dow_fri">Friday</label>
<input type="checkbox" name="days_of_week[]" id="dow_fri" value="5">
</div>
<div class="dow_chb_wrapper">
<label for="dow_sat">Saturday</label>
<input type="checkbox" name="days_of_week[]" id="dow_sat" value="6">
</div>
<div class="dow_chb_wrapper">
<label for="dow_sun">Sunday</label>
<input type="checkbox" name="days_of_week[]" id="dow_sun" value="7">
</div>
<label for="days_of_month">Days of the Month:</label>
<label for="days_of_month" id="lbl_dom">Days of the Month:</label>
<input type="text" name="days_of_month" id="days_of_month" placeholder="1,15 (comma-separated)">
<label for="months">Months:</label>
<input type="text" name="months" id="months" placeholder="1,7,12 (comma-separated)">
</div>
<button type="submit">Create Habit</button>
<input type="submit" value="Create Habit">
</form>
</section>
<script>
function toggleCustomFrequency(value) {
const customFrequencyDiv = document.getElementById('custom-frequency');
customFrequencyDiv.style.display = value === 'Custom' ? 'block' : 'none';
customFrequencyDiv.style.display = value === 'Custom' ? 'flex' : 'none';
}
</script>

View File

@ -0,0 +1,35 @@
<link rel="stylesheet" href="/css/habits_dashboard.css">
<section class="habits">
<?php if (empty($this->get('habits'))): ?>
<p>No habits yet. <a href="/habits/create">Create your first habit</a>.</p>
<?php else: ?>
<table>
<thead>
<tr>
<th>Title</th>
<th>Frequency</th>
<th>Custom Schedule</th>
<th>Points</th>
<th>Created At</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($this->get('habits') as $habit): ?>
<tr>
<td><?= htmlspecialchars($habit['title']) ?></td>
<td><?= htmlspecialchars($habit['frequency']) ?></td>
<td><?= htmlspecialchars($habit['custom_frequency'] ?? 'N/A') ?></td>
<td><?= htmlspecialchars($habit['reward_points']) ?></td>
<td><?= htmlspecialchars($habit['created_at']) ?></td>
<td>
<a href="/habits/edit?id=<?= $habit['id'] ?>">Edit</a> |
<a href="/habits/delete?id=<?= $habit['id'] ?>" onclick="return confirm('Are you sure you want to delete this habit?')">Delete</a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<a href="/habits/create">Create new habit!</a>
<?php endif; ?>
</section>

View File

@ -6,6 +6,7 @@
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/global.css">
<link rel="stylesheet" href="/css/vars.css">
<link rel="icon" type="image/x-icon" href="/img/favicon.ico">
</head>
<body>
<header>