From 69dd02eb910c9567b03c518c072898f68bccc7e6 Mon Sep 17 00:00:00 2001 From: "MosLaptop\\Not.Reda" Date: Thu, 28 Aug 2025 09:28:59 +0200 Subject: [PATCH] Replace old structure with new structure --- .idea/misc.xml | 6 + .idea/modules.xml | 8 ++ .idea/taskit.iml | 8 ++ .idea/workspace.xml | 51 +++++++ .vs/ProjectSettings.json | 3 + .../17.12.53.23981/CodeChunks.db | Bin 0 -> 106496 bytes .../17.12.53.23981/SemanticSymbols.db | Bin 0 -> 32768 bytes .../17.12.53.23981/SemanticSymbols.db-shm | Bin 0 -> 32768 bytes .../17.12.53.23981/SemanticSymbols.db-wal | Bin 0 -> 164832 bytes ...79ae8a60-0676-438a-bb17-f1b4ca7f1666.vsidx | Bin 0 -> 34915 bytes .vs/VPR_Backend/v17/.wsuo | Bin 0 -> 11264 bytes .vs/VPR_Backend/v17/DocumentLayout.json | 39 ++++++ .vs/VSWorkspaceState.json | 7 + .vs/slnx.sqlite | Bin 0 -> 90112 bytes Tests/connectionTest.php | 20 +++ Tests/controllersTest.php | 40 ++++++ Tests/test.php | 128 ++++++++++++++++++ app/Config/database.php | 57 ++++++-- app/Controller/ExampleController.php | 65 +++++++++ app/Controller/ProjectController.php | 47 +++++++ app/Controllers/ProjectController.php | 14 -- app/Model/ExampleModel.php | 55 ++++++++ app/Model/ProjectModel.php | 30 ++++ app/Models/Project.php | 16 --- index.php | 5 - restAPI.php | 6 +- routes/api.php | 9 -- sql/.gitkeep | 0 28 files changed, 552 insertions(+), 62 deletions(-) create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/taskit.iml create mode 100644 .idea/workspace.xml create mode 100644 .vs/ProjectSettings.json create mode 100644 .vs/VPR_Backend/CopilotIndices/17.12.53.23981/CodeChunks.db create mode 100644 .vs/VPR_Backend/CopilotIndices/17.12.53.23981/SemanticSymbols.db create mode 100644 .vs/VPR_Backend/CopilotIndices/17.12.53.23981/SemanticSymbols.db-shm create mode 100644 .vs/VPR_Backend/CopilotIndices/17.12.53.23981/SemanticSymbols.db-wal create mode 100644 .vs/VPR_Backend/FileContentIndex/79ae8a60-0676-438a-bb17-f1b4ca7f1666.vsidx create mode 100644 .vs/VPR_Backend/v17/.wsuo create mode 100644 .vs/VPR_Backend/v17/DocumentLayout.json create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/slnx.sqlite create mode 100644 Tests/connectionTest.php create mode 100644 Tests/controllersTest.php create mode 100644 Tests/test.php create mode 100644 app/Controller/ExampleController.php create mode 100644 app/Controller/ProjectController.php delete mode 100644 app/Controllers/ProjectController.php create mode 100644 app/Model/ExampleModel.php create mode 100644 app/Model/ProjectModel.php delete mode 100644 app/Models/Project.php delete mode 100644 routes/api.php delete mode 100644 sql/.gitkeep diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..28a804d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..ff4d14b --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/taskit.iml b/.idea/taskit.iml new file mode 100644 index 0000000..c956989 --- /dev/null +++ b/.idea/taskit.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..3791bed --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + 1641996109010 + + + + + + \ No newline at end of file diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 0000000..f8b4888 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": null +} \ No newline at end of file diff --git a/.vs/VPR_Backend/CopilotIndices/17.12.53.23981/CodeChunks.db b/.vs/VPR_Backend/CopilotIndices/17.12.53.23981/CodeChunks.db new file mode 100644 index 0000000000000000000000000000000000000000..9c14866fd26faf91e675c1fa0385a028a0f3e5c1 GIT binary patch literal 106496 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

