initial commit

This commit is contained in:
root
2026-03-26 15:03:38 +07:00
commit 6464c750f2
19 changed files with 2129 additions and 0 deletions

83
views/notes.php Normal file
View File

@@ -0,0 +1,83 @@
<?php
if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['create_note'])) {
$stmt = $pdo->prepare("INSERT INTO notes (title, content, owner_id) VALUES (?, ?, ?)");
$stmt->execute([$_POST['title'], $_POST['content'], $user_id]);
}
if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['share_note'])) {
$n_id = $_POST['note_id'];
$share = $_POST['share_target']; // 'user_1'
$parts = explode('_', $share);
$stmt = $pdo->prepare("INSERT INTO note_shares (note_id, share_type, share_id) VALUES (?, ?, ?)");
$stmt->execute([$n_id, $parts[0], $parts[1]]);
$n = query("SELECT title FROM notes WHERE id=?", [$n_id])->fetch();
$msg = "A note '{$n['title']}' has been shared with you.";
if($parts[0] === 'user') notify_user($parts[1], $msg);
else notify_group($parts[1], $msg);
}
// Fetch Notes
$user_groups = get_user_groups($user_id);
$my_group_ids = array_column($user_groups, 'id');
$group_in = implode(',', array_fill(0, count($my_group_ids), '?')) ?: '0';
$sql = "SELECT n.*, (n.owner_id = ?) as is_mine FROM notes n
LEFT JOIN note_shares ns ON n.id = ns.note_id
WHERE n.owner_id = ?
OR (ns.share_type='user' AND ns.share_id = ?)
OR (ns.share_type='group' AND ns.share_id IN ($group_in))
GROUP BY n.id ORDER BY n.created_at DESC";
$params = array_merge([$user_id, $user_id, $user_id], $my_group_ids);
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$notes = $stmt->fetchAll();
$all_users = query("SELECT id, username FROM users WHERE id != ?", [$user_id])->fetchAll();
$all_groups = query("SELECT * FROM groups")->fetchAll();
?>
<div class="header">
<h1>Markdown Notes</h1>
</div>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<div style="display:grid; grid-template-columns: 1fr 2fr; gap:1.5rem;">
<div class="card">
<h3>Create Note</h3>
<form method="POST" style="margin-top:1rem;">
<div class="form-group"><input type="text" name="title" class="form-control" placeholder="Note Title" required></div>
<div class="form-group">
<textarea name="content" class="form-control" placeholder="Markdown supported..." style="min-height:200px;" required></textarea>
</div>
<button type="submit" name="create_note" class="btn">Save Note</button>
</form>
</div>
<div class="card">
<h3>My Notes</h3>
<?php foreach($notes as $n): ?>
<div style="border:1px solid var(--border); border-radius:1rem; padding:1.5rem; margin-bottom:1.5rem;">
<div style="display:flex; justify-content:space-between; margin-bottom:1rem;">
<h4 style="font-size:1.2rem; color:var(--primary);"><?= htmlspecialchars($n['title']) ?> <?= !$n['is_mine'] ? '<span class="badge" style="background:#10B981; font-size:10px;">Shared</span>' : '' ?></h4>
<?php if($n['is_mine']): ?>
<form method="POST" style="display:inline; display:flex; gap:0.5rem;">
<input type="hidden" name="note_id" value="<?= $n['id'] ?>">
<select name="share_target" class="form-control" style="width:auto; padding:0.25rem;">
<?php foreach($all_users as $u): ?><option value="user_<?= $u['id'] ?>">User: <?= htmlspecialchars($u['username']) ?></option><?php endforeach; ?>
<?php foreach($all_groups as $g): ?><option value="group_<?= $g['id'] ?>">Group: <?= htmlspecialchars($g['name']) ?></option><?php endforeach; ?>
</select>
<button type="submit" name="share_note" class="btn btn-sm">Share</button>
</form>
<?php endif; ?>
</div>
<div class="markdown-body" style="background:var(--bg); padding:1rem; border-radius:0.5rem; font-size:0.95rem;">
<script>document.write(marked.parse(`<?= str_replace(array('\\', '`', '$'), array('\\\\', '\\`', '\\$'), (string)$n['content']) ?>`));</script>
</div>
</div>
<?php endforeach; ?>
<?php if(!$notes): ?><p>No notes written yet.</p><?php endif; ?>
</div>
</div>