From f402e0c96a52c73ab390b76f637af3ccde6ac8b2 Mon Sep 17 00:00:00 2001 From: UMTS at Teleco Date: Fri, 14 Feb 2025 03:12:25 +0100 Subject: initial upload ... somewhat cleaned up and "less" swearing included --- .DS_Store | Bin 0 -> 8196 bytes README.md | 142 +++++++++ admin/.DS_Store | Bin 0 -> 6148 bytes admin/assets/.DS_Store | Bin 0 -> 6148 bytes admin/assets/svg/.DS_Store | Bin 0 -> 6148 bytes admin/assets/svg/teleco.svg | 242 +++++++++++++++ admin/backup_database.php | 37 +++ admin/index.php | 110 +++++++ admin/tools/edit_database.php | 361 ++++++++++++++++++++++ admin/tools/edit_row.php | 80 +++++ admin/tools/manage_files.php | 222 ++++++++++++++ common/functions.php | 171 +++++++++++ common/navbar.php | 98 ++++++ common/navbarjs.php | 151 ++++++++++ config.php | 48 +++ website/.DS_Store | Bin 0 -> 6148 bytes website/content.db | Bin 0 -> 57344 bytes website/public/assets/.DS_Store | Bin 0 -> 8196 bytes website/public/assets/css/tc.css | 452 ++++++++++++++++++++++++++++ website/public/assets/img/.DS_Store | Bin 0 -> 6148 bytes website/public/assets/img/code-is-ass.jpeg | Bin 0 -> 125397 bytes website/public/assets/img/dialon.png | Bin 0 -> 1060 bytes website/public/assets/img/force.png | Bin 0 -> 13702 bytes website/public/assets/img/fuck-main.jpeg | Bin 0 -> 52032 bytes website/public/assets/img/fuckjs.jpeg | Bin 0 -> 238746 bytes website/public/assets/img/jsmomentom.jpg | Bin 0 -> 97318 bytes website/public/assets/img/router1.jpg | Bin 0 -> 436173 bytes website/public/assets/img/router2.jpg | Bin 0 -> 423872 bytes website/public/assets/img/rover.png | Bin 0 -> 39810 bytes website/public/assets/img/ssc.jpg | Bin 0 -> 1451164 bytes website/public/assets/img/wrong.png | Bin 0 -> 1466131 bytes website/public/assets/svg/teleco.svg | 242 +++++++++++++++ website/public/index.php | 121 ++++++++ website2/.DS_Store | Bin 0 -> 6148 bytes website2/content2.db | Bin 0 -> 57344 bytes website2/public/assets/.DS_Store | Bin 0 -> 8196 bytes website2/public/assets/css/tc.css | 452 ++++++++++++++++++++++++++++ website2/public/assets/img/.DS_Store | Bin 0 -> 6148 bytes website2/public/assets/img/code-is-ass.jpeg | Bin 0 -> 125397 bytes website2/public/assets/img/dialon.png | Bin 0 -> 1060 bytes website2/public/assets/img/force.png | Bin 0 -> 13702 bytes website2/public/assets/img/fuck-main.jpeg | Bin 0 -> 52032 bytes website2/public/assets/img/fuckjs.jpeg | Bin 0 -> 238746 bytes website2/public/assets/img/jsmomentom.jpg | Bin 0 -> 97318 bytes website2/public/assets/img/router1.jpg | Bin 0 -> 436173 bytes website2/public/assets/img/router2.jpg | Bin 0 -> 423872 bytes website2/public/assets/img/rover.png | Bin 0 -> 39810 bytes website2/public/assets/img/ssc.jpg | Bin 0 -> 1451164 bytes website2/public/assets/img/wrong.png | Bin 0 -> 1466131 bytes website2/public/assets/svg/teleco.svg | 242 +++++++++++++++ website2/public/index.php | 120 ++++++++ website3/.DS_Store | Bin 0 -> 6148 bytes website3/content3.db | Bin 0 -> 57344 bytes website3/public/assets/.DS_Store | Bin 0 -> 8196 bytes website3/public/assets/css/dialon.css | 313 +++++++++++++++++++ website3/public/assets/css/extras.css | 180 +++++++++++ website3/public/assets/css/hamburger.css | 138 +++++++++ website3/public/assets/css/navbar.css | 224 ++++++++++++++ website3/public/assets/fonts/.DS_Store | Bin 0 -> 6148 bytes website3/public/assets/fonts/default.ttf | Bin 0 -> 51316 bytes website3/public/assets/img/.DS_Store | Bin 0 -> 6148 bytes website3/public/assets/img/code-is-ass.jpeg | Bin 0 -> 125397 bytes website3/public/assets/img/dialon.png | Bin 0 -> 1060 bytes website3/public/assets/img/force.png | Bin 0 -> 13702 bytes website3/public/assets/img/fuck-main.jpeg | Bin 0 -> 52032 bytes website3/public/assets/img/fuckjs.jpeg | Bin 0 -> 238746 bytes website3/public/assets/img/jsmomentom.jpg | Bin 0 -> 97318 bytes website3/public/assets/img/router1.jpg | Bin 0 -> 436173 bytes website3/public/assets/img/router2.jpg | Bin 0 -> 423872 bytes website3/public/assets/img/rover.png | Bin 0 -> 39810 bytes website3/public/assets/img/ssc.jpg | Bin 0 -> 1451164 bytes website3/public/assets/img/wrong.png | Bin 0 -> 1466131 bytes website3/public/assets/js/chat.js | 94 ++++++ website3/public/assets/js/menu.js | 40 +++ website3/public/assets/svg/teleco.svg | 242 +++++++++++++++ website3/public/index.php | 190 ++++++++++++ website4/.DS_Store | Bin 0 -> 6148 bytes website4/content4.db | Bin 0 -> 57344 bytes website4/public/assets/.DS_Store | Bin 0 -> 8196 bytes website4/public/assets/css/dialon.css | 313 +++++++++++++++++++ website4/public/assets/css/extras.css | 180 +++++++++++ website4/public/assets/css/hamburger.css | 138 +++++++++ website4/public/assets/css/navbar.css | 224 ++++++++++++++ website4/public/assets/fonts/.DS_Store | Bin 0 -> 6148 bytes website4/public/assets/fonts/default.ttf | Bin 0 -> 51316 bytes website4/public/assets/img/.DS_Store | Bin 0 -> 6148 bytes website4/public/assets/img/code-is-ass.jpeg | Bin 0 -> 125397 bytes website4/public/assets/img/dialon.png | Bin 0 -> 1060 bytes website4/public/assets/img/force.png | Bin 0 -> 13702 bytes website4/public/assets/img/fuck-main.jpeg | Bin 0 -> 52032 bytes website4/public/assets/img/fuckjs.jpeg | Bin 0 -> 238746 bytes website4/public/assets/img/jsmomentom.jpg | Bin 0 -> 97318 bytes website4/public/assets/img/router1.jpg | Bin 0 -> 436173 bytes website4/public/assets/img/router2.jpg | Bin 0 -> 423872 bytes website4/public/assets/img/rover.png | Bin 0 -> 39810 bytes website4/public/assets/img/ssc.jpg | Bin 0 -> 1451164 bytes website4/public/assets/img/wrong.png | Bin 0 -> 1466131 bytes website4/public/assets/js/chat.js | 94 ++++++ website4/public/assets/js/menu.js | 40 +++ website4/public/assets/svg/teleco.svg | 242 +++++++++++++++ website4/public/index.php | 190 ++++++++++++ 101 files changed, 6133 insertions(+) create mode 100644 .DS_Store create mode 100644 README.md create mode 100644 admin/.DS_Store create mode 100644 admin/assets/.DS_Store create mode 100644 admin/assets/svg/.DS_Store create mode 100644 admin/assets/svg/teleco.svg create mode 100644 admin/backup_database.php create mode 100644 admin/index.php create mode 100644 admin/tools/edit_database.php create mode 100644 admin/tools/edit_row.php create mode 100644 admin/tools/manage_files.php create mode 100644 common/functions.php create mode 100644 common/navbar.php create mode 100644 common/navbarjs.php create mode 100644 config.php create mode 100644 website/.DS_Store create mode 100644 website/content.db create mode 100644 website/public/assets/.DS_Store create mode 100644 website/public/assets/css/tc.css create mode 100644 website/public/assets/img/.DS_Store create mode 100644 website/public/assets/img/code-is-ass.jpeg create mode 100644 website/public/assets/img/dialon.png create mode 100644 website/public/assets/img/force.png create mode 100644 website/public/assets/img/fuck-main.jpeg create mode 100644 website/public/assets/img/fuckjs.jpeg create mode 100644 website/public/assets/img/jsmomentom.jpg create mode 100644 website/public/assets/img/router1.jpg create mode 100644 website/public/assets/img/router2.jpg create mode 100644 website/public/assets/img/rover.png create mode 100644 website/public/assets/img/ssc.jpg create mode 100644 website/public/assets/img/wrong.png create mode 100644 website/public/assets/svg/teleco.svg create mode 100644 website/public/index.php create mode 100644 website2/.DS_Store create mode 100644 website2/content2.db create mode 100644 website2/public/assets/.DS_Store create mode 100644 website2/public/assets/css/tc.css create mode 100644 website2/public/assets/img/.DS_Store create mode 100644 website2/public/assets/img/code-is-ass.jpeg create mode 100644 website2/public/assets/img/dialon.png create mode 100644 website2/public/assets/img/force.png create mode 100644 website2/public/assets/img/fuck-main.jpeg create mode 100644 website2/public/assets/img/fuckjs.jpeg create mode 100644 website2/public/assets/img/jsmomentom.jpg create mode 100644 website2/public/assets/img/router1.jpg create mode 100644 website2/public/assets/img/router2.jpg create mode 100644 website2/public/assets/img/rover.png create mode 100644 website2/public/assets/img/ssc.jpg create mode 100644 website2/public/assets/img/wrong.png create mode 100644 website2/public/assets/svg/teleco.svg create mode 100644 website2/public/index.php create mode 100644 website3/.DS_Store create mode 100644 website3/content3.db create mode 100644 website3/public/assets/.DS_Store create mode 100644 website3/public/assets/css/dialon.css create mode 100644 website3/public/assets/css/extras.css create mode 100644 website3/public/assets/css/hamburger.css create mode 100644 website3/public/assets/css/navbar.css create mode 100644 website3/public/assets/fonts/.DS_Store create mode 100644 website3/public/assets/fonts/default.ttf create mode 100644 website3/public/assets/img/.DS_Store create mode 100644 website3/public/assets/img/code-is-ass.jpeg create mode 100644 website3/public/assets/img/dialon.png create mode 100644 website3/public/assets/img/force.png create mode 100644 website3/public/assets/img/fuck-main.jpeg create mode 100644 website3/public/assets/img/fuckjs.jpeg create mode 100644 website3/public/assets/img/jsmomentom.jpg create mode 100644 website3/public/assets/img/router1.jpg create mode 100644 website3/public/assets/img/router2.jpg create mode 100644 website3/public/assets/img/rover.png create mode 100644 website3/public/assets/img/ssc.jpg create mode 100644 website3/public/assets/img/wrong.png create mode 100644 website3/public/assets/js/chat.js create mode 100644 website3/public/assets/js/menu.js create mode 100644 website3/public/assets/svg/teleco.svg create mode 100644 website3/public/index.php create mode 100644 website4/.DS_Store create mode 100644 website4/content4.db create mode 100644 website4/public/assets/.DS_Store create mode 100644 website4/public/assets/css/dialon.css create mode 100644 website4/public/assets/css/extras.css create mode 100644 website4/public/assets/css/hamburger.css create mode 100644 website4/public/assets/css/navbar.css create mode 100644 website4/public/assets/fonts/.DS_Store create mode 100644 website4/public/assets/fonts/default.ttf create mode 100644 website4/public/assets/img/.DS_Store create mode 100644 website4/public/assets/img/code-is-ass.jpeg create mode 100644 website4/public/assets/img/dialon.png create mode 100644 website4/public/assets/img/force.png create mode 100644 website4/public/assets/img/fuck-main.jpeg create mode 100644 website4/public/assets/img/fuckjs.jpeg create mode 100644 website4/public/assets/img/jsmomentom.jpg create mode 100644 website4/public/assets/img/router1.jpg create mode 100644 website4/public/assets/img/router2.jpg create mode 100644 website4/public/assets/img/rover.png create mode 100644 website4/public/assets/img/ssc.jpg create mode 100644 website4/public/assets/img/wrong.png create mode 100644 website4/public/assets/js/chat.js create mode 100644 website4/public/assets/js/menu.js create mode 100644 website4/public/assets/svg/teleco.svg create mode 100644 website4/public/index.php diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..e43f1e1 Binary files /dev/null and b/.DS_Store differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..f482ce7 --- /dev/null +++ b/README.md @@ -0,0 +1,142 @@ +# TC-C-CMS + +Welcome to **TC-C-CMS** (Teleco's Crappy Content Management System)! +This project consists mostly of some loose and very basic code that helps you manage content for your websites and make them (to some degree) usable! + +## Project "Structure" +(i included this because this is what "professionals" are supposed to do ... i am not a professional however) + +### **adminier folder (no login system because that's your job)** +Contains the admin welcome panel, backup database function, and links to edit the database (**very very very fragile**). +Please, if you dare use this in production, make many database backups becaus I wrote this entire thing from the ground up myself. + +It also contains a **file manager** that can back up the entire website folder along with the database, as well as upload and manage files (also written by me, poorly). + +- **admin/**: Contains the admin panel for managing the CMS. + - **tools/**: Includes various tools described above. + - **index.php**: The main entry point for the admin panel. + - **backup_databases.php**: Makes database backups and stuff. + +### **Common rendering utilities** +Contains common things needed to render websites with beautiful PHP. Mmm yes, I love PHP ❤️❤️❤️. **JS bad!** + +- **common/**: Shared resources and functions used across different websites. + - **functions.php**: Common functions and variables used throughout the CMS. + - **navbar.php**: Functions for rendering the standard PURE HTML NO JS navbar. + - **navbarjs.php**: Functions for rendering the JavaScript kinda required navbar. +--- + +## **Included Website Templates** + +### **Website 1** +- Sidebars only, no navbar, no JS at all. +- Semi-mobile optimized. +- **Template name:** *einfach geil* + +- **website/**: Contains the public-facing code for the first template. + - **public/**: The public directory for the first website. + - **index.php**: The main entry point. + +### **Website 2** +- Navbar only, no sidebars. +- You can mix and match stuff, but I haven't (yet). +- **Template name:** *fick geil jaman* + +- **website2/**: Contains the public-facing code for the second template. + - **public/**: + - **index.php**: The main entry point. + +### **Website 3** +- Sidebars only, no navbar. +- Some small, goofy JS (ew, I know). +- Has **cat virtual support**. +- **Template name:** *Ich hasse JS number 1 geh kotzen* + +- **website3/**: + - **public/**: + - **index.php** + +### **Website 4** +- Navbar only, no sidebars. +- Some small, goofy JS (ew, I know). +- Has **cat virtual support**. +- **Template name:** *Ich hasse JS nummer 2 flatterschiss* + +- **website4/**: + - **public/**: + - **index.php** +--- + +## **Getting Started** + +### **Cool, I don’t care. What can it do and how do I use it?** +You can make basic **goofy ahh sites** and dynamically change things from the admin panel. +This includes creating pages and posts, adding navbar/sidebar entries, and uploading files. +It's like... *wow, so super premium* (irony). + +### **TL;DR** +It’s so simple to run that I could do it in my sleep, blindfolded, and without any sense of touch. +There are **4 basic website templates** in this repo, based on actual sites I run (or plan to run soon with this tool). +--- + +### **What do you need to get started?** +- Install SQLite and PHP on whatever potato PC you have lying around. +- How you install PHP on your potato machine? IDK. (Add description for Mac, Debian, and Linux but **omit Windows** because we hate Windows. If someone opens an issue asking how to run this on Windows, I will not answer it.) + +Unlike normal CMSs that go *brrrrrr* with a million Composer dependencies, this one **doesn't**. +Honestly, you could even run this **without a web server** if you run two PHP dev servers and set folder permissions so that the user-exposed PHP dev server can’t access admin parts (but the admin one can). +I **do not endorse or recommend this**, it’s just a *"yeah, you can do this"* kind of thing. + +### **Run it in 2 steps** +1. Run: + `php -S localhost:8000` + in the root directory. +2. Open in your browser: + [http://localhost:8000/website4/public/](http://localhost:8000/website4/public/) + +And *voilà*! You have a pretty website! 🎉 +--- + +### **Editing Content** +If you want to edit its content: + +1. Go to **[http://localhost:8000/admin/](http://localhost:8000/admin/)** +2. Click **edit database** to mess with it (and pray). + +⚠ **Warning:** Don’t be shocked when you see **literally no CSS** after the initial admin panel. +This is a *design choice* I made because **f*** bloat and JS**. + +I *could* explain how to do things in the admin panel, but it should be **self-explanatory** if you look at the database examples. + +### **Navbar vs Sidebar** +There are **two main layouts**: +- **Navbar only** → Website 2 (pure HTML, no JS at all) and Website 4 (some JS, ewww). +- **Sidebars only** → Website 1 and Website 3. +--- + +## **Features** +- **Multi-site support**: Manage multiple websites from a single CMS. +- **Customizable navigation**: Easily configure and render navigation bars. +- **Admin panel**: Manage content, files, and databases via a purposely painful UI. +- **Responsive design**: Ensures your websites *kind of* work on mobile. +--- + +## **Contributing** +You **can** contribute if you want… +…but I doubt anyone will. + +💀 **ashdoiasjhdkljahspdoisfopiud fpoisdamupfn oiseupnf98i** 💀 +--- + +## **License** +This project is licensed under the **MIT License**. +See the [LICENSE](LICENSE) file for details. + +Basically: +- **No warranty.** +- **No responsibility.** +- **I barely know how to code.** +--- + +### **Made with love for PHP and pure hatred for JavaScript by T.B.** ❤️ 🚀 +*ps if you want to know why theres no real commit history as of now 2025-02-14 its because of my tendency to swear in them and I wanted to not spoil this project too much with that yet...* \ No newline at end of file diff --git a/admin/.DS_Store b/admin/.DS_Store new file mode 100644 index 0000000..e7b14c9 Binary files /dev/null and b/admin/.DS_Store differ diff --git a/admin/assets/.DS_Store b/admin/assets/.DS_Store new file mode 100644 index 0000000..5c248b5 Binary files /dev/null and b/admin/assets/.DS_Store differ diff --git a/admin/assets/svg/.DS_Store b/admin/assets/svg/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/admin/assets/svg/.DS_Store differ diff --git a/admin/assets/svg/teleco.svg b/admin/assets/svg/teleco.svg new file mode 100644 index 0000000..1cbb190 --- /dev/null +++ b/admin/assets/svg/teleco.svg @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/admin/backup_database.php b/admin/backup_database.php new file mode 100644 index 0000000..b945408 --- /dev/null +++ b/admin/backup_database.php @@ -0,0 +1,37 @@ + diff --git a/admin/index.php b/admin/index.php new file mode 100644 index 0000000..22fa311 --- /dev/null +++ b/admin/index.php @@ -0,0 +1,110 @@ + + + + + + + + Admin Panel + + + + +
+ +