Gi{b~vwq=aH@huMp9L)RI>O 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 P0uX=z1Rwx`Wf1rWc+s9; literal 0 HcmV?d00001 diff --git a/.vs/VPR_Backend/CopilotIndices/17.12.53.23981/SemanticSymbols.db-shm b/.vs/VPR_Backend/CopilotIndices/17.12.53.23981/SemanticSymbols.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..7ea75a529349ec648e2857694449242c43197eff GIT binary patch literal 32768 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 O0SG_<0uY$R0{;V6Iw|b{ literal 0 HcmV?d00001 diff --git a/.vs/VPR_Backend/FileContentIndex/79ae8a60-0676-438a-bb17-f1b4ca7f1666.vsidx b/.vs/VPR_Backend/FileContentIndex/79ae8a60-0676-438a-bb17-f1b4ca7f1666.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..07fa9d6c299daa7a44e725075ec24d9edf398a96 GIT binary patch literal 34915 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 F{{jaZ5(EGM literal 0 HcmV?d00001 diff --git a/.vs/VPR_Backend/v17/.wsuo b/.vs/VPR_Backend/v17/.wsuo new file mode 100644 index 0000000000000000000000000000000000000000..ab9a83c5cecb862ec4eb1bf40dcd3976ab30a499 GIT binary patch literal 11264 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 M1b_e#c%B6Q2U$(1Hvj+t literal 0 HcmV?d00001 diff --git a/Tests/connectionTest.php b/Tests/connectionTest.php new file mode 100644 index 0000000..c3e5e0d --- /dev/null +++ b/Tests/connectionTest.php @@ -0,0 +1,20 @@ + +linkDB(); + + // If the connection is successful + echo "Connected successfully using PDO"; +} catch (Exception $e) { + // Handle connection error + error_log($e->getMessage()); // Log the error message + echo "An error occurred while connecting to the database. Please try again later."; +} diff --git a/Tests/controllersTest.php b/Tests/controllersTest.php new file mode 100644 index 0000000..eedc486 --- /dev/null +++ b/Tests/controllersTest.php @@ -0,0 +1,40 @@ +testController($controllerPath, $methodName, $params); +echo '

';
+print_r($result);
+echo '
'; \ No newline at end of file diff --git a/Tests/test.php b/Tests/test.php new file mode 100644 index 0000000..3c71f64 --- /dev/null +++ b/Tests/test.php @@ -0,0 +1,128 @@ + $url . '/project', + // CURLOPT_COOKIEFILE => $filepath . 'cookie.txt', // set cookie file to given file + // CURLOPT_COOKIEJAR => $filepath . 'cookie.txt', // set same file as cookie jar + CURLOPT_CUSTOMREQUEST => "GET" + + ); + +/** + * Options for get all tasks + */ + // $defaults = array( + // CURLOPT_URL => $url . '/task', + // CURLOPT_COOKIEFILE => $filepath . 'cookie.txt', // set cookie file to given file + // CURLOPT_COOKIEJAR => $filepath . 'cookie.txt', // set same file as cookie jar + // CURLOPT_CUSTOMREQUEST => "GET" + // ); + +/** + * Options for get tasks filtered + */ + // $defaults = array( + // CURLOPT_URL => $url . '/task/getFilteredTasks?dueDate=1%20DAY', + // CURLOPT_COOKIEFILE => $filepath . 'cookie.txt', // set cookie file to given file + // CURLOPT_COOKIEJAR => $filepath . 'cookie.txt', // set same file as cookie jar + // CURLOPT_CUSTOMREQUEST => "GET" + // ); + +/** + * Options for insert new task + */ + // $params = json_encode(array( + // "projectId" => '72f7cc6e-3717-11eb-add7-2c4d544f8fe0' + // , 'title' => 'Neuer Task 5' + // , 'expense' => '0,25' + // , 'dueDate' => '15.03.2022' + // , 'priorityId' => 1)); + // $defaults = array( + // CURLOPT_URL => $url . '/task', + // CURLOPT_CUSTOMREQUEST => "POST", + // // CURLOPT_COOKIEFILE => $filepath . 'cookie.txt', // set cookie file to given file + // // CURLOPT_COOKIEJAR => $filepath . 'cookie.txt', // set same file as cookie jar + // CURLOPT_POSTFIELDS => $params + // ); + +/** + * Options for Update Task OHNE Login + */ + // $params = json_encode(array("done" => '0')); + // $defaults = array( + // CURLOPT_URL => $url . '/task/1b2d4564-3718-11eb-add7-2c4d544f8fe0', + // CURLOPT_CUSTOMREQUEST => "PUT", + // CURLOPT_POSTFIELDS => $params + // ); + + +/** + * Options for Delete Task OHNE Login + */ + // $defaults = array( + // CURLOPT_URL => $url . '/task/01b169aa-3718-11eb-add7-2c4d544f8fe0', + // CURLOPT_CUSTOMREQUEST => "DELETE" + // ); + +/** + * Options for Delete Task MIT Login + */ + // $defaults = array( + // CURLOPT_URL => $url . '/task/cbdb169f-e0da-11e7-a056-2c4d544f8fe0', + // CURLOPT_COOKIEFILE => $filepath . 'cookie.txt', // set cookie file to given file + // CURLOPT_COOKIEJAR => $filepath . 'cookie.txt', // set same file as cookie jar + // CURLOPT_CUSTOMREQUEST => "DELETE" + // ); + +/** + * Options for loginUser + */ + // $defaults = array( + // CURLOPT_URL => $url . '/user/loginUser?username=fiona&pw=12345', + // CURLOPT_CUSTOMREQUEST => "GET", + // CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT'], + // CURLOPT_COOKIEFILE => $filepath . 'cookie.txt', // set cookie file to given file + // CURLOPT_COOKIEJAR => $filepath . 'cookie.txt' // set same file as cookie jar + // ); + +/** + * Options for isLogin + */ + // $defaults = array( + // CURLOPT_URL => $url . '/user/isLogin', + // CURLOPT_CUSTOMREQUEST => "GET", + // CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT'], + // CURLOPT_COOKIEFILE => $filepath . 'cookie.txt', // set cookie file to given file + // CURLOPT_COOKIEJAR => $filepath . 'cookie.txt' // set same file as cookie jar + // ); + +/** + * Options for logout + */ + // $defaults = array( + // CURLOPT_URL => $url . '/user/logout', + // CURLOPT_CUSTOMREQUEST => "GET", + // CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT'], + // CURLOPT_COOKIEFILE => $filepath . 'cookie.txt', // set cookie file to given file + // CURLOPT_COOKIEJAR => $filepath . 'cookie.txt' // set same file as cookie jar + // ); + + // session_write_close(); + + $ch = curl_init(); + curl_setopt_array($ch, ($defaults)); + curl_exec($ch); + if(curl_error($ch)) { + print(curl_error($ch)); + } + curl_close($ch); + + // session_start(); + +?> \ No newline at end of file diff --git a/app/Config/database.php b/app/Config/database.php index 53a83a0..9a76c8b 100644 --- a/app/Config/database.php +++ b/app/Config/database.php @@ -1,20 +1,47 @@ conn = null; +namespace App\Config; + +use ppb\Library\Msg; + +abstract class Database { + + /** + * Zugangsdaten für die Datenbank + */ + private $dbName = "vpr_pbat3h23a"; //Datenbankname + private $linkName = "mysql.pb.bib.de"; //Datenbank-Server + private $user = "vpr_pbat3h23a"; //Benutzername + private $pw = "SBHwIWNqmMevnlqt"; //Passwort + + /** + * Stellt eine Verbindung zur Datenbank her + * + * @return \PDO Gibt eine Datenbankverbindung zurueck + */ + public function linkDB() { try { - $this->conn = new PDO("mysql:host={$this->host};dbname={$this->db_name}", - $this->username, $this->password); - $this->conn->exec("set names utf8"); - } catch (PDOException $exception) { - echo "Connection error: " . $exception->getMessage(); + $pdo = new \PDO("mysql:dbname=$this->dbName;host=$this->linkName" + , $this->user + , $this->pw + , [\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION]); + return $pdo; + } catch (\PDOException $e) { + new Msg(true, null, $e); + throw $e; } - return $this->conn; } -} + + /** + * Zum serverseitigen generieren einer UUID + * + * @return string Liefert eine UUID + */ + public function createUUID() + { + $data = openssl_random_pseudo_bytes(16); + $data[6] = chr(ord($data[6]) & 0x0f | 0x40); + $data[8] = chr(ord($data[8]) & 0x3f | 0x80); + return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)); + } +} \ No newline at end of file diff --git a/app/Controller/ExampleController.php b/app/Controller/ExampleController.php new file mode 100644 index 0000000..3be9149 --- /dev/null +++ b/app/Controller/ExampleController.php @@ -0,0 +1,65 @@ +model = new ExampleModel(); + } + + /** + * Write a new record to the database + * + * @param array $data + * @return void + */ + public function writeRecord(array $data): void + { + try { + $this->model->insertRecord($data); + } catch (Exception $e) { + // Log the error or handle it as needed + error_log("Error writing record: " . $e->getMessage()); + throw new Exception("Failed to write record."); + } + } + + /** + * Get all records from the database + * + * @return array + */ + public function getAllRecords(): array + { + try { + return $this->model->fetchAllRecords(); + } catch (Exception $e) { + // Log the error or handle it as needed + error_log("Error fetching records: " . $e->getMessage()); + return []; + } + } + + /** + * Delete a record by ID + * + * @param int $id + * @return void + */ + public function deleteRecord(int $id): void + { + try { + $this->model->removeRecord($id); + } catch (Exception $e) { + // Log the error or handle it as needed + error_log("Error deleting record: " . $e->getMessage()); + throw new Exception("Failed to delete record."); + } + } +} diff --git a/app/Controller/ProjectController.php b/app/Controller/ProjectController.php new file mode 100644 index 0000000..b8572df --- /dev/null +++ b/app/Controller/ProjectController.php @@ -0,0 +1,47 @@ +"; + $model = new ProjectModel(); + $data = $model->readProject(); + + echo "
"; + + + // Display the data in a table format + echo ''; + // Table header + echo ''; + foreach (array_keys($data[0]) as $header) { + echo ''; + } + echo ''; + // Table rows + foreach ($data as $row) { + echo ''; + foreach ($row as $cell) { + echo ''; + } + echo ''; + } + echo '
' . htmlspecialchars($header) . '
' . htmlspecialchars($cell) . '
'; + } +} diff --git a/app/Controllers/ProjectController.php b/app/Controllers/ProjectController.php deleted file mode 100644 index c03f07e..0000000 --- a/app/Controllers/ProjectController.php +++ /dev/null @@ -1,14 +0,0 @@ -project = new Project($db); - } - - public function getAllProjects() { - return $this->project->fetchAll(); - } -} diff --git a/app/Model/ExampleModel.php b/app/Model/ExampleModel.php new file mode 100644 index 0000000..d1e6ba6 --- /dev/null +++ b/app/Model/ExampleModel.php @@ -0,0 +1,55 @@ +records = [ + ['id' => 1, 'name' => 'Example 1', 'value' => 100], + ['id' => 2, 'name' => 'Example 2', 'value' => 200], + ['id' => 3, 'name' => 'Example 3', 'value' => 300], + ]; + } + + /** + * Insert a new record into the example data + * + * @param array $data + * @return void + */ + public function insertRecord(array $data): void + { + $this->records[] = [ + 'id' => count($this->records) + 1, + 'name' => $data['name'] ?? 'Unnamed', + 'value' => $data['value'] ?? 0, + ]; + } + + /** + * Fetch all records from the example data + * + * @return array + */ + public function fetchAllRecords(): array + { + return $this->records; + } + + /** + * Remove a record by ID from the example data + * + * @param int $id + * @return void + */ + public function removeRecord(int $id): void + { + $this->records = array_filter($this->records, function ($record) use ($id) { + return $record['id'] !== $id; + }); + } +} diff --git a/app/Model/ProjectModel.php b/app/Model/ProjectModel.php new file mode 100644 index 0000000..10fa40f --- /dev/null +++ b/app/Model/ProjectModel.php @@ -0,0 +1,30 @@ +linkDB(); + $sql = "SELECT id, name FROM project"; + + try { + $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); + } catch (\PDOException $e) { + new Msg(true, null, $e); + } + + $sth = $pdo->prepare($sql); + $sth->execute(); + + $result = $sth->fetchAll(\PDO::FETCH_ASSOC); + $sth->closeCursor(); + $pdo = null; + // fetch all + return $result; + + } +} \ No newline at end of file diff --git a/app/Models/Project.php b/app/Models/Project.php deleted file mode 100644 index 7c156ad..0000000 --- a/app/Models/Project.php +++ /dev/null @@ -1,16 +0,0 @@ -conn = $db; - } - - public function fetchAll() { - $query = "SELECT * FROM " . $this->table; - $stmt = $this->conn->prepare($query); - $stmt->execute(); - return $stmt->fetchAll(PDO::FETCH_ASSOC); - } -} diff --git a/index.php b/index.php index 84b8e56..e69de29 100644 --- a/index.php +++ b/index.php @@ -1,5 +0,0 @@ -getConnection(); -$controller = new ProjectController($db); - -header("Content-Type: application/json"); -echo json_encode($controller->getAllProjects()); diff --git a/sql/.gitkeep b/sql/.gitkeep deleted file mode 100644 index e69de29..0000000