summaryrefslogtreecommitdiff
path: root/cgi
diff options
context:
space:
mode:
authorNiclas Dobbertin <niclas.dobbertin@mailbox.org>2026-07-10 11:51:09 +0200
committerNiclas Dobbertin <niclas.dobbertin@mailbox.org>2026-07-10 11:51:09 +0200
commit5aa8e0d2dafadabbe3796f63741868a9b0d17a5c (patch)
tree8f3177d3c2e8dbebd3b1ad04aa7b8fa6ff060c5c /cgi
parentc6c842b93c616a690546c6dd0a029f578ecf5769 (diff)
move into subdirs
Diffstat (limited to 'cgi')
-rw-r--r--cgi/add_participant.py87
-rw-r--r--cgi/create_meeting.py55
-rw-r--r--cgi/init_sqlite.py17
-rw-r--r--cgi/view_meeting.py45
4 files changed, 204 insertions, 0 deletions
diff --git a/cgi/add_participant.py b/cgi/add_participant.py
new file mode 100644
index 0000000..7431b3b
--- /dev/null
+++ b/cgi/add_participant.py
@@ -0,0 +1,87 @@
+#!/usr/bin/env python3
+
+import os
+import sqlite3
+
+db_path = "terminfinder_db.sqlite"
+
+if not os.path.exists(db_path):
+ print(f"DB named {db_path} does not exist!")
+ exit(1)
+
+con = sqlite3.connect(db_path)
+cur = con.cursor()
+
+
+def add_participant(meeting_id, part_name, data):
+ select = cur.execute(
+ "SELECT participants FROM meeting WHERE meeting_id = ?;", (meeting_id,)
+ )
+ participants = select.fetchone()[0]
+ if participants is not None and part_name in participants.split(","):
+ print("Participant name already taken!")
+ else:
+ cur.execute(
+ "UPDATE meeting SET participants = ? WHERE meeting_id = ?;",
+ (
+ (
+ participants + "," + part_name
+ if participants is not None
+ else part_name
+ ),
+ meeting_id,
+ ),
+ )
+ for datum in data:
+ if datum[1]:
+ select = cur.execute(
+ f"SELECT confirming FROM meeting_dates_{meeting_id} WHERE date = ?;",
+ (datum[0],),
+ )
+ result = select.fetchone()
+ new_confirming = (
+ result[0] + "," + part_name if result[0] is not None else part_name
+ )
+ cur.execute(
+ f"UPDATE meeting_dates_{meeting_id} SET confirming = ? WHERE date = ?;",
+ (
+ new_confirming,
+ datum[0],
+ ),
+ )
+ else:
+ select = cur.execute(
+ f"SELECT declining FROM meeting_dates_{meeting_id} WHERE date = ?;",
+ (datum[0],),
+ )
+ result = select.fetchone()
+ new_declining = (
+ result[0] + "," + part_name if result[0] is not None else part_name
+ )
+ cur.execute(
+ f"UPDATE meeting_dates_{meeting_id} SET declining = ? WHERE date = ?;",
+ (
+ new_declining,
+ datum[0],
+ ),
+ )
+ con.commit()
+
+
+meeting_id = "meet1"
+part_name = "niklas"
+data = [
+ ("2026-01-01_12-00", True),
+ ("2026-01-01_13-00", False),
+ ("2026-01-02_14-00", True),
+]
+add_participant(meeting_id, part_name, data)
+
+meeting_id = "meet1"
+part_name = "philip"
+data = [
+ ("2026-01-01_12-00", False),
+ ("2026-01-01_13-00", True),
+ ("2026-01-02_14-00", True),
+]
+add_participant(meeting_id, part_name, data)
diff --git a/cgi/create_meeting.py b/cgi/create_meeting.py
new file mode 100644
index 0000000..01615c2
--- /dev/null
+++ b/cgi/create_meeting.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+
+import os
+import sqlite3
+
+db_path = "terminfinder_db.sqlite"
+
+if not os.path.exists(db_path):
+ print(f"DB named {db_path} does not exist!")
+ exit(1)
+
+con = sqlite3.connect(db_path)
+cur = con.cursor()
+
+
+def create_meeting(meeting_id, meeting_name, meeting_description, meeting_dates):
+ select = cur.execute(
+ "SELECT meeting_id FROM meeting;")
+ meeting_ids = select.fetchall()
+ if meeting_id in (x[0] for x in meeting_ids):
+ print("meeting_id is already taken!")
+ else:
+ cur.execute(
+ "INSERT INTO meeting (meeting_id, title, description, possible_dates, participants) VALUES (?, ?, ?, ?, ?);",
+ (
+ meeting_id,
+ meeting_name,
+ meeting_description,
+ meeting_dates,
+ None,
+ ),
+ )
+ cur.execute(
+ f"CREATE TABLE meeting_dates_{meeting_id}(date, confirming, declining, meeting_id, PRIMARY KEY (date) FOREIGN KEY (meeting_id) REFERENCES meeting(meeting_id))"
+ )
+
+ for date in meeting_dates.split(","):
+ cur.execute(
+ f"INSERT INTO meeting_dates_{meeting_id} (date, confirming, declining, meeting_id) VALUES (?, ?, ?, ?);",
+ (date, None, None, meeting_id),
+ )
+ con.commit()
+
+
+meeting_id = "meet1"
+meeting_name = "My first meeting"
+meeting_description = "This is a test meeting description"
+meeting_dates = "2026-01-01_12-00,2026-01-01_13-00,2026-01-02_14-00"
+create_meeting(meeting_id, meeting_name, meeting_description, meeting_dates)
+
+meeting_id = "meet2"
+meeting_name = "My second meeting"
+meeting_description = "This is a test meeting description"
+meeting_dates = "2026-01-01_12-00,2026-01-01_13-00,2026-01-02_14-00"
+create_meeting(meeting_id, meeting_name, meeting_description, meeting_dates)
diff --git a/cgi/init_sqlite.py b/cgi/init_sqlite.py
new file mode 100644
index 0000000..acc6153
--- /dev/null
+++ b/cgi/init_sqlite.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python3
+
+import os
+import sqlite3
+
+db_path = "terminfinder_db.sqlite"
+
+if os.path.exists(db_path):
+ print(f"DB named {db_path} already exists")
+ exit(1)
+
+con = sqlite3.connect(db_path)
+cur = con.cursor()
+
+cur.execute(
+ "CREATE TABLE meeting(meeting_id, title, description, possible_dates, participants, PRIMARY KEY (meeting_id))"
+)
diff --git a/cgi/view_meeting.py b/cgi/view_meeting.py
new file mode 100644
index 0000000..69ae1e3
--- /dev/null
+++ b/cgi/view_meeting.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+
+
+import os
+import sqlite3
+from urllib.parse import parse_qs
+
+query_string = os.environ.get("QUERY_STRING")
+params = parse_qs(query_string)
+
+
+db_path = "terminfinder_db.sqlite"
+
+if not os.path.exists(db_path):
+ print(f"DB named {db_path} does not exist!")
+ exit(1)
+
+con = sqlite3.connect(db_path)
+cur = con.cursor()
+
+meeting_id = "meet1"
+
+
+def extract_meeting(meeting_id):
+ # Data from meeting table
+ select = cur.execute(f"SELECT * FROM meeting WHERE meeting_id = ?;", (meeting_id,))
+ result = select.fetchone()
+ meeting_data = {"meeting_id": meeting_id, "title": result[1],
+ "description": result[2],
+ "dates": result[3].split(",") if not result[3] is None else "",
+ "participants": result[4].split(",") if not result[4] is None else ""}
+
+ # Individual dates data
+ select = cur.execute(f"SELECT * FROM meeting_dates_{meeting_id};")
+ result = select.fetchall()
+
+ return meeting_data
+
+
+meeting_data = extract_meeting(meeting_id)
+
+print("Content-Type: text/plain")
+print("")
+print()
+print(meeting_data)