From 12f9088de002eb4fac895c3ff198e1dbce4fff41 Mon Sep 17 00:00:00 2001
From: creme332 <65414576+creme332@users.noreply.github.com>
Date: Thu, 4 Apr 2024 14:32:22 +0400
Subject: [PATCH 01/84] fix bugs in getRatingDistribution
- cast value to float before rounding
- return [] if no reviews present
---
src/models/Product.php | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/models/Product.php b/src/models/Product.php
index 9d1eaf8..8d13554 100644
--- a/src/models/Product.php
+++ b/src/models/Product.php
@@ -436,13 +436,17 @@ public function getRatingDistribution(): array
return []; // Return empty array on error
}
+ if (empty($result)) {
+ return [];
+ }
+
// Initialize the distribution array
$distribution = [];
// Populate the distribution array with rating and percentage
foreach ($result as $row) {
$rating = $row->rating;
- $percentage = round($row->percentage, 1); // Round to 1 decimal place
+ $percentage = round((float)$row->percentage, 1); // Round to 1 decimal place
$distribution[$rating] = $percentage;
}
From 705838425e4be5faf033492d1d6d680ab81b4a81 Mon Sep 17 00:00:00 2001
From: creme332 <65414576+creme332@users.noreply.github.com>
Date: Thu, 4 Apr 2024 14:32:51 +0400
Subject: [PATCH 02/84] initialize `rating_distribution` view variable, import
chartjs lib
---
src/controllers/Product.php | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/src/controllers/Product.php b/src/controllers/Product.php
index 4d41b4f..72294a4 100644
--- a/src/controllers/Product.php
+++ b/src/controllers/Product.php
@@ -28,6 +28,7 @@ public function __construct()
$this->view_data["default_rating"] = "";
$this->view_data["signed_in_user"] = null;
$this->view_data["product"] = null;
+ $this->view_data["rating_distribution"] = "[]";
// get product id from URL
$product_id = filter_var(Utility::splitURL()[2], FILTER_VALIDATE_INT);
@@ -90,6 +91,23 @@ private function handleReviewSubmission(): void
}
}
+ /**
+ * @return void
+ */
+ private function formatRatingDistribution(): string
+ {
+ $percents = $this->product->getRatingDistribution();
+ $str = "";
+
+ for ($x = 5; $x > 0; $x--) {
+ $str .= $percents[$x] ?? 0;
+ if ($x != 1) {
+ $str .= ',';
+ }
+ }
+ return "[" . $str . "]";
+ }
+
public function index(): void
{
// if product was not found, display error page
@@ -106,10 +124,18 @@ public function index(): void
$this->handleReviewSubmission();
}
+ $this->view_data['rating_distribution'] = $this->formatRatingDistribution();
+
+ $tags = <<< EOL
+
+ EOL;
$this->view(
'Product',
$this->view_data,
- $this->product->getName() . ' | Steamy Sips'
+ $this->product->getName() . ' | Steamy Sips',
+ $tags
);
}
}
\ No newline at end of file
From 059fa6f6d9ddb649cd232d9125ffe5fbc66c737a Mon Sep 17 00:00:00 2001
From: creme332 <65414576+creme332@users.noreply.github.com>
Date: Thu, 4 Apr 2024 14:33:16 +0400
Subject: [PATCH 03/84] display barchart for reviews
---
src/views/Product.php | 38 +++++++++++++++++++++++++++++++++++++-
1 file changed, 37 insertions(+), 1 deletion(-)
diff --git a/src/views/Product.php b/src/views/Product.php
index 2a9efd2..b15d602 100644
--- a/src/views/Product.php
+++ b/src/views/Product.php
@@ -7,6 +7,7 @@
* @var $signed_in_user User
* @var $default_review string default review text in form
* @var $default_rating int default rating in form
+ * @var $rating_distribution string An array containing the percentages of ratings
*/
use Steamy\Model\Client;
@@ -90,6 +91,10 @@
+
+
+
+
-
-
@@ -218,4 +212,6 @@ function recurse(Review $review): void
-
\ No newline at end of file
+
+
+
\ No newline at end of file
From cf1242edadca495f4c268445dabf90f6539876ee Mon Sep 17 00:00:00 2001
From: creme332 <65414576+creme332@users.noreply.github.com>
Date: Fri, 5 Apr 2024 12:35:49 +0400
Subject: [PATCH 06/84] create a cartItem factory function, add jsdocs
---
public/js/cart.js | 54 +++++++++++++++++++++++++++++++++++++++++------
1 file changed, 48 insertions(+), 6 deletions(-)
diff --git a/public/js/cart.js b/public/js/cart.js
index 307e948..88ab95c 100644
--- a/public/js/cart.js
+++ b/public/js/cart.js
@@ -1,33 +1,75 @@
-function myCart() {
- function setItem(productID, size) {
- // get all cart contents from localStorage
+/**
+ * Factory function for cart item objects
+ * @param {number} productID Product ID
+ * @param {number} quantity Number of times the product with the specific customizations is ordered
+ * @param {number} size Size of drink (small, medium, large, ...)
+ * @param {string} milk Type of milk (almond, coconut, ...)
+ * @returns {{size, milk, id}}
+ */
+const cartItem = (productID, quantity, size, milk) => {
+ return { productID, quantity, size, milk };
+};
+
+/**
+ * A function for managing the cart in localStorage.
+ * @returns {{getItems: (function(): any), removeItem: removeItem, isEmpty: (function(): boolean), clear: clear, setItem: setItem}}
+ */
+function cart() {
+ /**
+ * Adds a new item to shopping cart
+ * @param {cartItem} item
+ */
+ function setItem(item) {
+ // get all cart items from localStorage
const currentCart = getItems();
// check if product ID already exists in array
// and make changes
// add new product id to array
- currentCart.push(productID);
+ currentCart.push(item);
// save final cart back to localStorage
localStorage.setItem("cart", JSON.stringify(currentCart));
}
+ /**
+ * Check if the shopping cart contains no items
+ * @returns {boolean} True if cart is empty
+ */
function isEmpty() {
return getItems().length === 0;
}
+ /**
+ * An array of all items in the cart
+ * @returns {Array}
+ */
function getItems() {
+ // TODO: Convert each array item to a cartItem object
return JSON.parse(localStorage.getItem("cart") || "[]");
}
- function removeProduct(productID) {
+ /**
+ * Remove a product and its associated information from the shopping cart
+ * @param {int} itemToBeRemoved product ID of product to be removed
+ */
+ function removeItem(itemToBeRemoved) {
const currentCart = getItems();
- const newCart = currentCart.filter((id) => id !== productID);
+
+ // TODO: Allow several cart items of the same product but different customizations
+ const newCart = currentCart.filter(
+ (item) => itemToBeRemoved.productID() !== productID,
+ );
localStorage.setItem("cart", JSON.stringify(newCart));
}
+ /**
+ * Empties the shopping cart
+ */
function clear() {
localStorage.setItem("cart", "[]");
}
+
+ return { setItem, isEmpty, getItems, removeItem, clear };
}
From c685e51c9cf9847fc33675f84a5a1a68322266d9 Mon Sep 17 00:00:00 2001
From: creme332 <65414576+creme332@users.noreply.github.com>
Date: Fri, 5 Apr 2024 12:46:51 +0400
Subject: [PATCH 07/84] mention jsdocs and phpdocs, reformat file
---
docs/CODING_STANDARDS.md | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/docs/CODING_STANDARDS.md b/docs/CODING_STANDARDS.md
index da22831..827e5ef 100644
--- a/docs/CODING_STANDARDS.md
+++ b/docs/CODING_STANDARDS.md
@@ -4,16 +4,19 @@ Adhering to a standard helps maintain code quality, readability, and consistency
## PHP
-All PHP files follow the [PSR-12](https://www.php-fig.org/psr/psr-12/) coding style.
+- All PHP files follow the [PSR-12](https://www.php-fig.org/psr/psr-12/) coding style.
+- `phpDocs` is used for documentation.
## JavaScript
-`Prettier` is used for formatting and `ESLint` is used for linting.
+- [`jsDocs`](https://en.wikipedia.org/wiki/JSDoc) is used for documentation.
+- `Prettier` is used for formatting
+- `ESLint` is used for linting.
## CSS
-`Prettier` is used for formatting.
+- `Prettier` is used for formatting.
## SQL
-https://www.sqlstyle.guide
\ No newline at end of file
+- Some guidelines from the [SQL Style Guide](https://www.sqlstyle.guide) have been followed.
\ No newline at end of file
From e9c4620f531ce689ce7125484e6afbefa52e4592 Mon Sep 17 00:00:00 2001
From: creme332 <65414576+creme332@users.noreply.github.com>
Date: Sat, 6 Apr 2024 11:19:59 +0400
Subject: [PATCH 08/84] refactor, add testCart, compareCartItems
---
public/js/cart.js | 57 ++++++++++++++++++++++++++++++++++++++---------
1 file changed, 47 insertions(+), 10 deletions(-)
diff --git a/public/js/cart.js b/public/js/cart.js
index 88ab95c..21200fb 100644
--- a/public/js/cart.js
+++ b/public/js/cart.js
@@ -2,22 +2,23 @@
* Factory function for cart item objects
* @param {number} productID Product ID
* @param {number} quantity Number of times the product with the specific customizations is ordered
- * @param {number} size Size of drink (small, medium, large, ...)
+ * @param {string} size Size of drink (small, medium, large, ...)
* @param {string} milk Type of milk (almond, coconut, ...)
- * @returns {{size, milk, id}}
+ * @returns {{productID, quantity, size, milk}}
*/
-const cartItem = (productID, quantity, size, milk) => {
+const CartItem = (productID, quantity, size, milk) => {
return { productID, quantity, size, milk };
};
/**
* A function for managing the cart in localStorage.
- * @returns {{getItems: (function(): any), removeItem: removeItem, isEmpty: (function(): boolean), clear: clear, setItem: setItem}}
+ * @returns {{getItems: (function(): CartItem[]), removeItem: (function(CartItem): void), isEmpty: (function(): boolean),
+ * clear: (function(): void), setItem: (function(CartItem): void)}}
*/
function cart() {
/**
* Adds a new item to shopping cart
- * @param {cartItem} item
+ * @param {CartItem} item
*/
function setItem(item) {
// get all cart items from localStorage
@@ -43,23 +44,32 @@ function cart() {
/**
* An array of all items in the cart
- * @returns {Array}
+ * @returns {Array}
*/
function getItems() {
- // TODO: Convert each array item to a cartItem object
return JSON.parse(localStorage.getItem("cart") || "[]");
}
+ /**
+ * Checks if 2 cart items are identical. To be identical, they must have
+ * the same product ID, quantity, size, and milk.
+ * @param item1
+ * @param item2
+ * @returns {boolean}
+ */
+ function compareCartItems(item1, item2) {
+ return JSON.stringify(item1) === JSON.stringify(item2);
+ }
+
/**
* Remove a product and its associated information from the shopping cart
- * @param {int} itemToBeRemoved product ID of product to be removed
+ * @param {CartItem} itemToBeRemoved product ID of product to be removed
*/
function removeItem(itemToBeRemoved) {
const currentCart = getItems();
- // TODO: Allow several cart items of the same product but different customizations
const newCart = currentCart.filter(
- (item) => itemToBeRemoved.productID() !== productID,
+ (item) => !compareCartItems(item, itemToBeRemoved),
);
localStorage.setItem("cart", JSON.stringify(newCart));
}
@@ -73,3 +83,30 @@ function cart() {
return { setItem, isEmpty, getItems, removeItem, clear };
}
+
+function testCart() {
+ const myCart = cart();
+ myCart.clear();
+ console.log("Initial cart = ", myCart.getItems());
+
+ const order1 = CartItem(1, 2, "small", "almond");
+ const order2 = CartItem(2, 2, "small", "almond");
+
+ console.log("Add 2 orders");
+ myCart.setItem(order1);
+ myCart.setItem(order2);
+
+ console.log("Final cart = ", myCart.getItems());
+
+ console.log("Remove first order");
+ myCart.removeItem(order1);
+ console.log("Final cart = ", myCart.getItems());
+
+ console.log("Remove non-existent order");
+ myCart.removeItem(CartItem(999, 2, "small", "almond"));
+ console.log("Final cart = ", myCart.getItems());
+
+ console.log("Clear cart");
+ myCart.clear();
+ console.log("Cart == empty ?", myCart.isEmpty());
+}
From 1f577dbaae064bd00124d96952f9e27061e499ba Mon Sep 17 00:00:00 2001
From: creme332 <65414576+creme332@users.noreply.github.com>
Date: Sat, 6 Apr 2024 13:21:39 +0400
Subject: [PATCH 09/84] deal with duplicates in addItem(), rename CartItem
attributes
---
public/js/cart.js | 50 +++++++++++++++++++++++++++++++----------------
1 file changed, 33 insertions(+), 17 deletions(-)
diff --git a/public/js/cart.js b/public/js/cart.js
index 21200fb..b7874db 100644
--- a/public/js/cart.js
+++ b/public/js/cart.js
@@ -2,33 +2,46 @@
* Factory function for cart item objects
* @param {number} productID Product ID
* @param {number} quantity Number of times the product with the specific customizations is ordered
- * @param {string} size Size of drink (small, medium, large, ...)
- * @param {string} milk Type of milk (almond, coconut, ...)
- * @returns {{productID, quantity, size, milk}}
+ * @param {string} cupSize Size of drink (small, medium, large, ...)
+ * @param {string} milkType Type of milk (almond, coconut, ...)
+ * @returns {{productID, quantity, cupSize, milkType}}
*/
-const CartItem = (productID, quantity, size, milk) => {
- return { productID, quantity, size, milk };
+const CartItem = (productID, quantity, cupSize, milkType) => {
+ return { productID, quantity, cupSize, milkType };
};
/**
* A function for managing the cart in localStorage.
* @returns {{getItems: (function(): CartItem[]), removeItem: (function(CartItem): void), isEmpty: (function(): boolean),
- * clear: (function(): void), setItem: (function(CartItem): void)}}
+ * clear: (function(): void), addItem: (function(CartItem): void)}}
*/
function cart() {
/**
* Adds a new item to shopping cart
* @param {CartItem} item
*/
- function setItem(item) {
+ function addItem(item) {
// get all cart items from localStorage
const currentCart = getItems();
- // check if product ID already exists in array
- // and make changes
+ // check if there is already an identical item (ignoring quantity) in the cart
+ let duplicateFound = false;
+ for (let i = 0; i < currentCart.length; i++) {
+ const currentItem = currentCart[i];
- // add new product id to array
- currentCart.push(item);
+ if (
+ currentItem.productID === item.productID &&
+ currentItem.cupSize === item.cupSize &&
+ currentItem.milkType === item.milkType
+ ) {
+ duplicateFound = true;
+
+ // increment quantity
+ currentItem.quantity += item.quantity;
+ }
+ }
+
+ if (!duplicateFound) currentCart.push(item);
// save final cart back to localStorage
localStorage.setItem("cart", JSON.stringify(currentCart));
@@ -53,8 +66,8 @@ function cart() {
/**
* Checks if 2 cart items are identical. To be identical, they must have
* the same product ID, quantity, size, and milk.
- * @param item1
- * @param item2
+ * @param {CartItem} item1
+ * @param {CartItem} item2
* @returns {boolean}
*/
function compareCartItems(item1, item2) {
@@ -81,7 +94,7 @@ function cart() {
localStorage.setItem("cart", "[]");
}
- return { setItem, isEmpty, getItems, removeItem, clear };
+ return { addItem, isEmpty, getItems, removeItem, clear };
}
function testCart() {
@@ -90,12 +103,15 @@ function testCart() {
console.log("Initial cart = ", myCart.getItems());
const order1 = CartItem(1, 2, "small", "almond");
- const order2 = CartItem(2, 2, "small", "almond");
+ const order2 = CartItem(2, 2, "large", "almond");
console.log("Add 2 orders");
- myCart.setItem(order1);
- myCart.setItem(order2);
+ myCart.addItem(order1);
+ myCart.addItem(order2);
+ console.log("Final cart = ", myCart.getItems());
+ console.log("Add a duplicate order");
+ myCart.addItem(CartItem(1, 1, "small", "almond"));
console.log("Final cart = ", myCart.getItems());
console.log("Remove first order");
From 5eeb0c130dab43009e79bd000d9bc53f76c17d45 Mon Sep 17 00:00:00 2001
From: creme332 <65414576+creme332@users.noreply.github.com>
Date: Sat, 6 Apr 2024 13:22:26 +0400
Subject: [PATCH 10/84] save product info to localStorage when Add To Cart is
clicked
---
src/views/Product.php | 81 ++++++++++++++++++++++++++++---------------
1 file changed, 54 insertions(+), 27 deletions(-)
diff --git a/src/views/Product.php b/src/views/Product.php
index e6981a2..402f86a 100644
--- a/src/views/Product.php
+++ b/src/views/Product.php
@@ -28,32 +28,37 @@
= $product->getDescription() ?>
- Size options
-
- Customizations
-
-
-
+
+
+
+
@@ -114,7 +119,8 @@ class="icon-tabler-discount-check-filled"
}
return <<< BADGE
BADGE;
}
@@ -214,4 +220,25 @@ function recurse(Review $review): void
-
\ No newline at end of file
+
+
+
\ No newline at end of file
From 29ef0cb5c8ab4949366a546e35f41bc3e40224c1 Mon Sep 17 00:00:00 2001
From: creme332 <65414576+creme332@users.noreply.github.com>
Date: Sat, 6 Apr 2024 13:48:42 +0400
Subject: [PATCH 11/84] replace product images with transparent ones
---
public/assets/img/product/americano.jpeg | Bin 69214 -> 0 bytes
public/assets/img/product/americano.png | Bin 0 -> 41971 bytes
public/assets/img/product/cappuccino.jpg | Bin 1415357 -> 0 bytes
public/assets/img/product/cappuccino.webp | Bin 0 -> 77936 bytes
public/assets/img/product/espresso.jpg | Bin 1065963 -> 0 bytes
public/assets/img/product/espresso.webp | Bin 0 -> 45478 bytes
public/assets/img/product/latte.avif | Bin 0 -> 13873 bytes
public/assets/img/product/latte.jpeg | Bin 79249 -> 0 bytes
public/assets/img/product/mocha.png | Bin 136633 -> 1424399 bytes
9 files changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 public/assets/img/product/americano.jpeg
create mode 100644 public/assets/img/product/americano.png
delete mode 100644 public/assets/img/product/cappuccino.jpg
create mode 100644 public/assets/img/product/cappuccino.webp
delete mode 100644 public/assets/img/product/espresso.jpg
create mode 100644 public/assets/img/product/espresso.webp
create mode 100644 public/assets/img/product/latte.avif
delete mode 100644 public/assets/img/product/latte.jpeg
diff --git a/public/assets/img/product/americano.jpeg b/public/assets/img/product/americano.jpeg
deleted file mode 100644
index 5b2caa56765d8d9256fa00a3a9bbe1633cb14812..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 69214
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
O7ooiXZapan9g#qF}(|V{(IBr
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