Skip to content

Commit

Permalink
Create new, home data retrieval
Browse files Browse the repository at this point in the history
  • Loading branch information
ItsDyze committed Aug 30, 2024
1 parent 97fe240 commit af3767a
Show file tree
Hide file tree
Showing 19 changed files with 344 additions and 105 deletions.
40 changes: 17 additions & 23 deletions public/assets/scripts.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,31 @@ function checkboxHelper(checkbox)
checkbox.value = checkbox.checked;
}

function fileHelper(inputId, imgType, e)
function fileHelper(inputId, e)
{
if(e.target.files && e.target.files[0] && e.target.files[0].size < 5242880) {
const reader = new FileReader();
reader.onload = evt => {
resizeImage(evt.target.result, imgType, 512, 1024, (r) => document.getElementById(inputId).value = r)
const file = e.target.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(event) {
const base64String = event.target.result;
//resizeImage(base64String, 512, 768, img => document.getElementById(inputId).value = img);
document.getElementById(inputId).value = base64String;
};
reader.readAsDataURL(file);
}
reader.readAsText(e.target.files[0]);
}
else
{
alert("Impossible de d'envoyer l'image.")
}
}

function resizeImage(imgBytes, imgType, maxWidth, maxHeight, cb)
function resizeImage(base64, maxWidth, maxHeight, callback)
{
const blob = new Blob([byteArray]);

const img = new Image();
const url = URL.createObjectURL(blob);

img.src = base64;
img.onload = () => {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');

let width = img.width;
let height = img.height;

Expand All @@ -44,20 +43,15 @@ function resizeImage(imgBytes, imgType, maxWidth, maxHeight, cb)
}
}

const canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;

const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, width, height);

canvas.toBlob((resizedBlob) => {
const reader = new FileReader();
reader.onload = function(event) {
const resizedByteArray = new Uint8Array(event.target.result);
cb(resizedByteArray);
};
reader.readAsArrayBuffer(resizedBlob);
}, imgType);

URL.revokeObjectURL(url);
const resizedBase64 = canvas.toDataURL();
console.log(resizedBase64)
callback(resizedBase64);
};
}
25 changes: 25 additions & 0 deletions src/Controllers/Home/HomeController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,38 @@
{

use Controllers\BaseController;
use Models\QueryModel\DVDQueryModel;
use Models\QueryModel\HomeQueryModel;
use Models\ViewModels\HomeViewModel;
use Services\DVDService;
use Views\Home\HomeView;

class HomeController extends BaseController {
public function get(): void
{
$data = new HomeViewModel();
$service = DVDService::getInstance();

$queryModel = new DVDQueryModel();
if(!empty($_GET))
{
$queryModel->setFromQueryString($_GET);
}
else
{
header('Location: ' . parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH)."?".$queryModel->getQueryString(), true, 303);
die();
}

// override to prevent customers to see not-in-offer DVDs
$queryModel->IsOffered = 1;

$data->Query = $queryModel;
$data->FilteredCount = $service->getCount($queryModel);
$data->DVDs = $service->getAll($queryModel);
$data->TotalPages = ceil($data->FilteredCount / $queryModel->Limit);
$data->CurrentPage = ($queryModel->Offset / $queryModel->Limit) + 1;

$view = new HomeView($data);
$view->render();
}
Expand Down
64 changes: 54 additions & 10 deletions src/Controllers/Manage/ManageDVDController.php
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,34 @@ private function getById($id): void
$viewModel = new ManageDVDDetailViewModel();
$service = DVDService::getInstance();

$viewModel->DVD = $service->getById($id);
//$viewModel->DVD->ImageBase64 = base64_encode($viewModel->DVD->Image);
//$viewModel->DVD->ImageSignature = ImageUtils::getImageTypeFromSignature($viewModel->DVD->Image);
$viewModel->state = ManageDVDDetailViewStateEnum::Update;
if($id === -1)
{
$viewModel->state = ManageDVDDetailViewStateEnum::Create;
$model = new DVDModel();
$model->Title = "";
$model->LocalTitle = "";
$model->Synopsis = "";
$model->Notation = 0;
$model->Certification = "";
$model->Note = "";
$model->IsOffered = true;
$model->Quantity = 0;
$model->Price = 0;
$model->Year = 0;
$model->TypeId = null;
$model->Image = null;
$model->Genres = [];

$viewModel->DVD = $model;

}
else
{
$viewModel->DVD = $service->getById($id);
//$viewModel->DVD->ImageBase64 = base64_encode($viewModel->DVD->Image);
//$viewModel->DVD->ImageSignature = ImageUtils::getImageTypeFromSignature($viewModel->DVD->Image);
$viewModel->state = ManageDVDDetailViewStateEnum::Update;
}

$controller = new ManageDVDDetailView($viewModel);
$controller->render();
Expand All @@ -84,6 +108,31 @@ public function put($id): void
$service = DVDService::getInstance();

$model->Id = $id;
$this->postToDvdModel($model);

$service->update($model);

header("Location: /manage/dvd/$id");
die();
}

