diff --git a/src/Controllers/BaseController.php b/src/Controllers/BaseController.php index e69474a..e1f6e0b 100644 --- a/src/Controllers/BaseController.php +++ b/src/Controllers/BaseController.php @@ -12,7 +12,7 @@ public function post(): void { http_response_code(405); } - public function put(): void + public function put(int $id): void { http_response_code(405); } diff --git a/src/Controllers/Manage/ManageDVDController.php b/src/Controllers/Manage/ManageDVDController.php index 6725c7b..f8ad31d 100644 --- a/src/Controllers/Manage/ManageDVDController.php +++ b/src/Controllers/Manage/ManageDVDController.php @@ -4,11 +4,13 @@ { use Controllers\BaseController; + use Exception; use Models\DVDModel; use Models\Exceptions\BadRouteException; use Models\Exceptions\RouteNotFoundException; use Models\QueryModel\DVDQueryModel; use Models\ViewModels\ManageDVDDetailViewModel; + use Models\ViewModels\ManageDVDDetailViewStateEnum; use Models\ViewModels\ManageDVDListViewModel; use Services\DVDService; use Utils\PHPUtils; @@ -30,7 +32,7 @@ public function get(int $id = null): void } } - public function getAll():void + private function getAll():void { $viewModel = new ManageDVDListViewModel(); $service = DVDService::getInstance(); @@ -47,8 +49,8 @@ public function getAll():void } $viewModel->Query = $queryModel; - $viewModel->FilteredCount = $service->getDVDCount($queryModel); - $viewModel->DVDs = $service->getDVDs($queryModel); + $viewModel->FilteredCount = $service->getCount($queryModel); + $viewModel->DVDs = $service->getAll($queryModel); $viewModel->TotalPages = ceil($viewModel->FilteredCount / $queryModel->Limit); $viewModel->CurrentPage = ($queryModel->Offset / $queryModel->Limit) + 1; @@ -61,11 +63,34 @@ private function getById($id): void $viewModel = new ManageDVDDetailViewModel(); $service = DVDService::getInstance(); - $viewModel->DVD = $service->getDVDById($id); + $viewModel->DVD = $service->getById($id); + $viewModel->state = ManageDVDDetailViewStateEnum::Update; $controller = new ManageDVDDetailView($viewModel); $controller->render(); } + + public function put($id): void + { + if($id === null) + { + http_response_code(502); + } + + $model = new DVDModel(); + $service = DVDService::getInstance(); + + $model->Id = $id; + $model->Title = $_POST["Title"]; + $model->LocalTitle = $_POST["LocalTitle"]; + $model->Synopsis = $_POST["Synopsis"]; + $model->Notation = $_POST["Notation"]; + + $service->update($model); + + header("Location: /manage/dvd/$id"); + die(); + } } } diff --git a/src/Controllers/Manage/ManageDashboardController.php b/src/Controllers/Manage/ManageDashboardController.php index ad91e53..e6dc919 100644 --- a/src/Controllers/Manage/ManageDashboardController.php +++ b/src/Controllers/Manage/ManageDashboardController.php @@ -17,8 +17,8 @@ public function get(): void $service = DVDService::getInstance(); $queryModel = new DVDQueryModel(); $queryModel->IsOffered=true; - $viewModel->DVDCount = $service->getDVDCount(); - $viewModel->OfferedDVDCount = $service->getDVDCount($queryModel); + $viewModel->DVDCount = $service->getCount(); + $viewModel->OfferedDVDCount = $service->getCount($queryModel); $view = new DashboardView($viewModel); $view->render(); } diff --git a/src/Middlewares/Routing.php b/src/Middlewares/Routing.php index eea88f7..b5110ba 100644 --- a/src/Middlewares/Routing.php +++ b/src/Middlewares/Routing.php @@ -28,6 +28,10 @@ public function route(): void { $route = strtolower(rtrim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/\\')); $verb = strtolower($_SERVER['REQUEST_METHOD']); + if($verb == "post" && isset($_POST['_METHOD'])) + { + $verb = strtolower($_POST['_METHOD']); + } $fragments = explode('/', $route); $routeHasParam = is_numeric($fragments[count($fragments) - 1]); $param = null; @@ -36,6 +40,8 @@ public function route(): void $route = rtrim($route, '/\\' . $param); } + if($route == "") { $route = "/home"; } + $routeRegistry = array( "/home" => function() { return new HomeController(); diff --git a/src/Models/ViewModels/ManageDVDDetailViewModel.php b/src/Models/ViewModels/ManageDVDDetailViewModel.php index c39412a..e179152 100644 --- a/src/Models/ViewModels/ManageDVDDetailViewModel.php +++ b/src/Models/ViewModels/ManageDVDDetailViewModel.php @@ -9,6 +9,7 @@ class ManageDVDDetailViewModel implements IViewModel { public DVDModel $DVD; + public ManageDVDDetailViewStateEnum $state; } } diff --git a/src/Models/ViewModels/ManageDVDDetailViewStateEnum.php b/src/Models/ViewModels/ManageDVDDetailViewStateEnum.php new file mode 100644 index 0000000..c7f076f --- /dev/null +++ b/src/Models/ViewModels/ManageDVDDetailViewStateEnum.php @@ -0,0 +1,9 @@ +select("Count(id)") @@ -46,7 +47,7 @@ public function getDVDCount(DVDQueryModel $queryModel = null):int return 0; } - public function getDVDs(DVDQueryModel $queryModel): array + public function getAll(DVDQueryModel $queryModel): array { $result = array(); $queryBuilder = (new QueryBuilder()) @@ -87,7 +88,7 @@ public function getDVDs(DVDQueryModel $queryModel): array return $result; } - public function getDVDById($id) + public function getById($id):?DVDModel { $result = array(); $queryBuilder = (new QueryBuilder()) @@ -107,6 +108,22 @@ public function getDVDById($id) return null; } + public function update(DVDModel $dvd) + { + $queryBuilder = (new UpdateQueryBuilder()) + ->update("dvds") + ->set("Title", $dvd->Title) + ->set("LocalTitle", $dvd->LocalTitle) + ->set("Synopsis", $dvd->Synopsis) + ->set("Notation", $dvd->Notation) + + ->where("Id", "=", $dvd->Id); + + $query = $queryBuilder->getQuery(); + + $queryResult = $this->fetchStatement($query->sql, $query->params, DVDModel::class); + } + function isAllowedOrderColumn(string $column): bool { $allowedOrderColumns = array("Quantity", "Year", "Title", "IsOffered", "Price"); diff --git a/src/Utils/Components/FormTextComponent/FormTextComponent.php b/src/Utils/Components/FormTextComponent/FormTextComponent.php index 1e66f88..888e591 100644 --- a/src/Utils/Components/FormTextComponent/FormTextComponent.php +++ b/src/Utils/Components/FormTextComponent/FormTextComponent.php @@ -6,6 +6,8 @@ class FormTextComponent public string $label; public ?string $value; public ?string $placeholder; + public bool $required; + public bool $readOnly; public function __construct(string $name, string $label, ?string $placeholder = null, ?string $value = "", bool $required = true, bool $readOnly = false) { @@ -13,6 +15,8 @@ public function __construct(string $name, string $label, ?string $placeholder = $this->label = $label; $this->value = $value; $this->placeholder = $placeholder; + $this->required = $required; + $this->readOnly = $readOnly; } public function getRenderedComponent() diff --git a/src/Utils/Components/FormTextComponent/FormTextComponent.template.php b/src/Utils/Components/FormTextComponent/FormTextComponent.template.php index 0853ce6..279c613 100644 --- a/src/Utils/Components/FormTextComponent/FormTextComponent.template.php +++ b/src/Utils/Components/FormTextComponent/FormTextComponent.template.php @@ -4,7 +4,7 @@ name="name; ?>" placeholder="placeholder; ?>" value="value; ?>" - required="required; ?>" - readonly="readOnly; ?>" + required?"required":""; ?> + readOnly?"readOnly":""; ?> /> \ No newline at end of file diff --git a/src/Utils/Query/UpdateQueryBuilder.php b/src/Utils/Query/UpdateQueryBuilder.php new file mode 100644 index 0000000..4d5c661 --- /dev/null +++ b/src/Utils/Query/UpdateQueryBuilder.php @@ -0,0 +1,50 @@ +params = []; + } + + public function update($table) { + $this->table = $table; + return $this; + } + + public function set($column, $value) { + $this->set[] = "$column = ?"; + $this->params[] = $value; + return $this; + } + + public function where($column, $operator, $value) { + $this->where[] = "$column $operator ?"; + $this->params[] = $value; + return $this; + } + + public function getQuery():QueryModel { + $sql = "UPDATE " . $this->table; + $sql .= " SET " . implode(', ', $this->set); + if (!empty($this->where)) { + $sql .= " WHERE " . implode(' AND ', $this->where); + } + $sql .= ";"; + $result = new QueryModel(); + $result->sql = $sql; + $result->params = $this->params; + + return $result; + } + } +} + diff --git a/src/Views/Manage/DVD/Detail/ManageDVDDetailView.php b/src/Views/Manage/DVD/Detail/ManageDVDDetailView.php index ff485ca..8317559 100644 --- a/src/Views/Manage/DVD/Detail/ManageDVDDetailView.php +++ b/src/Views/Manage/DVD/Detail/ManageDVDDetailView.php @@ -5,6 +5,7 @@ use Models\ViewModels\LayoutViewModel; use Models\ViewModels\ManageDVDDetailViewModel; + use Models\ViewModels\ManageDVDDetailViewStateEnum; use Views\BaseView; class ManageDVDDetailView extends BaseView diff --git a/src/Views/Manage/DVD/Detail/ManageDVDDetailView.template.php b/src/Views/Manage/DVD/Detail/ManageDVDDetailView.template.php index f7471ed..f44f67d 100644 --- a/src/Views/Manage/DVD/Detail/ManageDVDDetailView.template.php +++ b/src/Views/Manage/DVD/Detail/ManageDVDDetailView.template.php @@ -1,10 +1,17 @@ state) +{ + ManageDVDDetailViewStateEnum::Create => "POST", + ManageDVDDetailViewStateEnum::Update => "PUT", + default => "" +}; ?>