Adminier Panel

+
+
+ +
+

Welcome to the TC-C-CMS admin Panel

+

Feast your eyes! This is the last time you will see properish CSS in the admin panel.

+

Made with lots of love for PHP and pure hatred against JavaScript (has none) by T.B
TC-C-CMS means Teleco's Crappy Content Management System btw lol hahahaha ich chan das alles nümmeh!

+ +

+ +
+
+ + \ No newline at end of file diff --git a/admin/tools/edit_database.php b/admin/tools/edit_database.php new file mode 100644 index 0000000..bc5489a --- /dev/null +++ b/admin/tools/edit_database.php @@ -0,0 +1,361 @@ +query("SELECT name FROM sqlite_master WHERE type='table' AND name != 'sqlite_sequence'"); +$tables = []; +while ($row = $tablesResult->fetchArray(SQLITE3_ASSOC)) { + $tables[] = $row['name']; +} + +if ($selectedTable && in_array($selectedTable, $tables)) { + $_SESSION['selectedTable'] = $selectedTable; + $columnsResult = $db->query("PRAGMA table_info($selectedTable)"); + while ($row = $columnsResult->fetchArray(SQLITE3_ASSOC)) { + $columns[] = $row['name']; + } + if ($selectedTable == 'content' && in_array('date', $columns)) { + $orderBy = "ORDER BY date DESC"; // das hier machen default sorting nach datum und ziiht de neuschti row zerscht will susch isch das unmanagebar + } else { + $orderBy = in_array('date', $columns) ? "ORDER BY date $sortOrder" : "ORDER BY id ASC"; + } + $rowsResult = $db->query("SELECT * FROM $selectedTable $orderBy"); + while ($row = $rowsResult->fetchArray(SQLITE3_ASSOC)) { + $rows[] = $row; + } +} else { + $selectedTable = ''; + $_SESSION['selectedTable'] = ''; +} + +if (isset($_POST['edit_row'])) { + header("Location: edit_row.php?table=$selectedTable&id=" . $_POST['id']); + exit(); +} + +if (isset($_POST['delete_row'])) { + $idsToDelete = $_POST['ids'] ?? []; + foreach ($idsToDelete as $id) { + $stmt = $db->prepare("DELETE FROM $selectedTable WHERE id = :id"); + $stmt->bindValue(':id', $id, SQLITE3_INTEGER); + $stmt->execute(); + } + $message = "Selected rows deleted successfully (most likely)."; +} + +if (isset($_POST['insert_row'])) { + $values = $_POST['values']; + $highestIdResult = $db->querySingle("SELECT MAX(id) as max_id FROM $selectedTable"); + $highestId = $highestIdResult ? $highestIdResult : 0; + $values['id'] = $highestId + 1; + if ($selectedTable == 'content') { + if (empty($values['date'])) { + $values['date'] = date('Y-m-d H:i:s'); + } + } + $columnsString = implode(", ", array_keys($values)); + $placeholders = implode(", ", array_fill(0, count($values), "?")); + $stmt = $db->prepare("INSERT INTO $selectedTable ($columnsString) VALUES ($placeholders)"); + $index = 1; + foreach ($values as $value) { + $stmt->bindValue($index, $value ?: null, SQLITE3_TEXT); + $index++; + } + $stmt->execute(); + $message = "Row inserted successfully. (maybe)"; +} + +if (isset($_POST['swap_row'])) { + $id = $_POST['id']; + $targetId = $_POST['target_id']; + $db->exec("BEGIN TRANSACTION"); + $db->exec("UPDATE $selectedTable SET id = -1 WHERE id = $id"); + $db->exec("UPDATE $selectedTable SET id = $id WHERE id = $targetId"); + $db->exec("UPDATE $selectedTable SET id = $targetId WHERE id = -1"); + $db->exec("COMMIT"); + $message = "Row swapped successfully for sure."; +} + +if (isset($_POST['push_row'])) { + $id = $_POST['id']; + $targetId = $_POST['target_id']; + $tempTable = $selectedTable . '_temp'; + $db->exec("BEGIN TRANSACTION"); + $db->exec("CREATE TEMPORARY TABLE $tempTable AS SELECT * FROM $selectedTable"); + $db->exec("UPDATE $tempTable SET id = -1 WHERE id = $id"); + if ($id < $targetId) { + $db->exec("UPDATE $tempTable SET id = id - 1 WHERE id > $id AND id <= $targetId"); + } else { + $db->exec("UPDATE $tempTable SET id = id + 1 WHERE id < $id AND id >= $targetId"); + } + $db->exec("UPDATE $tempTable SET id = $targetId WHERE id = -1"); + $db->exec("DELETE FROM $selectedTable"); + $db->exec("INSERT INTO $selectedTable SELECT * FROM $tempTable"); + $db->exec("DROP TABLE $tempTable"); + $db->exec("COMMIT"); + $message = "Row pushed successfully (perhaps)."; +} + +if (isset($_POST['reassign_ids'])) { + $tempBackup = $backupDir . '/' . $timestamp . '_temp.db'; + copy($source, $tempBackup); + + try { + $db->exec("BEGIN TRANSACTION"); + $tempTable = $selectedTable . '_temp'; + $db->exec("CREATE TEMPORARY TABLE $tempTable AS SELECT * FROM $selectedTable"); + $db->exec("DELETE FROM $selectedTable"); + + if (in_array('date', $columns)) { + $orderBy = "ORDER BY date ASC"; + } else { + $orderBy = "ORDER BY id ASC"; + } + + $rowsResult = $db->query("SELECT * FROM $tempTable $orderBy"); + $newId = 1; + while ($row = $rowsResult->fetchArray(SQLITE3_ASSOC)) { + $row['id'] = $newId++; + $columnsString = implode(", ", array_keys($row)); + $placeholders = implode(", ", array_fill(0, count($row), "?")); + $stmt = $db->prepare("INSERT INTO $selectedTable ($columnsString) VALUES ($placeholders)"); + $index = 1; + foreach ($row as $value) { + $stmt->bindValue($index, $value ?: null, SQLITE3_TEXT); + $index++; + } + $stmt->execute(); + } + + $db->exec("DROP TABLE $tempTable"); + $db->exec("COMMIT"); + $message = "IDs reassigned successfully."; + } catch (Exception $e) { + copy($tempBackup, $source); + $message = "Failed to reassign IDs. Database restored from backup. (probably)"; + } finally { + unlink($tempBackup); + } +} +?> + + + + + + Edit Database + + +
+ +
+

Edit Database

+
+ + +
+
+ +
+ +

+ +
+ + +
+
+ +
+ +

Editing Table:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Select + + + Sort by Date + + Actions
+ + + + + + + + +
+ + + + +
+ + +
+
+ + + + +
+
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Select + + + Sort by Datum + + Actions
+ + + + +
+ + +
+
+ + + + +
+
+ + + + + + + + + + + +
+ + + + + +

No das table selected. Please select das table to editieren.

+ + + \ No newline at end of file diff --git a/admin/tools/edit_row.php b/admin/tools/edit_row.php new file mode 100644 index 0000000..ceb59f3 --- /dev/null +++ b/admin/tools/edit_row.php @@ -0,0 +1,80 @@ +query("PRAGMA table_info($table)"); +while ($row = $columnsResult->fetchArray(SQLITE3_ASSOC)) { + $columns[] = $row['name']; +} + +$stmt = $db->prepare("SELECT * FROM $table WHERE id = :id"); +$stmt->bindValue(':id', $id, SQLITE3_INTEGER); +$result = $stmt->execute(); + +if ($result) { + $row = $result->fetchArray(SQLITE3_ASSOC); +} else { + $row = null; +} + +if (isset($_POST['save_changes'])) { + foreach ($columns as $column) { + $value = $_POST[$column] ?: null; + if ($column == 'date' && empty($value)) { + $value = date('Y-m-d H:i:s'); + } + if ($table == 'content' && $column == 'custom_html') { + $value = $value ? 1 : 0; + } + $stmt = $db->prepare("UPDATE $table SET $column = :value WHERE id = :id"); + $stmt->bindValue(':value', $value, SQLITE3_TEXT); + $stmt->bindValue(':id', $id, SQLITE3_INTEGER); + $stmt->execute(); + } + header("Location: edit_database.php?table=$table"); + exit(); +} +?> + + + + + + Edit Row + + +

Edit Row in Table:

+
+ + + + + + + +
+ + +
+ Back to Table + + diff --git a/admin/tools/manage_files.php b/admin/tools/manage_files.php new file mode 100644 index 0000000..f7d9592 --- /dev/null +++ b/admin/tools/manage_files.php @@ -0,0 +1,222 @@ + + + + + + + + Manage Files + + +
+
+ +
+

File Manager

+
+ + +
+ +

+ +

Current Directory:

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
.. (Parent Directory)
Folders
+
+ + +
+
+ + + +
+
Files
+
+ + +
+
+ + + +
+ Download +
+

Upload File

+
+ + +
+
+

Create Folder

+
+ + +
+
+

Backup Folder

+
+ +
+
+
+ + diff --git a/common/functions.php b/common/functions.php new file mode 100644 index 0000000..a0a953e --- /dev/null +++ b/common/functions.php @@ -0,0 +1,171 @@ +querySingle("SELECT name FROM sqlite_master WHERE type='table' AND name='navbar'"); +$navbarHasEntries = $db->querySingle("SELECT COUNT(*) FROM navbar") > 0; + +// mis wunderschöne url handling ✨ +$page = isset($_GET['page']) ? htmlspecialchars($_GET['page']) : 'index'; +$sub = isset($_GET['sub']) ? htmlspecialchars($_GET['sub']) : null; +$offset = isset($_GET['offset']) ? (int)$_GET['offset'] : 0; +$limit = 10; // Number of posts per load +$menuExpanded = isset($_GET['menu']) ? (bool)$_GET['menu'] : false; + +// overflow protection oder so cha kei cybersecurity +if ($offset < 0) { + $offset = 0; +} + +// schlimmste funktion eveer für breadcrumbs aber es funktioniert leider +function get_full_path($db, $page, $sub = null) { + $path = []; + $current_page = $sub ?: $page; // If sub is set of posts benutzen sub suscht halt page + + while ($current_page) { + $query = $db->prepare('SELECT parent, title, page FROM pages WHERE page = :page'); + $query->bindValue(':page', $current_page, SQLITE3_TEXT); + $result = $query->execute()->fetchArray(SQLITE3_ASSOC); + + if ($result) { + array_unshift($path, [ + 'title' => $result['title'], + 'page' => $result['page'] + ]); + $current_page = $result['parent']; // eltere vor d'füess schiebe + } else { + break; + } + } + return $path; +} + +$breadcrumbs = get_full_path($db, $page, $sub); + +// siihte metadata mache und so +$metaQuery = $db->prepare('SELECT meta_description, parent FROM pages WHERE page = :page AND (parent IS NULL OR parent = :parent)'); +$metaQuery->bindValue(':page', $page, SQLITE3_TEXT); +$metaQuery->bindValue(':parent', $sub, SQLITE3_TEXT); +$metaResult = $metaQuery->execute()->fetchArray(SQLITE3_ASSOC); +$metaDescription = $metaResult ? htmlspecialchars($metaResult['meta_description'] ?? '', ENT_QUOTES, 'UTF-8') : 'Default description of the website.'; + +// mal gügsle wiviel posts es git hmmm 🤔 lol +$countQuery = $db->prepare('SELECT COUNT(*) as total FROM content WHERE page = :page AND (parent IS NULL OR parent = :sub)'); +$countQuery->bindValue(':page', $page, SQLITE3_TEXT); +$countQuery->bindValue(':sub', $sub, SQLITE3_TEXT); +$totalPosts = $countQuery->execute()->fetchArray(SQLITE3_ASSOC)['total']; + +// offset dörf nid grösser sii als total posts will susch depressione +if ($offset > $totalPosts) { + $offset = $totalPosts - ($totalPosts % $limit); +} + +// ALLI POSTS ABRÜefe bitte ned ahlange susch hühl ich +$query = $db->prepare('SELECT title, content, date FROM content WHERE page = :page ORDER BY date DESC LIMIT :limit OFFSET :offset'); +$query->bindValue(':page', $sub ? $sub : $page, SQLITE3_TEXT); +$query->bindValue(':limit', $offset + $limit, SQLITE3_INTEGER); +$query->bindValue(':offset', 0, SQLITE3_INTEGER); // immer alli posts holeh will was isch normali site pagination +$result = $query->execute(); + +// het page überhaupt was drufeh oder so ? +$hasContent = $result->fetchArray() !== false; +if ($hasContent) { + // Reset the result pointer + $result->reset(); +} + +// haben das linke sidebar sache? +$leftSidebarHasItems = $db->querySingle("SELECT COUNT(*) FROM sidebar WHERE position='left'") > 0; + +// haben das rechte sidebar sache? +$rightSidebarHasItems = $db->querySingle("SELECT COUNT(*) FROM sidebar WHERE position='right'") > 0; + +// das isch fett schaisse und ich ha kein plan ki het gseit das fixts und so ich ha kei lust meh gha ha nach 2 stund 😭 +function sameQueryParams(string $url1, string $url2): bool { + $parsed1 = parse_url($url1); + $parsed2 = parse_url($url2); + + $params1 = []; + $params2 = []; + if (!empty($parsed1['query'])) { + parse_str($parsed1['query'], $params1); + } + if (!empty($parsed2['query'])) { + parse_str($parsed2['query'], $params2); + } + + return $params1 == $params2; +} + +// isch das total behindert und komplett losti ahgangs wiihs ? ja ... aber es funktioniert leider echt kei bock meh fr fr die grüene sind schuld +function get_sidebar($db, $position, $page, $sub) { + $query = $db->prepare(' + SELECT title, link, link_text + FROM sidebar + WHERE position = :position + ORDER BY id + '); + $query->bindValue(':position', $position, SQLITE3_TEXT); + $result = $query->execute(); + + if (!$result || !$result->fetchArray(SQLITE3_ASSOC)) { + return; // effizienz versuech will die ganz funktion müll isch ach mannn 😭 + } + $result->reset(); + $lastTitle = ""; + // Bob der baumeister spileh und $activeLink zemme bastle + $queryString = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY) ?? ''; // luege das ned null isch will susch motzts + parse_str($queryString, $queryParams); + + $activeParts = ["?page=" . ($queryParams['page'] ?? '')]; + if (!empty($queryParams['sub'])) { + if (is_array($queryParams['sub'])) { + foreach ($queryParams['sub'] as $subParam) { + $activeParts[] = "sub=" . $subParam; + } + } else { + $activeParts[] = "sub=" . $queryParams['sub']; + } + } + $activeLink = implode("&", $activeParts); + + $foundActive = false; + + while ($row = $result->fetchArray(SQLITE3_ASSOC)) { + // new post oh mein gott so spannend mached mer grad neue title + if ($row['title'] !== $lastTitle) { + if ($lastTitle !== "") { + echo ''; + } + echo '

' . htmlspecialchars($row['title']) . '

'; + $lastTitle = $row['title']; + } + + // externi links z'erchäne wär inteligent schickiert + if (filter_var($row['link'], FILTER_VALIDATE_URL)) { + echo '

' + . htmlspecialchars($row['link_text']) + . '

'; + } else { + // robuster mache und so lönd mich ihn rueh + $activeClass = ''; + if (!$foundActive && sameQueryParams($row['link'], $activeLink)) { + $activeClass = 'active'; + $foundActive = true; + } + + echo '

' + . htmlspecialchars($row['link_text']) + . '

'; + } + } + if ($lastTitle !== "") { + echo '
'; + } +} +?> \ No newline at end of file diff --git a/common/navbar.php b/common/navbar.php new file mode 100644 index 0000000..681f176 --- /dev/null +++ b/common/navbar.php @@ -0,0 +1,98 @@ +query("SELECT * FROM navbar ORDER BY id"); + while ($row = $navbarResult->fetchArray(SQLITE3_ASSOC)) { + $navbarItems[] = $row; + } + + // Function to render the navbar items im grosse navbar für normali mensche + function render_navbar($items, $currentPage) { + $leftItems = array_filter($items, fn($item) => $item['align'] === 'left'); + $centerItems = array_filter($items, fn($item) => $item['align'] === 'center'); + $rightItems = array_filter($items, fn($item) => $item['align'] === 'right'); + + echo ''; + echo ''; + echo ''; + } + + function render_navbar_items($items, $currentPage) { + foreach ($items as $item) { + $activeClass = ($item['link'] == "?page=$currentPage") ? ' class="active"' : ''; + switch ($item['type']) { + case 'title': + echo '' . htmlspecialchars($item['name']) . ''; + break; + case 'link': + echo '' . htmlspecialchars($item['name']) . ''; + break; + case 'drop down': + echo ''; + break; + case 'text field': + echo ''; + break; + case 'button': + echo ''; + break; + case 'custom': + echo $item['link_text']; + break; + case 'logo': + echo ''; + break; + case 'search': + echo ''; + break; + } + } + } + + // Function to render the mobile navbar für behindertes hamburger menu + function render_mobile_navbar($items, $menuExpanded) { + echo '
'; + echo ''; + echo '
'; + + // Separate the menu from the navbar panel will mir ned ganz normali mensche sind und euses menu mit post uf und zue gaht + if ($menuExpanded) { + echo '
'; + render_navbar_items(array_filter($items, fn($item) => $item['type'] !== 'logo' && $item['type'] !== 'title'), ''); + echo '
'; + } + } +} +?> \ No newline at end of file diff --git a/common/navbarjs.php b/common/navbarjs.php new file mode 100644 index 0000000..28aa549 --- /dev/null +++ b/common/navbarjs.php @@ -0,0 +1,151 @@ +query("SELECT * FROM navbar ORDER BY id"); + $navbarItems = []; + while ($row = $navbarQuery->fetchArray(SQLITE3_ASSOC)) { + $navbarItems[] = $row; + } + + echo ''; +} +?> \ No newline at end of file diff --git a/config.php b/config.php new file mode 100644 index 0000000..580bd29 --- /dev/null +++ b/config.php @@ -0,0 +1,48 @@ + 1, + 'name' => 'Demo Site 1 Sidebar : einfach geil', + 'database' => __DIR__ . '/website/content.db', + 'folder' => 'website', + 'backup_folder' => 'dbbackups/website', + 'components' => [ + __DIR__ . '/common/functions.php', + __DIR__ . '/common/navbar.php', + ], + ], + [ + 'id' => 2, + 'name' => 'Dome Site 2 Navbar : fick geil jaman"', + 'database' => __DIR__ . '/website2/content2.db', + 'folder' => 'website2', + 'backup_folder' => 'dbbackups/website2', + 'components' => [ + __DIR__ . '/common/functions.php', + __DIR__ . '/common/navbar.php', + ], + ], + [ + 'id' => 3, + 'name' => 'Dome Site 3 Navbar w JS : geh kotzen', + 'database' => __DIR__ . '/website3/content3.db', + 'folder' => 'website3', + 'backup_folder' => 'dbbackups/website3', + 'components' => [ + __DIR__ . '/common/functions.php', + __DIR__ . '/common/navbarjs.php', + ], + ], + [ + 'id' => 4, + 'name' => 'Demo Site 4 Sidebar w JS flatterschiss', + 'database' => __DIR__ . '/website4/content4.db', + 'folder' => 'website4', + 'backup_folder' => 'dbbackups/website4', + 'components' => [ + __DIR__ . '/common/functions.php', + __DIR__ . '/common/navbarjs.php', + ], + ] +]; +?> diff --git a/website/.DS_Store b/website/.DS_Store new file mode 100644 index 0000000..4a935d4 Binary files /dev/null and b/website/.DS_Store differ diff --git a/website/content.db b/website/content.db new file mode 100644 index 0000000..c4bab0f Binary files /dev/null and b/website/content.db differ diff --git a/website/public/assets/.DS_Store b/website/public/assets/.DS_Store new file mode 100644 index 0000000..afa38b1 Binary files /dev/null and b/website/public/assets/.DS_Store differ diff --git a/website/public/assets/css/tc.css b/website/public/assets/css/tc.css new file mode 100644 index 0000000..b2b32fc --- /dev/null +++ b/website/public/assets/css/tc.css @@ -0,0 +1,452 @@ +html, body { + height: 100%; + margin: 0; + padding: 0; + font-family: Arial, sans-serif; + background-color: #FFFFFF; + color: #000000; + display: flex; + flex-direction: column; + overflow-x: hidden; +} + +header { + text-align: center; + background-color: #FFFFFF; + color: #FFFFFF; + display: flex; + flex-direction: column; + align-items: center; +} + +.header-content { + display: flex; + align-items: center; + justify-content: center; + background-color: #FFFFFF; + padding: 10px 20px; + padding-top: 15px; +} + +header h1 { + margin: 0; + font-size: 24px; + margin-left: 10px; + color: #D22627; +} + +header h2 { + margin: 5px 0 0 0; + font-size: 16px; + text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.6); +} + +.logo { + height: 40px; + width: auto; +} + +.container { + flex: 1; + display: flex; + width: 100%; + min-width: 300px; + align-items: flex-start; + flex-wrap: wrap; + margin: 20px auto; + margin-top: 0px; + margin-bottom: 0px; + max-width: 1200px; +} + +.sidebar, .sidebar-right { + width: 20%; min-width: 200px; max-width: 250px; + padding: 10px; + padding-bottom: 0px; + background-color: #FFEEEE; + border: 1px solid #D22627; + box-sizing: border-box; + display: block; align-self: flex-start; +} + +.content { + width: 60%; + flex-grow: 1; + padding: 10px; + box-sizing: border-box; +} + +.box { + margin-bottom: 10px; + padding: 10px; + border: 1px solid #D22627; + background-color: #FFFFFF; +} + +.box-last { + margin-bottom: 0px; +} + +.box h3 { + margin: 0 0 10px 0; + font-size: 16px; + color: #D22627; +} + +.box p, .box a { + margin: 5px 0; + font-size: 14px; + color: #000000; +} + +.box a { + color: #D22627; + text-decoration: none; +} + +.box a:hover { + text-decoration: underline; +} + +footer { + background-color: #D22627; + color: #FFFFFF; + text-align: center; + padding: 10px 0; + font-size: 14px; + width: 100%; + flex-shrink: 0; +} + +.navbar { + display: flex; + justify-content: space-between; + align-items: center; + background-color: #D22627; + padding: 10px; + color: #FFFFFF; +} + +.navbar-left, .navbar-center, .navbar-right { + display: flex; + align-items: center; +} + +.navbar-left { + justify-content: flex-start; + flex: 1; +} + +.navbar-center { + justify-content: center; + flex-grow: 1; + flex: 2; +} + +.navbar-right { + justify-content: flex-end; + flex: 1; +} + +.navbar a, .navbar span, .navbar input, .navbar img { + margin: 0 10px; + color: #FFFFFF; + text-decoration: none; +} + +.navbar button { + margin: 0 10px; + color: #000000; + text-decoration: none; +} + +.navbar a:hover, .navbar button:hover { + text-decoration: underline; +} + +.navbar-logo { + height: 40px; + width: auto; +} + +.navbar-dropdown { + position: relative; + color: #ffffff; + display: inline-block; +} + +.navbar-dropbtn { + background-color: #D22627; + color: white; + border: none; + cursor: pointer; +} + +.navbar-dropdown-content { + display: none; + position: absolute; + background-color: #f9f9f9; + min-width: 160px; + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); + z-index: 1; +} + +.navbar-dropdown-content a { + color: black; + padding: 12px 16px; + text-decoration: none; + display: block; +} + +.navbar-dropdown-content a:hover { + background-color: #f1f1f1; +} + +.navbar-dropdown:hover .navbar-dropdown-content { + display: block; +} + +.navbar-dropdown:hover .navbar-dropbtn { + background-color: #a10000; +} + +.mobile-navbar { + display: flex; + flex-direction: column; + align-items: center; + background-color: #D22627; + color: #FFFFFF; + width: 100%; + padding: 10px; +} + +.mobile-navbar-panel { + display: flex; + flex-direction: column; + align-items: flex-start; + background-color: #D22627; + color: #FFFFFF; + width: 100%; + padding: 10px; + gap: 10px; +} + +.mobile-navbar-panel .navbar-header { + display: flex; + flex-direction: column; + align-items: flex-start; + width: 100%; +} + +.mobile-navbar-panel .navbar-logo, .mobile-navbar-panel .navbar-title { + display: inline-block; + vertical-align: middle; +} + +.mobile-navbar-panel .navbar-toggle { + display: inline-block; + cursor: pointer; +} + +.mobile-navbar-panel .navbar-toggle::after { + content: ' ▼'; +} + +.mobile-navbar-menu { + display: flex; + flex-direction: column; + width: 100%; + background-color: #D22627; + text-align: center; + align-items: center; + padding: 10px; + box-sizing: border-box; +} + +.mobile-navbar-menu a, +.mobile-navbar-menu span, +.mobile-navbar-menu input, +.mobile-navbar-menu button { + display: block; + padding: 10px; + border-bottom: 1px solid #FFFFFF; + text-align: center; + width: 80vw; + box-sizing: border-box; + margin: 0; +} + +.mobile-navbar-menu a:hover, +.mobile-navbar-menu button:hover { + background-color: #a10000; +} + +.mobile-navbar-menu button { + text-align: center; + width: 80vw; + margin: 0 auto; + display: block; +} + +input[type="checkbox"] { + display: none; +} + +input[type="checkbox"]:checked ~ .mobile-navbar-items { + display: block; +} + +@media screen and (max-width: 1279px) { + .container { + flex-direction: column; + padding: 10px; + padding-top: 0px; + padding-bottom: 0px; + width: 100%; + min-width: auto; + box-sizing: border-box; + } + + .sidebar, .sidebar-right, .content { + width: 100%; + min-width: auto; + max-width: none; + flex-grow: 0; + margin-bottom: 20px; + } + + .header-content { + padding-top: 10px; + } + + header h1 { + font-size: 20px; + } + + header h2 { + font-size: 14px; + } + + .box h3 { + font-size: 16px; + } + + .box p, .box a { + font-size: 12px; + } + + footer { + font-size: 12px; + padding: 5px; + } + + .navbar { + display: none; + } + + .mobile-navbar { + display: flex; + flex-direction: column; + align-items: center; + background-color: #D22627; + padding: 10px; + color: #FFFFFF; + width: 100%; + } + + .mobile-navbar .navbar-header { + display: flex; + justify-content: space-between; + width: 100%; + align-items: center; + } + + .mobile-navbar .navbar-logo, .mobile-navbar .navbar-title { + display: inline-block; + vertical-align: middle; + } + + .mobile-navbar .navbar-toggle { + display: inline-block; + cursor: pointer; + } + + .mobile-navbar .navbar-toggle::after { + content: ' ▼'; + } + + .mobile-navbar-items { + display: flex; + flex-direction: column; + width: 100%; + background-color: #D22627; + text-align: center; + align-items: center; + } + + .mobile-navbar-items a, + .mobile-navbar-items span, + .mobile-navbar-items input, + .mobile-navbar-items button { + display: block; + padding: 10px; + border-bottom: 1px solid #FFFFFF; + text-align: center; + width: 80vw; + box-sizing: border-box; + margin: 0; + } + + .mobile-navbar-items a:hover, + .mobile-navbar-items button:hover { + background-color: #3e8e41; + } + + .mobile-navbar-items button { + text-align: center; + width: 80vw; + margin: 0 auto; + display: block; + } + + input[type="checkbox"] { + display: none; + } + + input[type="checkbox"]:checked ~ .mobile-navbar-items { + display: block; + } +} + +@media screen and (min-width: 1280px) { + .container { + width: 100%; + min-width: 300px; + } + + .sidebar, .sidebar-right { + width: 20%; + min-width: 200px; + max-width: 250px; + } + + .content { + width: 60%; + flex-grow: 1; + } + + .mobile-navbar, .mobile-navbar-panel, .mobile-navbar-menu { + display: none; + } +} + +.breadcrumbs { + margin-bottom: 10px; + padding: 10px; + border: 1px solid #D22627; + background-color: #FFFFFF; +} + +.sidebar a.active, .sidebar-right a.active { + text-decoration: underline; +} \ No newline at end of file diff --git a/website/public/assets/img/.DS_Store b/website/public/assets/img/.DS_Store new file mode 100644 index 0000000..f77b18d Binary files /dev/null and b/website/public/assets/img/.DS_Store differ diff --git a/website/public/assets/img/code-is-ass.jpeg b/website/public/assets/img/code-is-ass.jpeg new file mode 100644 index 0000000..c35aa9e Binary files /dev/null and b/website/public/assets/img/code-is-ass.jpeg differ diff --git a/website/public/assets/img/dialon.png b/website/public/assets/img/dialon.png new file mode 100644 index 0000000..6ceef81 Binary files /dev/null and b/website/public/assets/img/dialon.png differ diff --git a/website/public/assets/img/force.png b/website/public/assets/img/force.png new file mode 100644 index 0000000..fa2c8c6 Binary files /dev/null and b/website/public/assets/img/force.png differ diff --git a/website/public/assets/img/fuck-main.jpeg b/website/public/assets/img/fuck-main.jpeg new file mode 100644 index 0000000..3acbd91 Binary files /dev/null and b/website/public/assets/img/fuck-main.jpeg differ diff --git a/website/public/assets/img/fuckjs.jpeg b/website/public/assets/img/fuckjs.jpeg new file mode 100644 index 0000000..06f8a6d Binary files /dev/null and b/website/public/assets/img/fuckjs.jpeg differ diff --git a/website/public/assets/img/jsmomentom.jpg b/website/public/assets/img/jsmomentom.jpg new file mode 100644 index 0000000..166d5ba Binary files /dev/null and b/website/public/assets/img/jsmomentom.jpg differ diff --git a/website/public/assets/img/router1.jpg b/website/public/assets/img/router1.jpg new file mode 100644 index 0000000..92f7e91 Binary files /dev/null and b/website/public/assets/img/router1.jpg differ diff --git a/website/public/assets/img/router2.jpg b/website/public/assets/img/router2.jpg new file mode 100644 index 0000000..1ec6527 Binary files /dev/null and b/website/public/assets/img/router2.jpg differ diff --git a/website/public/assets/img/rover.png b/website/public/assets/img/rover.png new file mode 100644 index 0000000..de95293 Binary files /dev/null and b/website/public/assets/img/rover.png differ diff --git a/website/public/assets/img/ssc.jpg b/website/public/assets/img/ssc.jpg new file mode 100644 index 0000000..d7509e2 Binary files /dev/null and b/website/public/assets/img/ssc.jpg differ diff --git a/website/public/assets/img/wrong.png b/website/public/assets/img/wrong.png new file mode 100644 index 0000000..1a1835e Binary files /dev/null and b/website/public/assets/img/wrong.png differ diff --git a/website/public/assets/svg/teleco.svg b/website/public/assets/svg/teleco.svg new file mode 100644 index 0000000..1cbb190 --- /dev/null +++ b/website/public/assets/svg/teleco.svg @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/public/index.php b/website/public/index.php new file mode 100644 index 0000000..a5905dc --- /dev/null +++ b/website/public/index.php @@ -0,0 +1,121 @@ + + + + + + + + Teleco.ch - <?php echo ucfirst($page); ?> + + + + +
+
> + +

Teleco.ch

+
+
+ + + + + +
+ +
+ + + + + + +
+ + + + + + + + + + execute(); + $lastPostId = 0; + while ($row = $result->fetchArray()): + $lastPostId++; + ?> +
+

+

+
+

Date:

+
+ + +
+

404 - Page Not Found

+

Sorry, the page you are looking for does not exist.

+
+ + +
+ +
+ + + + + + +
+ +
+
+ + + + + +
+ +
+ © 2025 Teleco.ch. All Rights Reserved. +
+ + \ No newline at end of file diff --git a/website2/.DS_Store b/website2/.DS_Store new file mode 100644 index 0000000..4a935d4 Binary files /dev/null and b/website2/.DS_Store differ diff --git a/website2/content2.db b/website2/content2.db new file mode 100644 index 0000000..e6aec42 Binary files /dev/null and b/website2/content2.db differ diff --git a/website2/public/assets/.DS_Store b/website2/public/assets/.DS_Store new file mode 100644 index 0000000..afa38b1 Binary files /dev/null and b/website2/public/assets/.DS_Store differ diff --git a/website2/public/assets/css/tc.css b/website2/public/assets/css/tc.css new file mode 100644 index 0000000..b2b32fc --- /dev/null +++ b/website2/public/assets/css/tc.css @@ -0,0 +1,452 @@ +html, body { + height: 100%; + margin: 0; + padding: 0; + font-family: Arial, sans-serif; + background-color: #FFFFFF; + color: #000000; + display: flex; + flex-direction: column; + overflow-x: hidden; +} + +header { + text-align: center; + background-color: #FFFFFF; + color: #FFFFFF; + display: flex; + flex-direction: column; + align-items: center; +} + +.header-content { + display: flex; + align-items: center; + justify-content: center; + background-color: #FFFFFF; + padding: 10px 20px; + padding-top: 15px; +} + +header h1 { + margin: 0; + font-size: 24px; + margin-left: 10px; + color: #D22627; +} + +header h2 { + margin: 5px 0 0 0; + font-size: 16px; + text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.6); +} + +.logo { + height: 40px; + width: auto; +} + +.container { + flex: 1; + display: flex; + width: 100%; + min-width: 300px; + align-items: flex-start; + flex-wrap: wrap; + margin: 20px auto; + margin-top: 0px; + margin-bottom: 0px; + max-width: 1200px; +} + +.sidebar, .sidebar-right { + width: 20%; min-width: 200px; max-width: 250px; + padding: 10px; + padding-bottom: 0px; + background-color: #FFEEEE; + border: 1px solid #D22627; + box-sizing: border-box; + display: block; align-self: flex-start; +} + +.content { + width: 60%; + flex-grow: 1; + padding: 10px; + box-sizing: border-box; +} + +.box { + margin-bottom: 10px; + padding: 10px; + border: 1px solid #D22627; + background-color: #FFFFFF; +} + +.box-last { + margin-bottom: 0px; +} + +.box h3 { + margin: 0 0 10px 0; + font-size: 16px; + color: #D22627; +} + +.box p, .box a { + margin: 5px 0; + font-size: 14px; + color: #000000; +} + +.box a { + color: #D22627; + text-decoration: none; +} + +.box a:hover { + text-decoration: underline; +} + +footer { + background-color: #D22627; + color: #FFFFFF; + text-align: center; + padding: 10px 0; + font-size: 14px; + width: 100%; + flex-shrink: 0; +} + +.navbar { + display: flex; + justify-content: space-between; + align-items: center; + background-color: #D22627; + padding: 10px; + color: #FFFFFF; +} + +.navbar-left, .navbar-center, .navbar-right { + display: flex; + align-items: center; +} + +.navbar-left { + justify-content: flex-start; + flex: 1; +} + +.navbar-center { + justify-content: center; + flex-grow: 1; + flex: 2; +} + +.navbar-right { + justify-content: flex-end; + flex: 1; +} + +.navbar a, .navbar span, .navbar input, .navbar img { + margin: 0 10px; + color: #FFFFFF; + text-decoration: none; +} + +.navbar button { + margin: 0 10px; + color: #000000; + text-decoration: none; +} + +.navbar a:hover, .navbar button:hover { + text-decoration: underline; +} + +.navbar-logo { + height: 40px; + width: auto; +} + +.navbar-dropdown { + position: relative; + color: #ffffff; + display: inline-block; +} + +.navbar-dropbtn { + background-color: #D22627; + color: white; + border: none; + cursor: pointer; +} + +.navbar-dropdown-content { + display: none; + position: absolute; + background-color: #f9f9f9; + min-width: 160px; + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); + z-index: 1; +} + +.navbar-dropdown-content a { + color: black; + padding: 12px 16px; + text-decoration: none; + display: block; +} + +.navbar-dropdown-content a:hover { + background-color: #f1f1f1; +} + +.navbar-dropdown:hover .navbar-dropdown-content { + display: block; +} + +.navbar-dropdown:hover .navbar-dropbtn { + background-color: #a10000; +} + +.mobile-navbar { + display: flex; + flex-direction: column; + align-items: center; + background-color: #D22627; + color: #FFFFFF; + width: 100%; + padding: 10px; +} + +.mobile-navbar-panel { + display: flex; + flex-direction: column; + align-items: flex-start; + background-color: #D22627; + color: #FFFFFF; + width: 100%; + padding: 10px; + gap: 10px; +} + +.mobile-navbar-panel .navbar-header { + display: flex; + flex-direction: column; + align-items: flex-start; + width: 100%; +} + +.mobile-navbar-panel .navbar-logo, .mobile-navbar-panel .navbar-title { + display: inline-block; + vertical-align: middle; +} + +.mobile-navbar-panel .navbar-toggle { + display: inline-block; + cursor: pointer; +} + +.mobile-navbar-panel .navbar-toggle::after { + content: ' ▼'; +} + +.mobile-navbar-menu { + display: flex; + flex-direction: column; + width: 100%; + background-color: #D22627; + text-align: center; + align-items: center; + padding: 10px; + box-sizing: border-box; +} + +.mobile-navbar-menu a, +.mobile-navbar-menu span, +.mobile-navbar-menu input, +.mobile-navbar-menu button { + display: block; + padding: 10px; + border-bottom: 1px solid #FFFFFF; + text-align: center; + width: 80vw; + box-sizing: border-box; + margin: 0; +} + +.mobile-navbar-menu a:hover, +.mobile-navbar-menu button:hover { + background-color: #a10000; +} + +.mobile-navbar-menu button { + text-align: center; + width: 80vw; + margin: 0 auto; + display: block; +} + +input[type="checkbox"] { + display: none; +} + +input[type="checkbox"]:checked ~ .mobile-navbar-items { + display: block; +} + +@media screen and (max-width: 1279px) { + .container { + flex-direction: column; + padding: 10px; + padding-top: 0px; + padding-bottom: 0px; + width: 100%; + min-width: auto; + box-sizing: border-box; + } + + .sidebar, .sidebar-right, .content { + width: 100%; + min-width: auto; + max-width: none; + flex-grow: 0; + margin-bottom: 20px; + } + + .header-content { + padding-top: 10px; + } + + header h1 { + font-size: 20px; + } + + header h2 { + font-size: 14px; + } + + .box h3 { + font-size: 16px; + } + + .box p, .box a { + font-size: 12px; + } + + footer { + font-size: 12px; + padding: 5px; + } + + .navbar { + display: none; + } + + .mobile-navbar { + display: flex; + flex-direction: column; + align-items: center; + background-color: #D22627; + padding: 10px; + color: #FFFFFF; + width: 100%; + } + + .mobile-navbar .navbar-header { + display: flex; + justify-content: space-between; + width: 100%; + align-items: center; + } + + .mobile-navbar .navbar-logo, .mobile-navbar .navbar-title { + display: inline-block; + vertical-align: middle; + } + + .mobile-navbar .navbar-toggle { + display: inline-block; + cursor: pointer; + } + + .mobile-navbar .navbar-toggle::after { + content: ' ▼'; + } + + .mobile-navbar-items { + display: flex; + flex-direction: column; + width: 100%; + background-color: #D22627; + text-align: center; + align-items: center; + } + + .mobile-navbar-items a, + .mobile-navbar-items span, + .mobile-navbar-items input, + .mobile-navbar-items button { + display: block; + padding: 10px; + border-bottom: 1px solid #FFFFFF; + text-align: center; + width: 80vw; + box-sizing: border-box; + margin: 0; + } + + .mobile-navbar-items a:hover, + .mobile-navbar-items button:hover { + background-color: #3e8e41; + } + + .mobile-navbar-items button { + text-align: center; + width: 80vw; + margin: 0 auto; + display: block; + } + + input[type="checkbox"] { + display: none; + } + + input[type="checkbox"]:checked ~ .mobile-navbar-items { + display: block; + } +} + +@media screen and (min-width: 1280px) { + .container { + width: 100%; + min-width: 300px; + } + + .sidebar, .sidebar-right { + width: 20%; + min-width: 200px; + max-width: 250px; + } + + .content { + width: 60%; + flex-grow: 1; + } + + .mobile-navbar, .mobile-navbar-panel, .mobile-navbar-menu { + display: none; + } +} + +.breadcrumbs { + margin-bottom: 10px; + padding: 10px; + border: 1px solid #D22627; + background-color: #FFFFFF; +} + +.sidebar a.active, .sidebar-right a.active { + text-decoration: underline; +} \ No newline at end of file diff --git a/website2/public/assets/img/.DS_Store b/website2/public/assets/img/.DS_Store new file mode 100644 index 0000000..f77b18d Binary files /dev/null and b/website2/public/assets/img/.DS_Store differ diff --git a/website2/public/assets/img/code-is-ass.jpeg b/website2/public/assets/img/code-is-ass.jpeg new file mode 100644 index 0000000..c35aa9e Binary files /dev/null and b/website2/public/assets/img/code-is-ass.jpeg differ diff --git a/website2/public/assets/img/dialon.png b/website2/public/assets/img/dialon.png new file mode 100644 index 0000000..6ceef81 Binary files /dev/null and b/website2/public/assets/img/dialon.png differ diff --git a/website2/public/assets/img/force.png b/website2/public/assets/img/force.png new file mode 100644 index 0000000..fa2c8c6 Binary files /dev/null and b/website2/public/assets/img/force.png differ diff --git a/website2/public/assets/img/fuck-main.jpeg b/website2/public/assets/img/fuck-main.jpeg new file mode 100644 index 0000000..3acbd91 Binary files /dev/null and b/website2/public/assets/img/fuck-main.jpeg differ diff --git a/website2/public/assets/img/fuckjs.jpeg b/website2/public/assets/img/fuckjs.jpeg new file mode 100644 index 0000000..06f8a6d Binary files /dev/null and b/website2/public/assets/img/fuckjs.jpeg differ diff --git a/website2/public/assets/img/jsmomentom.jpg b/website2/public/assets/img/jsmomentom.jpg new file mode 100644 index 0000000..166d5ba Binary files /dev/null and b/website2/public/assets/img/jsmomentom.jpg differ diff --git a/website2/public/assets/img/router1.jpg b/website2/public/assets/img/router1.jpg new file mode 100644 index 0000000..92f7e91 Binary files /dev/null and b/website2/public/assets/img/router1.jpg differ diff --git a/website2/public/assets/img/router2.jpg b/website2/public/assets/img/router2.jpg new file mode 100644 index 0000000..1ec6527 Binary files /dev/null and b/website2/public/assets/img/router2.jpg differ diff --git a/website2/public/assets/img/rover.png b/website2/public/assets/img/rover.png new file mode 100644 index 0000000..de95293 Binary files /dev/null and b/website2/public/assets/img/rover.png differ diff --git a/website2/public/assets/img/ssc.jpg b/website2/public/assets/img/ssc.jpg new file mode 100644 index 0000000..d7509e2 Binary files /dev/null and b/website2/public/assets/img/ssc.jpg differ diff --git a/website2/public/assets/img/wrong.png b/website2/public/assets/img/wrong.png new file mode 100644 index 0000000..1a1835e Binary files /dev/null and b/website2/public/assets/img/wrong.png differ diff --git a/website2/public/assets/svg/teleco.svg b/website2/public/assets/svg/teleco.svg new file mode 100644 index 0000000..1cbb190 --- /dev/null +++ b/website2/public/assets/svg/teleco.svg @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website2/public/index.php b/website2/public/index.php new file mode 100644 index 0000000..f71b8d2 --- /dev/null +++ b/website2/public/index.php @@ -0,0 +1,120 @@ + + + + + + + + Teleco.ch - <?php echo ucfirst($page); ?> + + + + +
+
> + +

Teleco.ch

+
+
+ + + + + +
+ +
+ + + + + + +
+ + + + + + + + + + execute(); + $lastPostId = 0; + while ($row = $result->fetchArray()): + $lastPostId++; + ?> +
+

+

+
+

Date:

+
+ + +
+

404 - Page Not Found

+

Sorry, the page you are looking for does not exist.

+
+ + +
+ +
+ + + + + + +
+ +
+
+ + + + + +
+ +
+ © 2025 Teleco.ch. All Rights Reserved. +
+ + \ No newline at end of file diff --git a/website3/.DS_Store b/website3/.DS_Store new file mode 100644 index 0000000..c328838 Binary files /dev/null and b/website3/.DS_Store differ diff --git a/website3/content3.db b/website3/content3.db new file mode 100644 index 0000000..c4bab0f Binary files /dev/null and b/website3/content3.db differ diff --git a/website3/public/assets/.DS_Store b/website3/public/assets/.DS_Store new file mode 100644 index 0000000..59caf08 Binary files /dev/null and b/website3/public/assets/.DS_Store differ diff --git a/website3/public/assets/css/dialon.css b/website3/public/assets/css/dialon.css new file mode 100644 index 0000000..96c1e85 --- /dev/null +++ b/website3/public/assets/css/dialon.css @@ -0,0 +1,313 @@ +/* Base Styles */ +:root { + --primary-color: #ff9900; + --secondary-color: #1a1a1a; + --background-color: #333; + --text-color: #e6e6e6; + --border-color: #444; + --navbar-color: #d88900; + --navbar-text-color: #fff; + --navbar-hover-color: #ffbb00; + --hover-color: #ffbb00; + --hover-text-color: #1a1a1a; +} + +@font-face { + font-family: 'default-512'; + font-style: normal; + font-weight: 400; + src: url('../fonts/default.ttf') format('truetype'); +} + +body { + background-color: var(--secondary-color); + color: var(--text-color); + margin: 0; + padding: 0; + font-family: Arial, comic-sans; /* ich bin so lustig */ +} + +header, .header-content { + background-color: var(--secondary-color); + color: var(--text-color); + text-align: center; /* Center the header content wenn mer kei bock uf navbar her */ +} + +header h1 { + color: var(--primary-color); + font-family: 'default-512', Arial, sans-serif; /* fonts sexi mache*/ +} + +h2 { + color: var(--primary-color); + font-family: 'default-512', Arial, sans-serif; /* nomal fonts sexi mache will us irgend nem grund die ganz site kappoot gaht wenn ich d'funt universal ahwände*/ +} + +.sidebar, .sidebar-right, .box, .chat-log, .chat-input .breadcrumbs { + background-color: var(--background-color); + border: 1px solid var(--border-color); + border-radius: 10px; /* mmmm rundi ecke damit mer sich ned ritzt */ +} + +.breadcrumbs { + background-color: var(--background-color); + border: 1px solid var(--border-color); + border-radius: 10px; + padding: 10px; + margin-bottom: 10px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + font-family: 'default-512', Arial, sans-serif; +} + +.breadcrumbs a { + color: var(--primary-color); + text-decoration: none; +} + +.breadcrumbs a:hover { + text-decoration: underline; +} + +.sidebar { + float: left; + width: 20%; + min-width: 200px; + max-width: 250px; + padding: 10px; + padding-bottom: 0px; + box-sizing: border-box; + padding-bottom: 0px; +} + +.sidebar-right { + float: right; + width: 20%; + min-width: 200px; + max-width: 250px; + padding: 10px; + padding-bottom: 0px; + box-sizing: border-box; +} + +.sidebar a, .sidebar-right a, .services a, .menu-overlay .menu-links a, .load-more-button, .mobile-navbar-menu button{ + display: block; + background-color: var(--background-color); + color: var(--text-color); + padding: 12px 20px; + text-decoration: none; + border-radius: 10px; + transition: background-color 0.3s ease; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + margin-bottom: 10px; + font-family: 'default-512', Arial, sans-serif; + border: none; +} + +.sidebar a:hover, .sidebar-right a:hover, .sidebar a.active, .sidebar-right a.active, .services a:hover, .menu-overlay .menu-links a:hover, .load-more-button:hover { + background-color: var(--hover-color); + color: var(--hover-text-color); +} + +.container { + flex: 1; + display: flex; + width: 100%; + min-width: 300px; + align-items: flex-start; + flex-wrap: wrap; + margin: 20px auto 0; + max-width: 1200px; +} + +.content { + width: 60%; + flex-grow: 1; + padding: 10px; + box-sizing: border-box; +} + +.box { + margin-bottom: 10px; + padding: 10px; +} + +.box h3 { + margin: 0 0 10px 0; + font-size: 16px; + color: var(--primary-color); + font-family: 'default-512', Arial, sans-serif; + +} + +.box p, .box a { + margin: 5px 0; + font-size: 14px; + color: var(--text-color); + font-family: 'default-512', Arial, sans-serif; +} + +.box a { + color: var(--primary-color); + text-decoration: none; +} + +.box a:hover { + text-decoration: underline; +} + +footer { + background-color: var(--border-color); + color: var(--text-color); + text-align: center; + padding: 10px 0; + font-size: 14px; + width: 100%; + flex-shrink: 0; +} + +hr { + border: 1px solid var(--border-color); + margin: 20px 0; +} + +.left-aligned-title { + text-align: left; + font-size: 48px; + font-weight: bold; + color: var(--primary-color); + margin-bottom: 15px; + text-decoration: none; + font-family: 'default-512', Arial, sans-serif; +} + +.navbar-title { + + text-decoration: none; +} + +.no-top-m { + margin-top: 0 !important; +} + +.ascii-box { + border: 2px solid #555; + border-radius: 10px; + padding: 20px; + color: var(--primary-color); + font-size: 18px; + font-family: 'default-512', Arial, sans-serif; +} + +.services { + display: flex; + justify-content: center; + flex-wrap: wrap; + gap: 20px; + margin: 20px 0; +}.chat-container { + position: fixed; + bottom: 0; + right: 20px; + width: 90%; + max-width: 400px; + background-color: var(--secondary-color); + border: 2px solid var(--border-color); + border-radius: 10px; + padding: 20px; + z-index: 1001; + transform: translateY(100%); + opacity: 0; + transition: transform 0.4s ease, opacity 0.4s ease, visibility 0.4s ease; + visibility: hidden; +} + +.chat-container.open { + transform: translateY(0); + opacity: 1; + visibility: visible; +} + +.chat-header { + font-size: 20px; + font-weight: bold; + color: var(--secondary-color); + text-align: center; + margin-bottom: 10px; + position: relative; + font-family: 'default-512', Arial, sans-serif; +} + +.audio-track { + margin: 20px 0; + text-align: center; +} + +.complaints { + text-align: center; + margin-top: 40px; +} + +.complaints a { + color: #ffbb00; + text-decoration: none; + transition: color 0.3s ease; + font-family: 'default-512', Arial, sans-serif; +} + +.complaints a:hover { + color: #ff99cc; +} + +.mobile-only { + display: none; +} + +ul { + list-style-type: none; + padding: 0; +} + +ul li { + padding: 10px 15px; + margin-bottom: 10px; + border-radius: 10px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + font-family: 'default-512', Arial, sans-serif; +} + +ul li::before { + content: "•"; + color: var(--primary-color); + padding-right: 10px; +} + +ul li span { + font-weight: bold; + color: var(--primary-color); +} + + + +h4 { + text-decoration: underline; + size: 12px; + color: var(--primary-color); + font-family: 'default-512', Arial, sans-serif; +} + +@media screen and (max-width: 1280px) { + .sidebar, .sidebar-right { + display: none; + } +} + +@media screen and (min-width: 1281px) { + .hamburger-menu { + display: none; + } + + .chat-toggle-btn { + bottom: 20px; + } +} + diff --git a/website3/public/assets/css/extras.css b/website3/public/assets/css/extras.css new file mode 100644 index 0000000..4a9f2fc --- /dev/null +++ b/website3/public/assets/css/extras.css @@ -0,0 +1,180 @@ +.send-btn { + background-color: var(--primary-color); + color: var(--secondary-color); +} + +.send-btn:hover { + background-color: #ffbb00; +} + +.chat-toggle-btn { + position: fixed; + bottom: 20px; + right: 20px; + width: 50px; + height: 50px; + border: none; + border-radius: 50%; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + cursor: pointer; + z-index: 1000; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + transition: background-color 0.3s ease; + background-color: var(--background-color); + color: var(--primary-color); +} + +.chat-toggle-btn svg { + width: 24px; + height: 24px; + fill: var(--primary-color); + transition: fill 0.3s ease; +} + +.chat-toggle-btn:hover, +.chat-toggle-btn.open { + background-color: var(--primary-color); +} + +.chat-toggle-btn:hover svg, +.chat-toggle-btn.open svg { + fill: var(--secondary-color); +} + +.chat-close-btn { + color: var(--primary-color); +} + +.chat-close-btn:hover { + color: var(--secondary-color); +} + +.chat-close-btn { + position: absolute; + top: 0; + right: 0; + font-size: 18px; + background: none; + border: none; + cursor: pointer; +} + +.chat-log { + height: 300px; + overflow-y: auto; + padding: 10px; + border-radius: 10px; + margin-bottom: 10px; + font-family: 'Courier New', Courier, monospace; +} + +.chat-message { + margin: 5px 0; + font-family: 'default-512', Arial, sans-serif; +} + +.chat-message .sender { + font-weight: bold; +} + +.chat-message .virtual-assistant { + color: red; +} + +.chat-message .user { + color: blue; +} + +.chat-input-container { + display: flex; + gap: 10px; +} + +.chat-input { + flex: 1; + padding: 10px; + border-radius: 10px; + font-family: 'default-512', Arial, sans-serif; + color: var(--primary-color); + background-color: var(--secondary-color); + border: 1px solid var(--border-color); +} + +.chat-input:focus { + outline: none; + border-color: var(--primary-color); +} + +.send-btn { + padding: 10px; + border: none; + cursor: pointer; + border-radius: 10px; +} + +.chat-container { + position: fixed; + bottom: 0; + right: 0; + margin-right: 20px; + max-width: 400px; + background-color: var(--secondary-color); + border: 2px solid var(--border-color); + border-radius: 10px; + padding: 20px; + z-index: 1001; + transform: translateY(100%); + opacity: 0; + transition: transform 0.4s ease, opacity 0.4s ease, visibility 0.4s ease; + visibility: hidden; +} + +.chat-container.open { + transform: translateY(0); + opacity: 1; + visibility: visible; +} + +.chat-header { + font-size: 20px; + font-weight: bold; + color: var(--primary-color); + text-align: center; + margin-bottom: 10px; + position: relative; + font-family: 'default-512', Arial, sans-serif; +} + +@media (max-width: 600px) { + .chat-container { + width: 100%; + margin: 0px; + padding: 20px; + box-sizing: border-box; + } +} + +@media (min-width: 1280px) { + .sidebar, .sidebar-right { + display: block; + } + + .chat-toggle-btn { + bottom: 20px; + right: 20px; + } +} + +@media (max-width: 1279px) { + .sidebar, .sidebar-right { + display: none; + } + + .chat-toggle-btn { + bottom: 100px; + right: 20px; + } +} diff --git a/website3/public/assets/css/hamburger.css b/website3/public/assets/css/hamburger.css new file mode 100644 index 0000000..031d011 --- /dev/null +++ b/website3/public/assets/css/hamburger.css @@ -0,0 +1,138 @@ +.hamburger-menu { + display: none; + position: fixed; + bottom: 20px; + right: 20px; + width: 50px; + height: 50px; + background-color: var(--background-color); + color: var(--primary-color); + border: none; + border-radius: 50%; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + cursor: pointer; + z-index: 1001; + transition: background-color 0.3s ease; + display: flex; + align-items: center; + justify-content: center; + padding: 0; +} + +.hamburger-menu svg { + width: 24px; + height: 24px; + fill: var(--primary-color); + transition: fill 0.3s ease; +} + +.hamburger-menu:hover, +.hamburger-menu.open { + background-color: var(--primary-color); +} + +.hamburger-menu:hover svg, +.hamburger-menu.open svg { + fill: var(--secondary-color); +} + +.menu-overlay { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 100%; + background-color: var(--secondary-color); + color: white; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + transition: transform 0.3s ease-in-out; + z-index: 1000; + transform: translateY(100%); + overflow-y: auto; +} + +.menu-overlay.open { + transform: translateY(0); +} + +.menu-content { + text-align: center; + width: 100%; + padding: 20px; + box-sizing: border-box; +} + +.menu-content .box { + background-color: var(--background-color); + margin: 10px 0; + padding: 10px; + border: 1px solid var(--border-color); + border-radius: 10px; + box-sizing: border-box; +} + +.menu-content .box a { + display: block; + background-color: var(--background-color); + color: var(--text-color); + padding: 12px 20px; + text-decoration: none; + border-radius: 10px; + transition: background-color 0.3s ease; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + margin-bottom: 10px; +} + +.menu-content .box a:hover, .menu-content .box a.active { + background-color: var(--primary-color); + color: var(--secondary-color); +} + +.menu-close-btn { + position: absolute; + top: 20px; + right: 20px; + background: none; + border: none; + color: var(--primary-color); + font-size: 24px; + cursor: pointer; +} + +.menu-close-btn:hover { + color: var(--secondary-color); +} + +@media screen and (max-width: 1280px) { + .sidebar, .sidebar-right { + display: none; + } + + .hamburger-menu { + display: flex; + } + + .menu-overlay { + display: block; + } +} + +@media screen and (max-width: 600px) { + .menu-content { + padding: 10px; + } + + .menu-content .box a { + padding: 10px; + font-size: 14px; + } +} + +@media screen and (min-width: 1281px) { + .hamburger-menu { + display: none; + } +} \ No newline at end of file diff --git a/website3/public/assets/css/navbar.css b/website3/public/assets/css/navbar.css new file mode 100644 index 0000000..6f63aa8 --- /dev/null +++ b/website3/public/assets/css/navbar.css @@ -0,0 +1,224 @@ +.navbar { + background-color: var(--secondary-color); + padding: 10px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + font-family: 'default-512', Arial, sans-serif; + position: relative; +} + +.navbar-container { + display: flex; + justify-content: space-between; + align-items: center; +} + +.navbar-left, .navbar-center, .navbar-right { + display: flex; + align-items: center; +} + +.navbar-center { + justify-content: center; + flex-grow: 1; +} + +.navbar-mobile { + display: none; + justify-content: space-between; + align-items: center; + width: 100%; + background-color: var(--secondary-color); + padding: 10px; +} + +.navbar-mobile .navbar-left { + display: flex; + align-items: center; +} + +.navbar-logo { + height: 40px; + margin-right: 10px; +} + +.navbar-title { + font-size: 20px; + font-weight: bold; + color: var(--primary-color); + padding-right: 20px; +} + +.navbar, .navbar button, .navbar input[type="text"], .navbar input[type="search"] { + color: var(--navbar-text-color); + text-decoration: none; + padding-inline: 10px; + margin: 0 5px; + border: none; + background: none; + cursor: pointer; + transition: color 0.3s ease; + font-family: 'default-512', Arial, sans-serif; + font-size: 18px; +} + +.navbar-link { + color: var(--navbar-text-color); + text-decoration: none; + border: none; + background: none; + cursor: pointer; + transition: color 0.3s ease; + font-family: 'default-512', Arial, sans-serif; +} + +.dropdown-link { + color: var(--navbar-text-color); + text-decoration: none; + transition: color 0.3s ease; + font-family: 'default-512', Arial, sans-serif; + padding-top: 5px; +} + +.navbar a:hover, .navbar button:hover { + color: var(--navbar-hover-color); +} + +.navbar-dropdown { + position: relative; + display: inline-block; +} + +.navbar-dropbtn { + background-color: var(--navbar-color); + color: var(--navbar-text-color); + padding: 10px; + font-size: 16px; + border: none; + cursor: pointer; + border-radius: 10px; +} + +.navbar-dropdown-content { + display: none; + position: absolute; + background-color: var(--background-color); + min-width: 160px; + box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2); + z-index: 1; + border-radius: 10px; +} + +.navbar-dropdown:hover .navbar-dropdown-content { + display: block; +} + +.navbar-dropdown-content a { + color: var(--text-color); + padding: 12px 16px; + text-decoration: none; + display: block; + border-bottom: 1px solid var(--border-color); +} + +.navbar-dropdown-content a:last-child { + border-bottom: none; +} + +.bruh-why { + padding-inline: 0px; +} + +.mobile-navbar-dropdown { + padding-top: 5px; +} + +.mobile-navbar-dropdown:hover { + color: var(--navbar-hover-color); +} + +.navbar-toggle { + display: none; + background: none; + border: none; + color: var(--primary-color); + cursor: pointer; + font-size: 24px; +} + +.mobile-navbar-menu { + display: flex; + flex-direction: column; + width: 100%; + background-color: var(--secondary-color); + border-radius: 10px; + max-height: 0; + overflow: hidden; + transition: max-height 0.4s ease-out, padding 0.4s ease-out; + padding-top: 0; + padding-bottom: 0; +} + +.mobile-navbar-menu.open { + padding-top: 10px; + padding-bottom: 10px; +} + +.mobile-navbar-menu input[type="text"], +.mobile-navbar-menu input[type="search"] { + padding: 10px; + margin: 5px 0; + border: none; + background: none; + cursor: pointer; + transition: color 0.3s ease; + font-family: 'default-512', Arial, sans-serif; + color: var(--navbar-text-color); + text-decoration: none; + display: block; + width: 100%; + box-sizing: border-box; +} + +.mobile-navbar-menu input[type="text"]:hover, +.mobile-navbar-menu input[type="search"]:hover, +.mobile-navbar-menu button:hover { + color: var(--navbar-hover-color); +} + +@media screen and (max-width: 768px) { + .navbar-container { + display: none; + } + + .navbar-mobile { + display: flex; + } + + .navbar-toggle { + display: block; + } +} + +@media screen and (min-width: 769px) { + .mobile-navbar-menu { + display: none !important; + } +} + +.navbar .buttonify{ + display: block; + background-color: var(--background-color); /* penis haha lol ja das isch psychose klass will buttons nei segged abunzdue*/ + color: var(--text-color); + padding: 12px 20px; + text-decoration: none; + border-radius: 10px; + transition: background-color 0.3s ease; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + font-family: 'default-512', Arial, sans-serif; + border: none; +} + +.navbar .buttonify:hover { + background-color: var(--hover-color); + color: var(--hover-text-color); +} diff --git a/website3/public/assets/fonts/.DS_Store b/website3/public/assets/fonts/.DS_Store new file mode 100644 index 0000000..b998872 Binary files /dev/null and b/website3/public/assets/fonts/.DS_Store differ diff --git a/website3/public/assets/fonts/default.ttf b/website3/public/assets/fonts/default.ttf new file mode 100644 index 0000000..37deb9a Binary files /dev/null and b/website3/public/assets/fonts/default.ttf differ diff --git a/website3/public/assets/img/.DS_Store b/website3/public/assets/img/.DS_Store new file mode 100644 index 0000000..f77b18d Binary files /dev/null and b/website3/public/assets/img/.DS_Store differ diff --git a/website3/public/assets/img/code-is-ass.jpeg b/website3/public/assets/img/code-is-ass.jpeg new file mode 100644 index 0000000..c35aa9e Binary files /dev/null and b/website3/public/assets/img/code-is-ass.jpeg differ diff --git a/website3/public/assets/img/dialon.png b/website3/public/assets/img/dialon.png new file mode 100644 index 0000000..6ceef81 Binary files /dev/null and b/website3/public/assets/img/dialon.png differ diff --git a/website3/public/assets/img/force.png b/website3/public/assets/img/force.png new file mode 100644 index 0000000..fa2c8c6 Binary files /dev/null and b/website3/public/assets/img/force.png differ diff --git a/website3/public/assets/img/fuck-main.jpeg b/website3/public/assets/img/fuck-main.jpeg new file mode 100644 index 0000000..3acbd91 Binary files /dev/null and b/website3/public/assets/img/fuck-main.jpeg differ diff --git a/website3/public/assets/img/fuckjs.jpeg b/website3/public/assets/img/fuckjs.jpeg new file mode 100644 index 0000000..06f8a6d Binary files /dev/null and b/website3/public/assets/img/fuckjs.jpeg differ diff --git a/website3/public/assets/img/jsmomentom.jpg b/website3/public/assets/img/jsmomentom.jpg new file mode 100644 index 0000000..166d5ba Binary files /dev/null and b/website3/public/assets/img/jsmomentom.jpg differ diff --git a/website3/public/assets/img/router1.jpg b/website3/public/assets/img/router1.jpg new file mode 100644 index 0000000..92f7e91 Binary files /dev/null and b/website3/public/assets/img/router1.jpg differ diff --git a/website3/public/assets/img/router2.jpg b/website3/public/assets/img/router2.jpg new file mode 100644 index 0000000..1ec6527 Binary files /dev/null and b/website3/public/assets/img/router2.jpg differ diff --git a/website3/public/assets/img/rover.png b/website3/public/assets/img/rover.png new file mode 100644 index 0000000..de95293 Binary files /dev/null and b/website3/public/assets/img/rover.png differ diff --git a/website3/public/assets/img/ssc.jpg b/website3/public/assets/img/ssc.jpg new file mode 100644 index 0000000..d7509e2 Binary files /dev/null and b/website3/public/assets/img/ssc.jpg differ diff --git a/website3/public/assets/img/wrong.png b/website3/public/assets/img/wrong.png new file mode 100644 index 0000000..1a1835e Binary files /dev/null and b/website3/public/assets/img/wrong.png differ diff --git a/website3/public/assets/js/chat.js b/website3/public/assets/js/chat.js new file mode 100644 index 0000000..8caa573 --- /dev/null +++ b/website3/public/assets/js/chat.js @@ -0,0 +1,94 @@ +// chat container setup for maximum verwirrung weil ich kann das alles langsam nicht mehr junge die sprach macht kei sinn +const chatContainer = document.getElementById('chat-container'); +const chatLog = document.getElementById('chat-log'); +const userInput = document.getElementById('user-input'); +let hasGreeted = false; // flag so we only say grǔtzi eimal und ned sächzgs mal junge das wäri fett weird + +// toggle chat open and closed again ????????????? i dont remember what i haben gesoffen hier +function toggleChat() { + if (chatContainer.classList.contains('open')) { + chatContainer.classList.remove('open'); + setTimeout(() => { + chatContainer.style.visibility = 'hidden'; + }, 400); // match delay with css so it doesnt look wie abfall + } else { + chatContainer.style.visibility = 'visible'; + chatContainer.classList.add('open'); + + // the actuall saying grǔtzi miternaand gugus + if (!hasGreeted) { + displayMessage('Virtual Assistant', "Grǔtzi 🇨🇭 ! I'm your virtual assistant! Please tell me about your problem or what you need help with."); + hasGreeted = true; + } + } +} + +// send message when enter key is pressed because who will press a button to send a message ???? are you a psychopat ? +userInput.addEventListener('keypress', function(event) { + if (event.key === 'Enter') { + sendMessage(); + } +}); + +// handle sending messages +function sendMessage() { + const userMessage = userInput.value.trim(); + if (userMessage) { + displayMessage('You', userMessage); + userInput.value = ''; + setTimeout(() => catReply(userMessage), 1000); // delay for realism so the "assistant" can "think" about the reply + } +} + +// put a message in the chat log will chat funktioniert ned ohni message history und so lol +function displayMessage(sender, message) { + const messageElement = document.createElement('div'); + messageElement.classList.add('chat-message'); + + const senderSpan = document.createElement('span'); + senderSpan.classList.add('sender'); + senderSpan.classList.add(sender === 'You' ? 'user' : 'virtual-assistant'); + senderSpan.textContent = sender + ': '; + + const messageSpan = document.createElement('span'); + messageSpan.textContent = message; + + messageElement.appendChild(senderSpan); + messageElement.appendChild(messageSpan); + chatLog.appendChild(messageElement); + chatLog.scrollTop = chatLog.scrollHeight; +} + +// cat assistant category based matched replies +function catReply(userMessage) { + const keywords = { + "help": ["meeeooow...? figure it out yourself! because that sounds like a you problem bahahahasdjkasadlkj 💀", "meeooww! welp too bad. help yourself bahasjdhaskjdhaskjdh", "mrrrow! idk either lol. go ask yourself maybe your smart if you use your brain instread of relying on a virtual assistant cat"], + "problem": ["meeooow, eh thats normal here, should've chosen someone else to host your stuff ngl lol", "mrow, contact sysadminier maybe idk? i am just cat or a teaput ???? idk what i am help aaaaaaa", "mreeow, tell me more ig... if you want idc lol"], + "default": ["meow", "meeooow!", "mew.", "mrow!", "meeow...", "meow, meow.", "mroww", "mlem"] + }; + + // generate a bs reply to fool user into thinking the cat assistant is actually doing something + function generateScrambledReply() { + const phrases = keywords["default"]; + let scrambled = []; + const length = Math.floor(Math.random() * 3) + 3; // random length of reply 3-5 words + + for (let i = 0; i < length; i++) { + const randomPhrase = phrases[Math.floor(Math.random() * phrases.length)]; + scrambled.push(randomPhrase); + } + return scrambled.join(" "); + } + + // check for keywords in user message and decide what kind of blödsinn to say zu the schafseckel using the chat + let reply; + if (userMessage.toLowerCase().includes("help")) { + reply = keywords["help"][Math.floor(Math.random() * keywords["help"].length)]; + } else if (userMessage.toLowerCase().includes("problem")) { + reply = keywords["problem"][Math.floor(Math.random() * keywords["problem"].length)]; + } else { + reply = generateScrambledReply(); // generate scrambled reply for "default" case + } + + displayMessage('Virtual Assistant', reply); +} \ No newline at end of file diff --git a/website3/public/assets/js/menu.js b/website3/public/assets/js/menu.js new file mode 100644 index 0000000..8994ac9 --- /dev/null +++ b/website3/public/assets/js/menu.js @@ -0,0 +1,40 @@ +document.addEventListener('DOMContentLoaded', function () { + // menu overlay so we can open and close it bruh + const overlay = document.querySelector('.menu-overlay'); + const hamburger = document.querySelector('.hamburger-menu'); + + function toggleMenu() { + if (overlay.classList.contains('open')) { + overlay.classList.remove('open'); + setTimeout(() => { + overlay.style.visibility = 'hidden'; + }, 400); // match this delay with the css transition duration because ja isch halt so + } else { + overlay.style.visibility = 'visible'; + overlay.classList.add('open'); + } + hamburger.classList.toggle('open'); + document.body.style.overflow = overlay.classList.contains('open') ? 'hidden' : ''; // no scrolling on the main page while menu is open + } + + // if burger king menu button exists, hook it up to toggle the menu + if (hamburger) { + hamburger.addEventListener('click', function () { + toggleMenu(); + }); + } + + // close menu when clicking a link inside it because so funktioniert das halt, pech gha wenns der nid passt lol + if (overlay) { + overlay.querySelectorAll('a').forEach(link => { + link.addEventListener('click', () => { + overlay.classList.remove('open'); + setTimeout(() => { + overlay.style.visibility = 'hidden'; + hamburger.classList.remove('open'); + document.body.style.overflow = ''; // kei ahnig was das macht aber es het mis problem emol glöst + }, 400); // match transition duration ... again no clue what this actually does but it works so i'm not touching it + }); + }); + } +}); \ No newline at end of file diff --git a/website3/public/assets/svg/teleco.svg b/website3/public/assets/svg/teleco.svg new file mode 100644 index 0000000..1cbb190 --- /dev/null +++ b/website3/public/assets/svg/teleco.svg @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website3/public/index.php b/website3/public/index.php new file mode 100644 index 0000000..c16197a --- /dev/null +++ b/website3/public/index.php @@ -0,0 +1,190 @@ + + + + + + + + Dialon - <?php echo ucfirst($page); ?> + + + + + + + + + + + + + + +
+
> + +

dialon.ch

+
+
+ + + + + + + + + + + + +
+ + + + + + +
+ + + + execute(); + $lastPostId = 0; + while ($row = $result->fetchArray()): + $lastPostId++; + ?> +
+

+

+
+

Date:

+
+ + +
+

404 - Page Not Found

+

Sorry, the page you are looking for does not exist.

+
+ + +
+ +
+ + + + + + +
+ +
+
+ + + + + +
+ + + + + +
+
+ Virtual Assistant Chat + +
+
+
+ + +
+
+ + + + + + + + + diff --git a/website4/.DS_Store b/website4/.DS_Store new file mode 100644 index 0000000..c328838 Binary files /dev/null and b/website4/.DS_Store differ diff --git a/website4/content4.db b/website4/content4.db new file mode 100644 index 0000000..e6aec42 Binary files /dev/null and b/website4/content4.db differ diff --git a/website4/public/assets/.DS_Store b/website4/public/assets/.DS_Store new file mode 100644 index 0000000..59caf08 Binary files /dev/null and b/website4/public/assets/.DS_Store differ diff --git a/website4/public/assets/css/dialon.css b/website4/public/assets/css/dialon.css new file mode 100644 index 0000000..96c1e85 --- /dev/null +++ b/website4/public/assets/css/dialon.css @@ -0,0 +1,313 @@ +/* Base Styles */ +:root { + --primary-color: #ff9900; + --secondary-color: #1a1a1a; + --background-color: #333; + --text-color: #e6e6e6; + --border-color: #444; + --navbar-color: #d88900; + --navbar-text-color: #fff; + --navbar-hover-color: #ffbb00; + --hover-color: #ffbb00; + --hover-text-color: #1a1a1a; +} + +@font-face { + font-family: 'default-512'; + font-style: normal; + font-weight: 400; + src: url('../fonts/default.ttf') format('truetype'); +} + +body { + background-color: var(--secondary-color); + color: var(--text-color); + margin: 0; + padding: 0; + font-family: Arial, comic-sans; /* ich bin so lustig */ +} + +header, .header-content { + background-color: var(--secondary-color); + color: var(--text-color); + text-align: center; /* Center the header content wenn mer kei bock uf navbar her */ +} + +header h1 { + color: var(--primary-color); + font-family: 'default-512', Arial, sans-serif; /* fonts sexi mache*/ +} + +h2 { + color: var(--primary-color); + font-family: 'default-512', Arial, sans-serif; /* nomal fonts sexi mache will us irgend nem grund die ganz site kappoot gaht wenn ich d'funt universal ahwände*/ +} + +.sidebar, .sidebar-right, .box, .chat-log, .chat-input .breadcrumbs { + background-color: var(--background-color); + border: 1px solid var(--border-color); + border-radius: 10px; /* mmmm rundi ecke damit mer sich ned ritzt */ +} + +.breadcrumbs { + background-color: var(--background-color); + border: 1px solid var(--border-color); + border-radius: 10px; + padding: 10px; + margin-bottom: 10px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + font-family: 'default-512', Arial, sans-serif; +} + +.breadcrumbs a { + color: var(--primary-color); + text-decoration: none; +} + +.breadcrumbs a:hover { + text-decoration: underline; +} + +.sidebar { + float: left; + width: 20%; + min-width: 200px; + max-width: 250px; + padding: 10px; + padding-bottom: 0px; + box-sizing: border-box; + padding-bottom: 0px; +} + +.sidebar-right { + float: right; + width: 20%; + min-width: 200px; + max-width: 250px; + padding: 10px; + padding-bottom: 0px; + box-sizing: border-box; +} + +.sidebar a, .sidebar-right a, .services a, .menu-overlay .menu-links a, .load-more-button, .mobile-navbar-menu button{ + display: block; + background-color: var(--background-color); + color: var(--text-color); + padding: 12px 20px; + text-decoration: none; + border-radius: 10px; + transition: background-color 0.3s ease; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + margin-bottom: 10px; + font-family: 'default-512', Arial, sans-serif; + border: none; +} + +.sidebar a:hover, .sidebar-right a:hover, .sidebar a.active, .sidebar-right a.active, .services a:hover, .menu-overlay .menu-links a:hover, .load-more-button:hover { + background-color: var(--hover-color); + color: var(--hover-text-color); +} + +.container { + flex: 1; + display: flex; + width: 100%; + min-width: 300px; + align-items: flex-start; + flex-wrap: wrap; + margin: 20px auto 0; + max-width: 1200px; +} + +.content { + width: 60%; + flex-grow: 1; + padding: 10px; + box-sizing: border-box; +} + +.box { + margin-bottom: 10px; + padding: 10px; +} + +.box h3 { + margin: 0 0 10px 0; + font-size: 16px; + color: var(--primary-color); + font-family: 'default-512', Arial, sans-serif; + +} + +.box p, .box a { + margin: 5px 0; + font-size: 14px; + color: var(--text-color); + font-family: 'default-512', Arial, sans-serif; +} + +.box a { + color: var(--primary-color); + text-decoration: none; +} + +.box a:hover { + text-decoration: underline; +} + +footer { + background-color: var(--border-color); + color: var(--text-color); + text-align: center; + padding: 10px 0; + font-size: 14px; + width: 100%; + flex-shrink: 0; +} + +hr { + border: 1px solid var(--border-color); + margin: 20px 0; +} + +.left-aligned-title { + text-align: left; + font-size: 48px; + font-weight: bold; + color: var(--primary-color); + margin-bottom: 15px; + text-decoration: none; + font-family: 'default-512', Arial, sans-serif; +} + +.navbar-title { + + text-decoration: none; +} + +.no-top-m { + margin-top: 0 !important; +} + +.ascii-box { + border: 2px solid #555; + border-radius: 10px; + padding: 20px; + color: var(--primary-color); + font-size: 18px; + font-family: 'default-512', Arial, sans-serif; +} + +.services { + display: flex; + justify-content: center; + flex-wrap: wrap; + gap: 20px; + margin: 20px 0; +}.chat-container { + position: fixed; + bottom: 0; + right: 20px; + width: 90%; + max-width: 400px; + background-color: var(--secondary-color); + border: 2px solid var(--border-color); + border-radius: 10px; + padding: 20px; + z-index: 1001; + transform: translateY(100%); + opacity: 0; + transition: transform 0.4s ease, opacity 0.4s ease, visibility 0.4s ease; + visibility: hidden; +} + +.chat-container.open { + transform: translateY(0); + opacity: 1; + visibility: visible; +} + +.chat-header { + font-size: 20px; + font-weight: bold; + color: var(--secondary-color); + text-align: center; + margin-bottom: 10px; + position: relative; + font-family: 'default-512', Arial, sans-serif; +} + +.audio-track { + margin: 20px 0; + text-align: center; +} + +.complaints { + text-align: center; + margin-top: 40px; +} + +.complaints a { + color: #ffbb00; + text-decoration: none; + transition: color 0.3s ease; + font-family: 'default-512', Arial, sans-serif; +} + +.complaints a:hover { + color: #ff99cc; +} + +.mobile-only { + display: none; +} + +ul { + list-style-type: none; + padding: 0; +} + +ul li { + padding: 10px 15px; + margin-bottom: 10px; + border-radius: 10px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + font-family: 'default-512', Arial, sans-serif; +} + +ul li::before { + content: "•"; + color: var(--primary-color); + padding-right: 10px; +} + +ul li span { + font-weight: bold; + color: var(--primary-color); +} + + + +h4 { + text-decoration: underline; + size: 12px; + color: var(--primary-color); + font-family: 'default-512', Arial, sans-serif; +} + +@media screen and (max-width: 1280px) { + .sidebar, .sidebar-right { + display: none; + } +} + +@media screen and (min-width: 1281px) { + .hamburger-menu { + display: none; + } + + .chat-toggle-btn { + bottom: 20px; + } +} + diff --git a/website4/public/assets/css/extras.css b/website4/public/assets/css/extras.css new file mode 100644 index 0000000..4a9f2fc --- /dev/null +++ b/website4/public/assets/css/extras.css @@ -0,0 +1,180 @@ +.send-btn { + background-color: var(--primary-color); + color: var(--secondary-color); +} + +.send-btn:hover { + background-color: #ffbb00; +} + +.chat-toggle-btn { + position: fixed; + bottom: 20px; + right: 20px; + width: 50px; + height: 50px; + border: none; + border-radius: 50%; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + cursor: pointer; + z-index: 1000; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + transition: background-color 0.3s ease; + background-color: var(--background-color); + color: var(--primary-color); +} + +.chat-toggle-btn svg { + width: 24px; + height: 24px; + fill: var(--primary-color); + transition: fill 0.3s ease; +} + +.chat-toggle-btn:hover, +.chat-toggle-btn.open { + background-color: var(--primary-color); +} + +.chat-toggle-btn:hover svg, +.chat-toggle-btn.open svg { + fill: var(--secondary-color); +} + +.chat-close-btn { + color: var(--primary-color); +} + +.chat-close-btn:hover { + color: var(--secondary-color); +} + +.chat-close-btn { + position: absolute; + top: 0; + right: 0; + font-size: 18px; + background: none; + border: none; + cursor: pointer; +} + +.chat-log { + height: 300px; + overflow-y: auto; + padding: 10px; + border-radius: 10px; + margin-bottom: 10px; + font-family: 'Courier New', Courier, monospace; +} + +.chat-message { + margin: 5px 0; + font-family: 'default-512', Arial, sans-serif; +} + +.chat-message .sender { + font-weight: bold; +} + +.chat-message .virtual-assistant { + color: red; +} + +.chat-message .user { + color: blue; +} + +.chat-input-container { + display: flex; + gap: 10px; +} + +.chat-input { + flex: 1; + padding: 10px; + border-radius: 10px; + font-family: 'default-512', Arial, sans-serif; + color: var(--primary-color); + background-color: var(--secondary-color); + border: 1px solid var(--border-color); +} + +.chat-input:focus { + outline: none; + border-color: var(--primary-color); +} + +.send-btn { + padding: 10px; + border: none; + cursor: pointer; + border-radius: 10px; +} + +.chat-container { + position: fixed; + bottom: 0; + right: 0; + margin-right: 20px; + max-width: 400px; + background-color: var(--secondary-color); + border: 2px solid var(--border-color); + border-radius: 10px; + padding: 20px; + z-index: 1001; + transform: translateY(100%); + opacity: 0; + transition: transform 0.4s ease, opacity 0.4s ease, visibility 0.4s ease; + visibility: hidden; +} + +.chat-container.open { + transform: translateY(0); + opacity: 1; + visibility: visible; +} + +.chat-header { + font-size: 20px; + font-weight: bold; + color: var(--primary-color); + text-align: center; + margin-bottom: 10px; + position: relative; + font-family: 'default-512', Arial, sans-serif; +} + +@media (max-width: 600px) { + .chat-container { + width: 100%; + margin: 0px; + padding: 20px; + box-sizing: border-box; + } +} + +@media (min-width: 1280px) { + .sidebar, .sidebar-right { + display: block; + } + + .chat-toggle-btn { + bottom: 20px; + right: 20px; + } +} + +@media (max-width: 1279px) { + .sidebar, .sidebar-right { + display: none; + } + + .chat-toggle-btn { + bottom: 100px; + right: 20px; + } +} diff --git a/website4/public/assets/css/hamburger.css b/website4/public/assets/css/hamburger.css new file mode 100644 index 0000000..031d011 --- /dev/null +++ b/website4/public/assets/css/hamburger.css @@ -0,0 +1,138 @@ +.hamburger-menu { + display: none; + position: fixed; + bottom: 20px; + right: 20px; + width: 50px; + height: 50px; + background-color: var(--background-color); + color: var(--primary-color); + border: none; + border-radius: 50%; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + cursor: pointer; + z-index: 1001; + transition: background-color 0.3s ease; + display: flex; + align-items: center; + justify-content: center; + padding: 0; +} + +.hamburger-menu svg { + width: 24px; + height: 24px; + fill: var(--primary-color); + transition: fill 0.3s ease; +} + +.hamburger-menu:hover, +.hamburger-menu.open { + background-color: var(--primary-color); +} + +.hamburger-menu:hover svg, +.hamburger-menu.open svg { + fill: var(--secondary-color); +} + +.menu-overlay { + position: fixed; + top: 0; + left: 0; + bottom: 0; + width: 100%; + background-color: var(--secondary-color); + color: white; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + transition: transform 0.3s ease-in-out; + z-index: 1000; + transform: translateY(100%); + overflow-y: auto; +} + +.menu-overlay.open { + transform: translateY(0); +} + +.menu-content { + text-align: center; + width: 100%; + padding: 20px; + box-sizing: border-box; +} + +.menu-content .box { + background-color: var(--background-color); + margin: 10px 0; + padding: 10px; + border: 1px solid var(--border-color); + border-radius: 10px; + box-sizing: border-box; +} + +.menu-content .box a { + display: block; + background-color: var(--background-color); + color: var(--text-color); + padding: 12px 20px; + text-decoration: none; + border-radius: 10px; + transition: background-color 0.3s ease; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + margin-bottom: 10px; +} + +.menu-content .box a:hover, .menu-content .box a.active { + background-color: var(--primary-color); + color: var(--secondary-color); +} + +.menu-close-btn { + position: absolute; + top: 20px; + right: 20px; + background: none; + border: none; + color: var(--primary-color); + font-size: 24px; + cursor: pointer; +} + +.menu-close-btn:hover { + color: var(--secondary-color); +} + +@media screen and (max-width: 1280px) { + .sidebar, .sidebar-right { + display: none; + } + + .hamburger-menu { + display: flex; + } + + .menu-overlay { + display: block; + } +} + +@media screen and (max-width: 600px) { + .menu-content { + padding: 10px; + } + + .menu-content .box a { + padding: 10px; + font-size: 14px; + } +} + +@media screen and (min-width: 1281px) { + .hamburger-menu { + display: none; + } +} \ No newline at end of file diff --git a/website4/public/assets/css/navbar.css b/website4/public/assets/css/navbar.css new file mode 100644 index 0000000..6f63aa8 --- /dev/null +++ b/website4/public/assets/css/navbar.css @@ -0,0 +1,224 @@ +.navbar { + background-color: var(--secondary-color); + padding: 10px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + font-family: 'default-512', Arial, sans-serif; + position: relative; +} + +.navbar-container { + display: flex; + justify-content: space-between; + align-items: center; +} + +.navbar-left, .navbar-center, .navbar-right { + display: flex; + align-items: center; +} + +.navbar-center { + justify-content: center; + flex-grow: 1; +} + +.navbar-mobile { + display: none; + justify-content: space-between; + align-items: center; + width: 100%; + background-color: var(--secondary-color); + padding: 10px; +} + +.navbar-mobile .navbar-left { + display: flex; + align-items: center; +} + +.navbar-logo { + height: 40px; + margin-right: 10px; +} + +.navbar-title { + font-size: 20px; + font-weight: bold; + color: var(--primary-color); + padding-right: 20px; +} + +.navbar, .navbar button, .navbar input[type="text"], .navbar input[type="search"] { + color: var(--navbar-text-color); + text-decoration: none; + padding-inline: 10px; + margin: 0 5px; + border: none; + background: none; + cursor: pointer; + transition: color 0.3s ease; + font-family: 'default-512', Arial, sans-serif; + font-size: 18px; +} + +.navbar-link { + color: var(--navbar-text-color); + text-decoration: none; + border: none; + background: none; + cursor: pointer; + transition: color 0.3s ease; + font-family: 'default-512', Arial, sans-serif; +} + +.dropdown-link { + color: var(--navbar-text-color); + text-decoration: none; + transition: color 0.3s ease; + font-family: 'default-512', Arial, sans-serif; + padding-top: 5px; +} + +.navbar a:hover, .navbar button:hover { + color: var(--navbar-hover-color); +} + +.navbar-dropdown { + position: relative; + display: inline-block; +} + +.navbar-dropbtn { + background-color: var(--navbar-color); + color: var(--navbar-text-color); + padding: 10px; + font-size: 16px; + border: none; + cursor: pointer; + border-radius: 10px; +} + +.navbar-dropdown-content { + display: none; + position: absolute; + background-color: var(--background-color); + min-width: 160px; + box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2); + z-index: 1; + border-radius: 10px; +} + +.navbar-dropdown:hover .navbar-dropdown-content { + display: block; +} + +.navbar-dropdown-content a { + color: var(--text-color); + padding: 12px 16px; + text-decoration: none; + display: block; + border-bottom: 1px solid var(--border-color); +} + +.navbar-dropdown-content a:last-child { + border-bottom: none; +} + +.bruh-why { + padding-inline: 0px; +} + +.mobile-navbar-dropdown { + padding-top: 5px; +} + +.mobile-navbar-dropdown:hover { + color: var(--navbar-hover-color); +} + +.navbar-toggle { + display: none; + background: none; + border: none; + color: var(--primary-color); + cursor: pointer; + font-size: 24px; +} + +.mobile-navbar-menu { + display: flex; + flex-direction: column; + width: 100%; + background-color: var(--secondary-color); + border-radius: 10px; + max-height: 0; + overflow: hidden; + transition: max-height 0.4s ease-out, padding 0.4s ease-out; + padding-top: 0; + padding-bottom: 0; +} + +.mobile-navbar-menu.open { + padding-top: 10px; + padding-bottom: 10px; +} + +.mobile-navbar-menu input[type="text"], +.mobile-navbar-menu input[type="search"] { + padding: 10px; + margin: 5px 0; + border: none; + background: none; + cursor: pointer; + transition: color 0.3s ease; + font-family: 'default-512', Arial, sans-serif; + color: var(--navbar-text-color); + text-decoration: none; + display: block; + width: 100%; + box-sizing: border-box; +} + +.mobile-navbar-menu input[type="text"]:hover, +.mobile-navbar-menu input[type="search"]:hover, +.mobile-navbar-menu button:hover { + color: var(--navbar-hover-color); +} + +@media screen and (max-width: 768px) { + .navbar-container { + display: none; + } + + .navbar-mobile { + display: flex; + } + + .navbar-toggle { + display: block; + } +} + +@media screen and (min-width: 769px) { + .mobile-navbar-menu { + display: none !important; + } +} + +.navbar .buttonify{ + display: block; + background-color: var(--background-color); /* penis haha lol ja das isch psychose klass will buttons nei segged abunzdue*/ + color: var(--text-color); + padding: 12px 20px; + text-decoration: none; + border-radius: 10px; + transition: background-color 0.3s ease; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); + font-family: 'default-512', Arial, sans-serif; + border: none; +} + +.navbar .buttonify:hover { + background-color: var(--hover-color); + color: var(--hover-text-color); +} diff --git a/website4/public/assets/fonts/.DS_Store b/website4/public/assets/fonts/.DS_Store new file mode 100644 index 0000000..b998872 Binary files /dev/null and b/website4/public/assets/fonts/.DS_Store differ diff --git a/website4/public/assets/fonts/default.ttf b/website4/public/assets/fonts/default.ttf new file mode 100644 index 0000000..37deb9a Binary files /dev/null and b/website4/public/assets/fonts/default.ttf differ diff --git a/website4/public/assets/img/.DS_Store b/website4/public/assets/img/.DS_Store new file mode 100644 index 0000000..f77b18d Binary files /dev/null and b/website4/public/assets/img/.DS_Store differ diff --git a/website4/public/assets/img/code-is-ass.jpeg b/website4/public/assets/img/code-is-ass.jpeg new file mode 100644 index 0000000..c35aa9e Binary files /dev/null and b/website4/public/assets/img/code-is-ass.jpeg differ diff --git a/website4/public/assets/img/dialon.png b/website4/public/assets/img/dialon.png new file mode 100644 index 0000000..6ceef81 Binary files /dev/null and b/website4/public/assets/img/dialon.png differ diff --git a/website4/public/assets/img/force.png b/website4/public/assets/img/force.png new file mode 100644 index 0000000..fa2c8c6 Binary files /dev/null and b/website4/public/assets/img/force.png differ diff --git a/website4/public/assets/img/fuck-main.jpeg b/website4/public/assets/img/fuck-main.jpeg new file mode 100644 index 0000000..3acbd91 Binary files /dev/null and b/website4/public/assets/img/fuck-main.jpeg differ diff --git a/website4/public/assets/img/fuckjs.jpeg b/website4/public/assets/img/fuckjs.jpeg new file mode 100644 index 0000000..06f8a6d Binary files /dev/null and b/website4/public/assets/img/fuckjs.jpeg differ diff --git a/website4/public/assets/img/jsmomentom.jpg b/website4/public/assets/img/jsmomentom.jpg new file mode 100644 index 0000000..166d5ba Binary files /dev/null and b/website4/public/assets/img/jsmomentom.jpg differ diff --git a/website4/public/assets/img/router1.jpg b/website4/public/assets/img/router1.jpg new file mode 100644 index 0000000..92f7e91 Binary files /dev/null and b/website4/public/assets/img/router1.jpg differ diff --git a/website4/public/assets/img/router2.jpg b/website4/public/assets/img/router2.jpg new file mode 100644 index 0000000..1ec6527 Binary files /dev/null and b/website4/public/assets/img/router2.jpg differ diff --git a/website4/public/assets/img/rover.png b/website4/public/assets/img/rover.png new file mode 100644 index 0000000..de95293 Binary files /dev/null and b/website4/public/assets/img/rover.png differ diff --git a/website4/public/assets/img/ssc.jpg b/website4/public/assets/img/ssc.jpg new file mode 100644 index 0000000..d7509e2 Binary files /dev/null and b/website4/public/assets/img/ssc.jpg differ diff --git a/website4/public/assets/img/wrong.png b/website4/public/assets/img/wrong.png new file mode 100644 index 0000000..1a1835e Binary files /dev/null and b/website4/public/assets/img/wrong.png differ diff --git a/website4/public/assets/js/chat.js b/website4/public/assets/js/chat.js new file mode 100644 index 0000000..8caa573 --- /dev/null +++ b/website4/public/assets/js/chat.js @@ -0,0 +1,94 @@ +// chat container setup for maximum verwirrung weil ich kann das alles langsam nicht mehr junge die sprach macht kei sinn +const chatContainer = document.getElementById('chat-container'); +const chatLog = document.getElementById('chat-log'); +const userInput = document.getElementById('user-input'); +let hasGreeted = false; // flag so we only say grǔtzi eimal und ned sächzgs mal junge das wäri fett weird + +// toggle chat open and closed again ????????????? i dont remember what i haben gesoffen hier +function toggleChat() { + if (chatContainer.classList.contains('open')) { + chatContainer.classList.remove('open'); + setTimeout(() => { + chatContainer.style.visibility = 'hidden'; + }, 400); // match delay with css so it doesnt look wie abfall + } else { + chatContainer.style.visibility = 'visible'; + chatContainer.classList.add('open'); + + // the actuall saying grǔtzi miternaand gugus + if (!hasGreeted) { + displayMessage('Virtual Assistant', "Grǔtzi 🇨🇭 ! I'm your virtual assistant! Please tell me about your problem or what you need help with."); + hasGreeted = true; + } + } +} + +// send message when enter key is pressed because who will press a button to send a message ???? are you a psychopat ? +userInput.addEventListener('keypress', function(event) { + if (event.key === 'Enter') { + sendMessage(); + } +}); + +// handle sending messages +function sendMessage() { + const userMessage = userInput.value.trim(); + if (userMessage) { + displayMessage('You', userMessage); + userInput.value = ''; + setTimeout(() => catReply(userMessage), 1000); // delay for realism so the "assistant" can "think" about the reply + } +} + +// put a message in the chat log will chat funktioniert ned ohni message history und so lol +function displayMessage(sender, message) { + const messageElement = document.createElement('div'); + messageElement.classList.add('chat-message'); + + const senderSpan = document.createElement('span'); + senderSpan.classList.add('sender'); + senderSpan.classList.add(sender === 'You' ? 'user' : 'virtual-assistant'); + senderSpan.textContent = sender + ': '; + + const messageSpan = document.createElement('span'); + messageSpan.textContent = message; + + messageElement.appendChild(senderSpan); + messageElement.appendChild(messageSpan); + chatLog.appendChild(messageElement); + chatLog.scrollTop = chatLog.scrollHeight; +} + +// cat assistant category based matched replies +function catReply(userMessage) { + const keywords = { + "help": ["meeeooow...? figure it out yourself! because that sounds like a you problem bahahahasdjkasadlkj 💀", "meeooww! welp too bad. help yourself bahasjdhaskjdhaskjdh", "mrrrow! idk either lol. go ask yourself maybe your smart if you use your brain instread of relying on a virtual assistant cat"], + "problem": ["meeooow, eh thats normal here, should've chosen someone else to host your stuff ngl lol", "mrow, contact sysadminier maybe idk? i am just cat or a teaput ???? idk what i am help aaaaaaa", "mreeow, tell me more ig... if you want idc lol"], + "default": ["meow", "meeooow!", "mew.", "mrow!", "meeow...", "meow, meow.", "mroww", "mlem"] + }; + + // generate a bs reply to fool user into thinking the cat assistant is actually doing something + function generateScrambledReply() { + const phrases = keywords["default"]; + let scrambled = []; + const length = Math.floor(Math.random() * 3) + 3; // random length of reply 3-5 words + + for (let i = 0; i < length; i++) { + const randomPhrase = phrases[Math.floor(Math.random() * phrases.length)]; + scrambled.push(randomPhrase); + } + return scrambled.join(" "); + } + + // check for keywords in user message and decide what kind of blödsinn to say zu the schafseckel using the chat + let reply; + if (userMessage.toLowerCase().includes("help")) { + reply = keywords["help"][Math.floor(Math.random() * keywords["help"].length)]; + } else if (userMessage.toLowerCase().includes("problem")) { + reply = keywords["problem"][Math.floor(Math.random() * keywords["problem"].length)]; + } else { + reply = generateScrambledReply(); // generate scrambled reply for "default" case + } + + displayMessage('Virtual Assistant', reply); +} \ No newline at end of file diff --git a/website4/public/assets/js/menu.js b/website4/public/assets/js/menu.js new file mode 100644 index 0000000..8994ac9 --- /dev/null +++ b/website4/public/assets/js/menu.js @@ -0,0 +1,40 @@ +document.addEventListener('DOMContentLoaded', function () { + // menu overlay so we can open and close it bruh + const overlay = document.querySelector('.menu-overlay'); + const hamburger = document.querySelector('.hamburger-menu'); + + function toggleMenu() { + if (overlay.classList.contains('open')) { + overlay.classList.remove('open'); + setTimeout(() => { + overlay.style.visibility = 'hidden'; + }, 400); // match this delay with the css transition duration because ja isch halt so + } else { + overlay.style.visibility = 'visible'; + overlay.classList.add('open'); + } + hamburger.classList.toggle('open'); + document.body.style.overflow = overlay.classList.contains('open') ? 'hidden' : ''; // no scrolling on the main page while menu is open + } + + // if burger king menu button exists, hook it up to toggle the menu + if (hamburger) { + hamburger.addEventListener('click', function () { + toggleMenu(); + }); + } + + // close menu when clicking a link inside it because so funktioniert das halt, pech gha wenns der nid passt lol + if (overlay) { + overlay.querySelectorAll('a').forEach(link => { + link.addEventListener('click', () => { + overlay.classList.remove('open'); + setTimeout(() => { + overlay.style.visibility = 'hidden'; + hamburger.classList.remove('open'); + document.body.style.overflow = ''; // kei ahnig was das macht aber es het mis problem emol glöst + }, 400); // match transition duration ... again no clue what this actually does but it works so i'm not touching it + }); + }); + } +}); \ No newline at end of file diff --git a/website4/public/assets/svg/teleco.svg b/website4/public/assets/svg/teleco.svg new file mode 100644 index 0000000..1cbb190 --- /dev/null +++ b/website4/public/assets/svg/teleco.svg @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website4/public/index.php b/website4/public/index.php new file mode 100644 index 0000000..c16197a --- /dev/null +++ b/website4/public/index.php @@ -0,0 +1,190 @@ + + + + + + + + Dialon - <?php echo ucfirst($page); ?> + + + + + + + + + + + + + + +
+
> + +

dialon.ch

+
+
+ + + + + + + + + + + + +
+ + + + + + +
+ + + + execute(); + $lastPostId = 0; + while ($row = $result->fetchArray()): + $lastPostId++; + ?> +
+

+

+
+

Date:

+
+ + +
+

404 - Page Not Found

+

Sorry, the page you are looking for does not exist.

+
+ + +
+ +
+ + + + + + +
+ +
+
+ + + + + +
+ + + + + +
+
+ Virtual Assistant Chat + +
+
+
+ + +
+
+ + + + + + + + + -- cgit v1.2.3-70-g09d2