public function post(): void
{

$model = new DVDModel();
$service = DVDService::getInstance();

$this->postToDvdModel($model);
//$model->Image = $_POST["Image"];

$newId = $service->insert($model);

header("Location: /manage/dvd/$newId");
die();
}

private function postToDvdModel(DVDModel $model)
{
$model->Title = $_POST["Title"];
$model->LocalTitle = $_POST["LocalTitle"];
$model->Synopsis = $_POST["Synopsis"];
Expand All @@ -96,12 +145,7 @@ public function put($id): void
$model->Year = $_POST["Year"];
$model->TypeId = !is_null($_POST["TypeId"]) ? intval($_POST["TypeId"]) : null;
$model->Genres = $_POST["Genres"] && is_array($_POST["Genres"]) ? $_POST["Genres"] : null;
//$model->Image = $_POST["Image"];

$service->update($model);

header("Location: /manage/dvd/$id");
die();
$model->Image = $_POST["Image"];
}
}
}
Expand Down
49 changes: 0 additions & 49 deletions src/Controllers/Manage/ManageRouter.php

This file was deleted.

19 changes: 19 additions & 0 deletions src/Models/DVDLightModel.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace Models;

class DVDLightModel
{
public int $Id;
public ?string $LocalTitle;
public ?int $Notation;
public ?string $Certification;
public ?bool $IsOffered;
public ?int $Quantity;
public ?float $Price;
public ?int $Year;
public ?string $Image;
public ?int $TypeId;
public ?string $Type;
public ?array $Genres;
}
12 changes: 12 additions & 0 deletions src/Models/QueryModel/BaseQueryModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,18 @@ class BaseQueryModel
{
public int $Limit = 10;
public int $Offset = 0;
public string|null $OrderBy = null;
public string|null $OrderDesc = null;
public string|null $Search = null;

public function setFromListingQueryString(array $param): void
{
$this->OrderBy = $param['OrderBy'] ?? '';
$this->OrderDesc = $param['OrderDesc'] ?? '';
$this->Search = $param['Search'] ?? '';
$this->Limit = isset($param['Limit']) ? (int)$param['Limit'] : 10;
$this->Offset = isset($param['Offset']) ? (int)$param['Offset'] : 0;
}
}
}

