PHP-databaskonstruktion

Log | Files | Refs

commit df310d550a8c451a5806d4dd61553e00c860d58b
parent 9e29803aaa0e0a3ce0cf68ca4e87d4ef02ce818c
Author: William Lindholm <william_lindholm@outlook.com>
Date:   Sat, 30 Sep 2023 18:16:02 +0000

Implemented tableBuilder

Diffstat:
Mindex.php | 66+++++++++++++++++++++++++++++++++---------------------------------
Mreports.php | 18+++++++++++++++++-
Dutils/components.php | 38--------------------------------------
Mutils/imports.php | 2+-
Mutils/logs.txt | 153+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mutils/modalBuilder.php | 3++-
Autils/tableBuilder.php | 79+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mutils/tableFactory.php | 156++++++++------------------------------------------------------------------------
8 files changed, 299 insertions(+), 216 deletions(-)

diff --git a/index.php b/index.php @@ -1,47 +1,47 @@ <?php - require 'utils/imports.php'; - dbconnection::getInstance('mysql', 'a22willi', 'root', 'Safiren1'); - $handlerFactory = new InsertHandlerFactory(); + require 'utils/imports.php'; + dbconnection::getInstance('mysql', 'a22willi', 'root', 'Safiren1'); + $handlerFactory = new InsertHandlerFactory(); - $pageContent = ''; + $pageContent = ''; - $pageContent .= "<h3>FieldAgents</h3>" . tableFactory::createTable("FieldAgents"); + $pageContent .= "<h3>FieldAgents</h3>" . tableFactory::createTable("FieldAgents"); - $attributeModalBuilder = (new ModalBuilder()) - ->setModalId('insertAttributeModal') - ->setTableName("FieldAgentAttributes") - ->setPostHandler($handlerFactory->createHandler('FieldAgentAttributes')) - ->addDropdownColumn("AgentCodeName", getColumnValues("FieldAgents", "CodeName")) - ->addColumn("Specialty") - ->addColumn("Competence"); + $attributeModalBuilder = (new ModalBuilder()) + ->setModalId('insertAttributeModal') + ->setTableName("FieldAgentAttributes") + ->setPostHandler($handlerFactory->createHandler('FieldAgentAttributes')) + ->addDropdownColumn("AgentCodeName", getColumnValues("FieldAgents", "CodeName")) + ->addColumn("Specialty") + ->addColumn("Competence"); - $pageContent .= $attributeModalBuilder->handleData(); - $pageContent .= $attributeModalBuilder->build(); - $pageContent .= $attributeModalBuilder->generateOpenButton("Set specialty"); + $pageContent .= $attributeModalBuilder->handleData(); + $pageContent .= $attributeModalBuilder->build(); + $pageContent .= $attributeModalBuilder->generateOpenButton("Set specialty"); - $pageContent .= "<hr>"; + $pageContent .= "<hr>"; - $pageContent .= "<h3>GroupLeaders</h3>" . tableFactory::createTable("GroupLeaders"); + $pageContent .= "<h3>GroupLeaders</h3>" . tableFactory::createTable("GroupLeaders"); - $pageContent .= "<hr>"; + $pageContent .= "<hr>"; - $pageContent .= "<h3>Managers</h3>" . tableFactory::createTable("Managers"); + $pageContent .= "<h3>Managers</h3>" . tableFactory::createTable("Managers"); - $agentModalBuilder = (new ModalBuilder()) - ->setModalId('insertAgentModal') - ->setTableName("Agent") - ->setPostHandler($handlerFactory->createHandler('Agent')) - ->addColumn("CodeName") - ->addColumn("FirstName") - ->addColumn("LastName") - ->addColumn("Salary", true) - ->addDropdownColumn("IsFieldAgent", ['True', 'False']) - ->addDropdownColumn("IsGroupLeader", ['False', 'True']) - ->addDropdownColumn("IsManager", ['False', 'True']); + $agentModalBuilder = (new ModalBuilder()) + ->setModalId('insertAgentModal') + ->setTableName("Agent") + ->setPostHandler($handlerFactory->createHandler('Agent')) + ->addColumn("CodeName") + ->addColumn("FirstName") + ->addColumn("LastName") + ->addColumn("Salary", true) + ->addDropdownColumn("IsFieldAgent", ['True', 'False']) + ->addDropdownColumn("IsGroupLeader", ['False', 'True']) + ->addDropdownColumn("IsManager", ['False', 'True']); - $agentModalBuilder->handleData(); - $pageContent .= $agentModalBuilder->build(); - $pageContent .= $agentModalBuilder->generateOpenButton("Hire agent"); + $agentModalBuilder->handleData(); + $pageContent .= $agentModalBuilder->build(); + $pageContent .= $agentModalBuilder->generateOpenButton("Hire agent"); include 'utils/pageTemplate.php'; ?> \ No newline at end of file diff --git a/reports.php b/reports.php @@ -2,13 +2,29 @@ require 'utils/imports.php'; dbconnection::getInstance('mysql', 'a22willi', 'root', 'Safiren1'); + $searchQuery = $_GET['query']; + $sqlQuery = isset($searchQuery) ? "SELECT * FROM ArchivedReport WHERE Title LIKE '{$searchQuery}%';" : "SELECT * FROM ArchivedReport;"; + + logg($sqlQuery); + $pageContent = ''; $pageContent .= "<h3>Reports</h3>" . tableFactory::createCardTable("Report"); $pageContent .= "<hr>"; + + $pageContent .= "<h3>Archived Reports</h3>"; + + $pageContent .= '<div class="container">'; + $pageContent .= ' <form class="form-inline" action="" method="GET">'; + $pageContent .= ' <div class="form-group">'; + $pageContent .= ' <input type="text" class="form-control me-1" id="query" name="query" placeholder="Search for old report" value="' . htmlspecialchars($_GET['query'] ?? '') . '">'; + $pageContent .= ' </div>'; + $pageContent .= ' <button type="submit" class="btn btn-primary">Search</button>'; + $pageContent .= ' </form>'; + $pageContent .= '</div>'; - $pageContent .= "<h3>Archived Reports</h3>" . tableFactory::createTable("ArchivedReport"); + $pageContent .= tableFactory::createCustomTable($sqlQuery); include 'utils/pageTemplate.php'; ?> \ No newline at end of file diff --git a/utils/components.php b/utils/components.php @@ -1,37 +0,0 @@ -<?php - function displayTable($tableName) { - $db = dbconnection::getInstance(); - $pdo = $db->getPdo(); - - $output = "<div class='overflow-auto'><table class='table table-striped table-bordered'>"; - - try { - $firstRow = true; - foreach($pdo->query('SELECT * FROM ' . $tableName . ';') AS $row) { - if($firstRow) { - $output .= "<thead class='thead-dark'><tr>"; - foreach($row as $key => $value) { - if(!is_numeric($key)) { - $output .= "<th>" . $key . "</th>"; - } - } - $output .= "</tr></thead><tbody>"; - $firstRow = false; - } - $output .= "<tr>"; - foreach($row as $key => $value) { - if(!is_numeric($key)) { - $output .= "<td>" . $value . "</td>"; - } - } - $output .= "</tr>"; - } - $output .= "</tbody></table></div>"; - - return $output; - } catch (PDOException $e) { - echo "Error: " . $e->getMessage(); - return ''; - } - } -?> -\ No newline at end of file diff --git a/utils/imports.php b/utils/imports.php @@ -2,11 +2,11 @@ require 'db/dbconnection.php'; include 'db/dbhelper.php'; include 'logging.php'; - include 'components.php'; include 'modalBuilder.php'; include 'tableFactory.php'; include 'postHandlerInterface.php'; include 'insertHandler.php'; include 'updateHandler.php'; include 'procedureHandler.php'; + include 'tableBuilder.php'; ?> \ No newline at end of file diff --git a/utils/logs.txt b/utils/logs.txt @@ -776,3 +776,156 @@ 2023-09-28 16:03:07 - Incident: 'Espionage', '104' 2023-09-28 16:03:09 - Incident: 'Espionage', '104' 2023-09-28 16:03:09 - Incident: 'Espionage', '104' +2023-09-28 16:05:36 - Inserting into: OperatesIn +2023-09-28 16:05:41 - Updating records in: Operation +2023-09-28 16:05:44 - Updating records in: Operation +2023-09-28 16:05:49 - Incident: '123asd', '123123123' +2023-09-28 16:05:54 - Incident: 'Kidnapping', '102' +2023-09-28 16:06:16 - Incident: 'Kidnapping', '102' +2023-09-28 16:06:16 - Inserting into: Operation +2023-09-28 16:06:16 - calling from OperationInsertHandler: $incident = Kidnapping, 102 +2023-09-28 16:06:16 - IncidentName= Kidnapping +2023-09-28 16:06:16 - IncidentNumber= 102 +2023-09-28 16:06:16 - Incident: 'Kidnapping', '102' +2023-09-28 16:06:23 - Inserting into: OperatesIn +2023-09-28 16:06:26 - Inserting into: OperatesIn +2023-09-28 16:06:31 - Updating records in: Operation +2023-09-28 16:06:54 - Inserting into: Agent +2023-09-28 16:07:11 - Updating records in: Operation +2023-09-28 16:07:38 - Incident: 'Sabotage', '103' +2023-09-28 16:07:41 - Incident: 'Arson', '108' +2023-09-28 16:07:45 - Incident: 'Theft', '110' +2023-09-28 16:07:48 - Incident: 'Sabotage', '103' +2023-09-28 16:07:50 - Incident: 'Kidnapping', '102' +2023-09-28 16:08:24 - Incident: 'Kidnapping', '102' +2023-09-28 16:08:24 - Inserting into: Report +2023-09-28 16:08:24 - Incident: 'Kidnapping', '102' +2023-09-28 16:09:11 - Updating records in: Operation +2023-09-28 16:32:36 - Incident: 'Sabotage', '103' +2023-09-28 16:33:34 - Incident: 'Breach', '105' +2023-09-28 17:02:49 - Incident: 'Ambush', '106' +2023-09-28 17:02:52 - Incident: '123asd', '123123123' +2023-09-28 17:02:54 - Incident: 'Sabotage', '103' +2023-09-28 21:18:06 - Incident: '213123asd', '234234' +2023-09-28 21:18:09 - Incident: 'Ambush', '106' +2023-09-28 21:18:29 - Incident: 'Ambush', '106' +2023-09-28 21:18:29 - Inserting into: Operation +2023-09-28 21:18:29 - calling from OperationInsertHandler: $incident = Ambush, 106 +2023-09-28 21:18:29 - IncidentName= Ambush +2023-09-28 21:18:29 - IncidentNumber= 106 +2023-09-28 21:18:29 - Incident: 'Ambush', '106' +2023-09-29 05:42:44 - SELECT * FROM . FieldAgents . ; +2023-09-29 05:43:08 - SELECT * FROM . FieldAgents; +2023-09-29 05:43:25 - SELECT * FROM FieldAgents; +2023-09-29 05:43:25 - SELECT * FROM GroupLeaders; +2023-09-29 05:43:25 - SELECT * FROM Managers; +2023-09-29 05:44:57 - SELECT * FROM FieldAgents; +2023-09-29 05:44:57 - SELECT * FROM GroupLeaders; +2023-09-29 05:44:57 - SELECT * FROM Managers; +2023-09-29 05:46:06 - SELECT * FROM FieldAgents; +2023-09-29 05:46:06 - SELECT * FROM GroupLeaders; +2023-09-29 05:46:06 - SELECT * FROM Managers; +2023-09-29 05:46:25 - SELECT * FROM FieldAgents; +2023-09-29 05:46:25 - SELECT * FROM GroupLeaders; +2023-09-29 05:46:25 - SELECT * FROM Managers; +2023-09-29 05:46:33 - SELECT * FROM FieldAgents; +2023-09-29 05:46:33 - SELECT * FROM GroupLeaders; +2023-09-29 05:46:33 - SELECT * FROM Managers; +2023-09-29 05:46:45 - SELECT * FROM FieldAgents; +2023-09-29 05:46:45 - SELECT * FROM GroupLeaders; +2023-09-29 05:46:45 - SELECT * FROM Managers; +2023-09-29 05:46:54 - SELECT * FROM FieldAgents; +2023-09-29 05:46:54 - SELECT * FROM GroupLeaders; +2023-09-29 05:46:54 - SELECT * FROM Managers; +2023-09-29 05:47:05 - SELECT * FROM FieldAgents; +2023-09-29 05:47:05 - SELECT * FROM GroupLeaders; +2023-09-29 05:47:05 - SELECT * FROM Managers; +2023-09-29 05:47:48 - Incident: 'asdasd', '123123' +2023-09-29 05:48:04 - Incident: 'Sabotage', '103' +2023-09-29 05:48:09 - SELECT * FROM FieldAgents; +2023-09-29 05:48:09 - SELECT * FROM GroupLeaders; +2023-09-29 05:48:09 - SELECT * FROM Managers; +2023-09-29 05:48:34 - SELECT * FROM FieldAgents; +2023-09-29 05:48:34 - SELECT * FROM GroupLeaders; +2023-09-29 05:48:34 - SELECT * FROM Managers; +2023-09-29 05:50:12 - Incident: '123asd', '123123123' +2023-09-29 05:51:53 - Incident: 'Ambush', '106' +2023-09-29 05:53:13 - Incident: 'Ambush', '106' +2023-09-29 05:53:17 - Incident: 'Sabotage', '103' +2023-09-29 05:53:23 - Incident: 'Sabotage', '103' +2023-09-29 05:53:23 - Incident: 'Sabotage', '103' +2023-09-29 05:57:02 - +2023-09-29 05:57:12 - +2023-09-29 05:57:12 - +2023-09-29 05:57:12 - +2023-09-29 05:57:12 - +2023-09-29 05:57:46 - Incident: 'Kidnapping', '102' +2023-09-29 06:14:02 - Incident: 'Sabotage', '103' +2023-09-29 06:23:16 - Incident: 'asdasd', '123123' +2023-09-29 06:23:30 - Incident: '213123asd', '234234' +2023-09-29 06:23:52 - Incident: '213123asd', '234234' +2023-09-29 06:23:52 - Inserting into: Report +2023-09-29 06:23:52 - Incident: '213123asd', '234234' +2023-09-29 06:23:58 - Incident: '213123asd', '234234' +2023-09-29 06:23:58 - Incident: '213123asd', '234234' +2023-09-29 06:24:31 - Incident: 'asdasd', '123123' +2023-09-29 06:24:34 - Incident: 'asdasd', '123123' +2023-09-29 06:24:36 - Incident: 'Heist', '101' +2023-09-29 06:24:52 - Updating records in: Operation +2023-09-29 08:39:39 - Incident: 'Arson', '108' +2023-09-29 08:39:53 - Incident: 'Arson', '108' +2023-09-29 08:39:53 - Inserting into: Report +2023-09-29 08:39:53 - Incident: 'Arson', '108' +2023-09-29 08:40:08 - Incident: 'Sabotage', '103' +2023-09-29 08:40:21 - Updating records in: Operation +2023-09-29 08:40:29 - Inserting into: OperatesIn +2023-09-29 14:18:48 - Incident: 'Arson', '108' +2023-09-29 14:19:19 - Incident: '213123asd', '234234' +2023-09-29 14:37:14 - SELECT * FROM ArchivedReport WHERE Title = hej; +2023-09-29 14:37:54 - SELECT * FROM ArchivedReport WHERE Title = hej; +2023-09-29 14:38:08 - SELECT * FROM ArchivedReport WHERE Title = hej; +2023-09-29 14:38:43 - SELECT * FROM ArchivedReport WHERE Title = 'hej'; +2023-09-29 14:38:49 - SELECT * FROM ArchivedReport WHERE Title = 'test'; +2023-09-29 14:38:58 - SELECT * FROM ArchivedReport WHERE Title = ''; +2023-09-29 14:39:01 - SELECT * FROM Report; +2023-09-29 14:39:07 - SELECT * FROM Report; +2023-09-29 14:39:10 - SELECT * FROM Report; +2023-09-29 14:39:35 - SELECT * FROM ArchivedReport; +2023-09-29 14:39:52 - SELECT * FROM ArchivedReport WHERE Title = 'Old'; +2023-09-29 14:39:57 - SELECT * FROM ArchivedReport WHERE Title = 'old'; +2023-09-29 14:40:00 - SELECT * FROM ArchivedReport WHERE Title = 'old'; +2023-09-29 14:40:05 - SELECT * FROM ArchivedReport WHERE Title = 'test'; +2023-09-29 14:40:12 - SELECT * FROM ArchivedReport WHERE Title = ''; +2023-09-29 14:40:17 - SELECT * FROM ArchivedReport; +2023-09-29 14:41:37 - SELECT * FROM ArchivedReport; +2023-09-29 14:41:46 - SELECT * FROM ArchivedReport WHERE Title LIKE 'o%'; +2023-09-29 14:46:48 - SELECT * FROM ArchivedReport; +2023-09-29 14:46:54 - SELECT * FROM ArchivedReport WHERE Title LIKE 'operation%'; +2023-09-29 14:47:09 - SELECT * FROM ArchivedReport WHERE Title LIKE 'test%'; +2023-09-29 14:47:13 - SELECT * FROM ArchivedReport WHERE Title LIKE '%'; +2023-09-29 14:49:18 - SELECT * FROM ArchivedReport WHERE Title LIKE '%'; +2023-09-29 14:51:17 - SELECT * FROM ArchivedReport WHERE Title LIKE '%'; +2023-09-29 14:51:26 - SELECT * FROM ArchivedReport WHERE Title LIKE '%'; +2023-09-29 14:52:26 - SELECT * FROM ArchivedReport WHERE Title LIKE '%'; +2023-09-29 14:52:26 - SELECT * FROM ArchivedReport WHERE Title LIKE '%'; +2023-09-29 14:53:09 - SELECT * FROM ArchivedReport WHERE Title LIKE '%'; +2023-09-29 14:53:10 - SELECT * FROM ArchivedReport WHERE Title LIKE '%'; +2023-09-29 14:54:08 - SELECT * FROM ArchivedReport WHERE Title LIKE '%'; +2023-09-29 14:54:15 - SELECT * FROM ArchivedReport WHERE Title LIKE '%'; +2023-09-29 14:54:16 - SELECT * FROM ArchivedReport WHERE Title LIKE '%'; +2023-09-29 14:54:27 - SELECT * FROM ArchivedReport WHERE Title LIKE '%'; +2023-09-29 14:54:28 - SELECT * FROM ArchivedReport WHERE Title LIKE '%'; +2023-09-29 16:52:46 - SELECT * FROM ArchivedReport; +2023-09-29 17:03:24 - SELECT * FROM ArchivedReport; +2023-09-29 17:04:07 - SELECT * FROM ArchivedReport; +2023-09-29 17:04:13 - SELECT * FROM ArchivedReport WHERE Title LIKE 'op%'; +2023-09-29 17:04:17 - SELECT * FROM ArchivedReport WHERE Title LIKE 'test%'; +2023-09-29 17:04:19 - SELECT * FROM ArchivedReport WHERE Title LIKE '%'; +2023-09-29 17:04:24 - SELECT * FROM ArchivedReport WHERE Title LIKE 'kidnapping%'; +2023-09-29 17:20:29 - SELECT * FROM ArchivedReport; +2023-09-30 14:01:39 - Incident: 'Sabotage', '103' +2023-09-30 18:10:57 - SELECT * FROM ArchivedReport; +2023-09-30 18:11:05 - SELECT * FROM ArchivedReport WHERE Title LIKE 'o%'; +2023-09-30 18:11:09 - SELECT * FROM ArchivedReport WHERE Title LIKE 'test%'; +2023-09-30 18:11:12 - SELECT * FROM ArchivedReport WHERE Title LIKE 'rapport%'; +2023-09-30 18:11:13 - SELECT * FROM ArchivedReport WHERE Title LIKE '%'; diff --git a/utils/modalBuilder.php b/utils/modalBuilder.php @@ -82,9 +82,10 @@ } foreach ($this->dateColumns as $column) { + $date = date('Y-m-d'); $modalBody .= "<div class='form-group'> <label for='$column'>$column</label> - <input type='date' class='form-control' id='$column' name='$column'> + <input type='date' value='$date' class='form-control' id='$column' name='$column'> </div>"; } diff --git a/utils/tableBuilder.php b/utils/tableBuilder.php @@ -0,0 +1,78 @@ +<?php + class TableBuilder { + + private $db; + private $query; + private $redirectAddress; + private $queryColumns = []; + private $actionCallbacks = []; + + public function __construct($query) { + $this->db = dbconnection::getInstance(); + $this->query = $query; + } + + public function setRedirect($address, $queryColumns = []) { + $this->redirectAddress = $address; + $this->queryColumns = $queryColumns; + return $this; + } + + public function addActionColumn($function, $headerTitle = "Action") { + $this->actionCallbacks[] = ['callback' => $function, 'header' => $headerTitle]; + return $this; + } + + private function buildRow($row) { + $rowData = "<tr"; + + if ($this->redirectAddress) { + $queryParams = array_map(function($col) use ($row) { + return $col . "=" . urlencode($row[$col]); + }, $this->queryColumns); + $redirectUrl = $this->redirectAddress . "?" . implode("&", $queryParams); + $rowData .= " onclick=\"window.location.href = '" . $redirectUrl . "'\" style='cursor: pointer;'"; + } + + $rowData .= ">"; + + foreach ($row as $key => $value) { + if (!is_numeric($key)) { + $rowData .= "<td>" . $value . "</td>"; + } + } + + foreach ($this->actionCallbacks as $action) { + $rowData .= "<td style='width: 80px; white-space: nowrap;'>" . call_user_func($action['callback'], $row) . "</td>"; + } + $rowData .= "</tr>"; + + return $rowData; + } + + public function buildTable() { + $hover = isset($this->redirectAddress) ? "table-hover" : ""; + $output = "<div class='overflow-auto mt-1 mb-1'><table class='table table-striped table-bordered $hover'><thead class='thead-dark'><tr>"; + + foreach ($this->db->getPdo()->query($this->query) as $row) { + foreach ($row as $key => $value) { + if (!is_numeric($key)) { + $output .= "<th>" . $key . "</th>"; + } + } + foreach ($this->actionCallbacks as $action) { + $output .= "<th style='width: 80px; white-space: nowrap;'>" . $action['header'] . "</th>"; + } + $output .= "</tr></thead><tbody>"; + break; + } + + foreach ($this->db->getPdo()->query($this->query) as $row) { + $output .= $this->buildRow($row); + } + + $output .= "</tbody></table></div>"; + return $output; + } + } +?> +\ No newline at end of file diff --git a/utils/tableFactory.php b/utils/tableFactory.php @@ -2,39 +2,11 @@ class tableFactory { //create table - public static function createTable($tableName) { - $db = dbconnection::getInstance(); - $pdo = $db->getPdo(); - - $output = "<div class='overflow-auto'><table class='table table-striped table-bordered'>"; - - try { - $firstRow = true; - foreach($pdo->query('SELECT * FROM ' . $tableName . ';') AS $row) { - if($firstRow) { - $output .= "<thead class='thead-dark'><tr>"; - foreach($row as $key => $value) { - if(!is_numeric($key)) { - $output .= "<th>" . $key . "</th>"; - } - } - $output .= "</tr></thead><tbody>"; - $firstRow = false; - } - $output .= "<tr>"; - foreach($row as $key => $value) { - if(!is_numeric($key)) { - $output .= "<td>" . $value . "</td>"; - } - } - } - $output .= "</tbody></table></div>"; + public static function createTable($query) { + $sql = "SELECT * FROM $query;"; - return $output; - } catch (PDOException $e) { - echo "Error: " . $e->getMessage(); - return ''; - } + $tableBuilder = (new TableBuilder($sql)); + return $tableBuilder->buildTable(); } /** @@ -46,87 +18,17 @@ * Ex: CreateTableWithRedirect("Operation", "operationdetails.php", ["OperationName"]), * Clicking "Operation1" would result in a redirect to "./operationdetails.php/?OperationName=Operation1" */ - // public static function createTableWithRedirect($query, $address, $queryColumns) { - $db = dbconnection::getInstance(); - $pdo = $db->getPdo(); - - $output = "<div class='overflow-auto'><table class='table table-striped table-bordered table-hover'>"; - - try { - $firstRow = true; - foreach($pdo->query($query) AS $row) { - if($firstRow) { - $output .= "<thead class='thead-dark'><tr>"; - foreach($row as $key => $value) { - if(!is_numeric($key)) { - $output .= "<th>" . $key . "</th>"; - } - } - $output .= "</tr></thead><tbody>"; - $firstRow = false; - } - - $queryParams = []; - foreach ($queryColumns as $col) { - $queryParams[] = $col . "=" . urlencode($row[$col]); - } - $redirectUrl = $address . "?" . implode("&", $queryParams); - - $output .= "<tr onclick=\"window.location.href = '" . $redirectUrl . "'\" style='cursor: pointer;'>"; - foreach($row as $key => $value) { - if(!is_numeric($key)) { - $output .= "<td>" . $value . "</td>"; - } - } - $output .= "</tr>"; - } - $output .= "</tbody></table></div>"; - - return $output; - } catch (PDOException $e) { - echo "Error: " . $e->getMessage(); - return ''; - } + $tableBuilder = (new TableBuilder($query)); + return $tableBuilder->setRedirect($address, $queryColumns)->buildTable(); } /** * Create a custom table, that displays any table generated from an sql query. */ public static function createCustomTable($query) { - $db = dbconnection::getInstance(); - $pdo = $db->getPdo(); - - $output = "<div class='overflow-auto'><table class='table table-striped table-bordered'>"; - - try { - $firstRow = true; - foreach($pdo->query($query) AS $row) { - if($firstRow) { - $output .= "<thead class='thead-dark'><tr>"; - foreach($row as $key => $value) { - if(!is_numeric($key)) { - $output .= "<th>" . $key . "</th>"; - } - } - $output .= "</tr></thead><tbody>"; - $firstRow = false; - } - $output .= "<tr>"; - foreach($row as $key => $value) { - if(!is_numeric($key)) { - $output .= "<td>" . $value . "</td>"; - } - } - $output .= "</tr>"; - } - $output .= "</tbody></table></div>"; - - return $output; - } catch (PDOException $e) { - echo "Error: " . $e->getMessage(); - return ''; - } + $tableBuilder = (new TableBuilder($query)); + return $tableBuilder->buildTable(); } /** @@ -174,43 +76,13 @@ } } + /** + * Specify a callback function which will be called when a user presses a row. + * @param $function = the callback function (function foo($row)) + */ public static function createTableWithCallbackColumn($query, $function) { - $db = dbconnection::getInstance(); - $pdo = $db->getPdo(); - - $output = "<div class='overflow-auto'><table class='table table-striped table-bordered'>"; - - try { - $firstRow = true; - foreach($pdo->query($query) AS $row) { - if($firstRow) { - $output .= "<thead class='thead-dark'><tr>"; - foreach($row as $key => $value) { - if(!is_numeric($key)) { - $output .= "<th>" . $key . "</th>"; - } - } - - $output .= "<th>Action</th>"; - $output .= "</tr></thead><tbody>"; - $firstRow = false; - } - $output .= "<tr>"; - foreach($row as $key => $value) { - if(!is_numeric($key)) { - $output .= "<td>" . $value . "</td>"; - } - } - $output .= "<td>" . call_user_func($function, $row) . "</td>"; - $output .= "</tr>"; - } - $output .= "</tbody></table></div>"; - - return $output; - } catch (PDOException $e) { - echo "Error: " . $e->getMessage(); - return ''; - } + $tableBuilder = (new TableBuilder($query)); + return $tableBuilder->addActionColumn($function)->buildTable(); } } ?> \ No newline at end of file