10 changes: 2 additions & 8 deletions src/Models/QueryModel/DVDQueryModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@
class DVDQueryModel extends BaseQueryModel
{
public bool|null $IsOffered = null;
public string|null $OrderBy = null;
public string|null $OrderDesc = null;
public string|null $Search = null;

public function getQueryString(): string
{
Expand All @@ -25,11 +22,8 @@ public function setFromQueryString(array $param): void
$this->IsOffered = array_key_exists('IsOffered', $param) && $param['IsOffered'] !== ''
? filter_var($param['IsOffered'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)
: null;
$this->OrderBy = $param['OrderBy'] ?? '';
$this->OrderDesc = $param['OrderDesc'] ?? '';
$this->Search = $param['Search'] ?? '';
$this->Limit = isset($param['Limit']) ? (int)$param['Limit'] : 10;
$this->Offset = isset($param['Offset']) ? (int)$param['Offset'] : 0;

parent::setFromListingQueryString($param);
}
}
}
Expand Down
6 changes: 6 additions & 0 deletions src/Models/ViewModels/HomeViewModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,15 @@
{

use Interfaces\IViewModel;
use Models\QueryModel\DVDQueryModel;

class HomeViewModel implements IViewModel
{

public array $DVDs;
public int $FilteredCount;
public DVDQueryModel $Query;
public int $TotalPages;
public int $CurrentPage;
}
}
27 changes: 25 additions & 2 deletions src/Services/DVDService.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use Exception;
use Models\DVDModel;
use Models\QueryModel\DVDQueryModel;
use Utils\Query\InsertQueryBuilder;
use Utils\Query\QueryBuilder;
use Utils\Query\UpdateQueryBuilder;

Expand Down Expand Up @@ -51,7 +52,7 @@ public function getAll(DVDQueryModel $queryModel): array
{
$result = array();
$queryBuilder = (new QueryBuilder())
->select(["Id", "Title", "LocalTitle", "Synopsis", "Notation", "Note", "Certification", "IsOffered", "Quantity", "Price", "Year"])
->select(["Id", "LocalTitle", "Notation", "Certification", "IsOffered", "Quantity", "Price", "Year", "Image", "TypeId"])
->from("dvds")
->limit($queryModel->Offset, $queryModel->Limit);

Expand Down Expand Up @@ -122,7 +123,7 @@ public function update(DVDModel $dvd)
->set("Quantity", $dvd->Quantity)
->set("Price", $dvd->Price)
->set("Year", $dvd->Year)
//->set("Image", $dvd->Image)
->set("Image", $dvd->Image)
->set("TypeId", $dvd->TypeId)

->where("Id", "=", $dvd->Id);
Expand All @@ -132,6 +133,28 @@ public function update(DVDModel $dvd)
$queryResult = $this->fetchStatement($query->sql, $query->params, DVDModel::class);
}

public function insert(DVDModel $dvd)
{
$queryBuilder = (new InsertQueryBuilder())
->insert("dvds")
->value("Title", $dvd->Title)
->value("LocalTitle", $dvd->LocalTitle)
->value("Synopsis", $dvd->Synopsis)
->value("Notation", $dvd->Notation)
->value("Certification", $dvd->Certification)
->value("Note", $dvd->Note)
->value("IsOffered", $dvd->IsOffered)
->value("Quantity", $dvd->Quantity)
->value("Price", $dvd->Price)
->value("Year", $dvd->Year)
->value("Image", $dvd->Image)
->value("TypeId", $dvd->TypeId);

$query = $queryBuilder->getQuery();

return $this->insertStatement($query->sql, $query->params);
}

function isAllowedOrderColumn(string $column): bool
{
$allowedOrderColumns = array("Quantity", "Year", "Title", "IsOffered", "Price");
Expand Down
9 changes: 9 additions & 0 deletions src/Services/DataService.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,15 @@ protected function executeStatement($statement, $parameters)
return $query->execute($parameters);
}

protected function insertStatement($statement, $parameters)
{
$this->validateStatementAndParameters($statement, $parameters);

$query = $this->GetDBContext()->prepare($statement);
$query->execute($parameters);
return $this->GetDBContext()->lastInsertId();
}

protected function fetchValue($statement, $parameters)
{
$this->validateStatementAndParameters($statement, $parameters);
Expand Down
Loading

0 comments on commit af3767a

Please sign in to comment.