Skip to content

Commit

Permalink
Merge pull request #156 from PrestaShop/dev
Browse files Browse the repository at this point in the history
Release 5.0.3
  • Loading branch information
Hlavtox authored Mar 6, 2023
2 parents e1b9d03 + 184f874 commit 2a1e4be
Show file tree
Hide file tree
Showing 17 changed files with 197 additions and 218 deletions.
37 changes: 19 additions & 18 deletions ProductComment.php
Original file line number Diff line number Diff line change
Expand Up @@ -95,27 +95,28 @@ public static function getByProduct($id_product, $p = 1, $n = null, $id_customer
$validate = (bool) Configuration::get('PRODUCT_COMMENTS_MODERATE');
$p = (int) $p;
$n = (int) $n;
$id_customer = (int) $id_customer;
if ($p <= 1) {
$p = 1;
}
if ($n != null && $n <= 0) {
$n = 5;
}

$cache_id = 'ProductComment::getByProduct_' . (int) $id_product . '-' . (int) $p . '-' . (int) $n . '-' . (int) $id_customer . '-' . (bool) $validate;
$cache_id = 'ProductComment::getByProduct_' . $id_product . '-' . $p . '-' . $n . '-' . $id_customer . '-' . $validate;
if (!Cache::isStored($cache_id)) {
$result = Db::getInstance((bool) _PS_USE_SQL_SLAVE_)->executeS('
SELECT pc.`id_product_comment`,
(SELECT count(*) FROM `' . _DB_PREFIX_ . 'product_comment_usefulness` pcu WHERE pcu.`id_product_comment` = pc.`id_product_comment` AND pcu.`usefulness` = 1) as total_useful,
(SELECT count(*) FROM `' . _DB_PREFIX_ . 'product_comment_usefulness` pcu WHERE pcu.`id_product_comment` = pc.`id_product_comment`) as total_advice, ' .
((int) $id_customer ? '(SELECT count(*) FROM `' . _DB_PREFIX_ . 'product_comment_usefulness` pcuc WHERE pcuc.`id_product_comment` = pc.`id_product_comment` AND pcuc.id_customer = ' . (int) $id_customer . ') as customer_advice, ' : '') .
((int) $id_customer ? '(SELECT count(*) FROM `' . _DB_PREFIX_ . 'product_comment_report` pcrc WHERE pcrc.`id_product_comment` = pc.`id_product_comment` AND pcrc.id_customer = ' . (int) $id_customer . ') as customer_report, ' : '') . '
(SELECT count(*) FROM `' . _DB_PREFIX_ . 'product_comment_usefulness` pcu WHERE pcu.`id_product_comment` = pc.`id_product_comment` AND pcu.`usefulness` = 1) AS total_useful,
(SELECT count(*) FROM `' . _DB_PREFIX_ . 'product_comment_usefulness` pcu WHERE pcu.`id_product_comment` = pc.`id_product_comment`) AS total_advice, ' .
($id_customer ? '(SELECT count(*) FROM `' . _DB_PREFIX_ . 'product_comment_usefulness` pcuc WHERE pcuc.`id_product_comment` = pc.`id_product_comment` AND pcuc.id_customer = ' . $id_customer . ') AS customer_advice, ' : '') .
($id_customer ? '(SELECT count(*) FROM `' . _DB_PREFIX_ . 'product_comment_report` pcrc WHERE pcrc.`id_product_comment` = pc.`id_product_comment` AND pcrc.id_customer = ' . $id_customer . ') AS customer_report, ' : '') . '
IF(c.id_customer, CONCAT(c.`firstname`, \' \', LEFT(c.`lastname`, 1)), pc.customer_name) customer_name, pc.`content`, pc.`grade`, pc.`date_add`, pc.title
FROM `' . _DB_PREFIX_ . 'product_comment` pc
LEFT JOIN `' . _DB_PREFIX_ . 'customer` c ON c.`id_customer` = pc.`id_customer`
WHERE pc.`id_product` = ' . (int) ($id_product) . ($validate ? ' AND pc.`validate` = 1' : '') . '
WHERE pc.`id_product` = ' . $id_product . ($validate ? ' AND pc.`validate` = 1' : '') . '
ORDER BY pc.`date_add` DESC
' . ($n ? 'LIMIT ' . (int) (($p - 1) * $n) . ', ' . (int) ($n) : ''));
' . ($n ? 'LIMIT ' . (($p - 1) * $n) . ', ' . $n : ''));
Cache::store($cache_id, $result);
}

Expand Down Expand Up @@ -169,16 +170,16 @@ public static function getGradeByProduct($id_product, $id_lang)
LEFT JOIN `' . _DB_PREFIX_ . 'product_comment_grade` pcg ON (pcg.`id_product_comment` = pc.`id_product_comment`)
LEFT JOIN `' . _DB_PREFIX_ . 'product_comment_criterion` pcc ON (pcc.`id_product_comment_criterion` = pcg.`id_product_comment_criterion`)
LEFT JOIN `' . _DB_PREFIX_ . 'product_comment_criterion_lang` pccl ON (pccl.`id_product_comment_criterion` = pcg.`id_product_comment_criterion`)
WHERE pc.`id_product` = ' . (int) $id_product . '
AND pccl.`id_lang` = ' . (int) $id_lang .
WHERE pc.`id_product` = ' . $id_product . '
AND pccl.`id_lang` = ' . $id_lang .
($validate ? ' AND pc.`validate` = 1' : ''));
}

public static function getRatings($id_product)
{
$validate = Configuration::get('PRODUCT_COMMENTS_MODERATE');

$sql = 'SELECT (SUM(pc.`grade`) / COUNT(pc.`grade`)) AS avg,
$sql = 'SELECT AVG(pc.`grade`) AS avg,
MIN(pc.`grade`) AS min,
MAX(pc.`grade`) AS max
FROM `' . _DB_PREFIX_ . 'product_comment` pc
Expand All @@ -194,7 +195,7 @@ public static function getAverageGrade($id_product)
$validate = Configuration::get('PRODUCT_COMMENTS_MODERATE');

return Db::getInstance((bool) _PS_USE_SQL_SLAVE_)->getRow('
SELECT (SUM(pc.`grade`) / COUNT(pc.`grade`)) AS grade
SELECT AVG(pc.`grade`) AS grade
FROM `' . _DB_PREFIX_ . 'product_comment` pc
WHERE pc.`id_product` = ' . (int) $id_product . '
AND pc.`deleted` = 0' .
Expand Down Expand Up @@ -241,12 +242,12 @@ public static function getCommentNumber($id_product)
return false;
}
$validate = (bool) Configuration::get('PRODUCT_COMMENTS_MODERATE');
$cache_id = 'ProductComment::getCommentNumber_' . (int) $id_product . '-' . $validate;
$cache_id = 'ProductComment::getCommentNumber_' . $id_product . '-' . $validate;
if (!Cache::isStored($cache_id)) {
$result = (int) Db::getInstance((bool) _PS_USE_SQL_SLAVE_)->getValue('
SELECT COUNT(`id_product_comment`) AS "nbr"
FROM `' . _DB_PREFIX_ . 'product_comment` pc
WHERE `id_product` = ' . (int) ($id_product) . ($validate ? ' AND `validate` = 1' : ''));
WHERE `id_product` = ' . $id_product . ($validate ? ' AND `validate` = 1' : ''));
Cache::store($cache_id, (string) $result);
}

Expand All @@ -268,7 +269,7 @@ public static function getGradedCommentNumber($id_product)
$result = Db::getInstance((bool) _PS_USE_SQL_SLAVE_)->getRow('
SELECT COUNT(pc.`id_product`) AS nbr
FROM `' . _DB_PREFIX_ . 'product_comment` pc
WHERE `id_product` = ' . (int) ($id_product) . ($validate == '1' ? ' AND `validate` = 1' : '') . '
WHERE `id_product` = ' . $id_product . ($validate == '1' ? ' AND `validate` = 1' : '') . '
AND `grade` > 0');

return (int) ($result['nbr']);
Expand Down Expand Up @@ -348,7 +349,7 @@ public function validate($validate = '1')
$success = (Db::getInstance()->execute('
UPDATE `' . _DB_PREFIX_ . 'product_comment` SET
`validate` = ' . (int) $validate . '
WHERE `id_product_comment` = ' . (int) $this->id));
WHERE `id_product_comment` = ' . $this->id));

Hook::exec('actionObjectProductCommentValidateAfter', ['object' => $this]);

Expand Down Expand Up @@ -381,7 +382,7 @@ public static function deleteGrades($id_product_comment)

return Db::getInstance()->execute('
DELETE FROM `' . _DB_PREFIX_ . 'product_comment_grade`
WHERE `id_product_comment` = ' . (int) $id_product_comment);
WHERE `id_product_comment` = ' . $id_product_comment);
}

/**
Expand All @@ -397,7 +398,7 @@ public static function deleteReports($id_product_comment)

return Db::getInstance()->execute('
DELETE FROM `' . _DB_PREFIX_ . 'product_comment_report`
WHERE `id_product_comment` = ' . (int) $id_product_comment);
WHERE `id_product_comment` = ' . $id_product_comment);
}

/**
Expand All @@ -413,7 +414,7 @@ public static function deleteUsefulness($id_product_comment)

return Db::getInstance()->execute('
DELETE FROM `' . _DB_PREFIX_ . 'product_comment_usefulness`
WHERE `id_product_comment` = ' . (int) $id_product_comment);
WHERE `id_product_comment` = ' . $id_product_comment);
}

/**
Expand Down
16 changes: 8 additions & 8 deletions ProductCommentCriterion.php
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ public function addProduct($id_product)

return Db::getInstance()->execute('
INSERT INTO `' . _DB_PREFIX_ . 'product_comment_criterion_product` (`id_product_comment_criterion`, `id_product`)
VALUES(' . (int) $this->id . ',' . (int) $id_product . ')
VALUES(' . (int) $this->id . ',' . $id_product . ')
');
}

Expand All @@ -122,7 +122,7 @@ public function addCategory($id_category)

return Db::getInstance()->execute('
INSERT INTO `' . _DB_PREFIX_ . 'product_comment_criterion_category` (`id_product_comment_criterion`, `id_category`)
VALUES(' . (int) $this->id . ',' . (int) $id_category . ')
VALUES(' . (int) $this->id . ',' . $id_category . ')
');
}

Expand All @@ -145,7 +145,7 @@ public function addGrade($id_product_comment, $grade)
return Db::getInstance()->execute('
INSERT INTO `' . _DB_PREFIX_ . 'product_comment_grade`
(`id_product_comment`, `id_product_comment_criterion`, `grade`) VALUES(
' . (int) ($id_product_comment) . ',
' . $id_product_comment . ',
' . (int) $this->id . ',
' . (int) ($grade) . ')');
}
Expand All @@ -169,20 +169,20 @@ public static function getByProduct($id_product, $id_lang)
$alias = 'ps';
}

$cache_id = 'ProductCommentCriterion::getByProduct_' . (int) $id_product . '-' . (int) $id_lang;
$cache_id = 'ProductCommentCriterion::getByProduct_' . $id_product . '-' . $id_lang;
if (!Cache::isStored($cache_id)) {
$result = Db::getInstance()->executeS('
SELECT pcc.`id_product_comment_criterion`, pccl.`name`
FROM `' . _DB_PREFIX_ . 'product_comment_criterion` pcc
LEFT JOIN `' . _DB_PREFIX_ . 'product_comment_criterion_lang` pccl
ON (pcc.id_product_comment_criterion = pccl.id_product_comment_criterion)
LEFT JOIN `' . _DB_PREFIX_ . 'product_comment_criterion_product` pccp
ON (pcc.`id_product_comment_criterion` = pccp.`id_product_comment_criterion` AND pccp.`id_product` = ' . (int) $id_product . ')
ON (pcc.`id_product_comment_criterion` = pccp.`id_product_comment_criterion` AND pccp.`id_product` = ' . $id_product . ')
LEFT JOIN `' . _DB_PREFIX_ . 'product_comment_criterion_category` pccc
ON (pcc.`id_product_comment_criterion` = pccc.`id_product_comment_criterion`)
LEFT JOIN `' . _DB_PREFIX_ . 'product' . $table . '` ' . $alias . '
ON (' . $alias . '.id_category_default = pccc.id_category AND ' . $alias . '.id_product = ' . (int) $id_product . ')
WHERE pccl.`id_lang` = ' . (int) ($id_lang) . '
ON (' . $alias . '.id_category_default = pccc.id_category AND ' . $alias . '.id_product = ' . $id_product . ')
WHERE pccl.`id_lang` = ' . $id_lang . '
AND (
pccp.id_product IS NOT NULL
OR ps.id_product IS NOT NULL
Expand Down Expand Up @@ -212,7 +212,7 @@ public static function getCriterions($id_lang, $type = false, $active = false)
SELECT pcc.`id_product_comment_criterion`, pcc.id_product_comment_criterion_type, pccl.`name`, pcc.active
FROM `' . _DB_PREFIX_ . 'product_comment_criterion` pcc
JOIN `' . _DB_PREFIX_ . 'product_comment_criterion_lang` pccl ON (pcc.id_product_comment_criterion = pccl.id_product_comment_criterion)
WHERE pccl.`id_lang` = ' . (int) $id_lang . ($active ? ' AND active = 1' : '') . ($type ? ' AND id_product_comment_criterion_type = ' . (int) $type : '') . '
WHERE pccl.`id_lang` = ' . $id_lang . ($active ? ' AND active = 1' : '') . ($type ? ' AND id_product_comment_criterion_type = ' . (int) $type : '') . '
ORDER BY pccl.`name` ASC';
$criterions = Db::getInstance()->executeS($sql);

Expand Down
2 changes: 1 addition & 1 deletion config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<module>
<name>productcomments</name>
<displayName><![CDATA[Product Comments]]></displayName>
<version><![CDATA[5.0.2]]></version>
<version><![CDATA[5.0.3]]></version>
<description><![CDATA[Allows users to post reviews and rate products on specific criteria.]]></description>
<author><![CDATA[PrestaShop]]></author>
<tab><![CDATA[front_office_features]]></tab>
Expand Down
36 changes: 27 additions & 9 deletions controllers/front/ListComments.php
Original file line number Diff line number Diff line change
Expand Up @@ -64,20 +64,20 @@ public function display()
$productComment['content'] = htmlentities($productComment['content']);
$productComment['date_add'] = $dateFormatter->format($dateAdd);

if ($isLastNameAnonymous && isset($productComment['lastname'])) {
$productComment['lastname'] = substr($productComment['lastname'], 0, 1) . '.';
}
// The customer has firstname and lastname, for guest we only have customer_name field
$productComment['customer_name'] = !empty($productComment['customer_name'])
? $productComment['customer_name']
: $productComment['firstname'] . ' ' . $productComment['lastname'];

// if registered customer : return customer first and last name instead of using customer_name
if (!empty($productComment['lastname'])) {
$productComment['customer_name'] = htmlentities($productComment['firstname'] . ' ' . $productComment['lastname']);
} else {
$productComment['customer_name'] = htmlentities($productComment['customer_name']);
if ($isLastNameAnonymous) {
$productComment['customer_name'] = $this->anonymizeName($productComment['customer_name']);
}

$productComment['customer_name'] = htmlentities($productComment['customer_name']);

$usefulness = $productCommentRepository->getProductCommentUsefulness($productComment['id_product_comment']);
$productComment = array_merge($productComment, $usefulness);
if (empty($productComment['customer_name']) && !isset($productComment['firstname']) && !isset($productComment['lastname'])) {
if (empty($productComment['customer_name'])) {
$productComment['customer_name'] = $this->trans('Deleted account', [], 'Modules.Productcomments.Shop');
}

Expand All @@ -91,4 +91,22 @@ public function display()
)
);
}

/**
* Anonymize the user's last name. Display only initials, e.g. John D.
*
* @param string $name
*/
private function anonymizeName($name)
{
$parts = explode(' ', $name);
$firstName = $parts[0];
$lastName = count($parts) > 1 ? array_pop($parts) : '';
$name = $firstName;
if (!empty($lastName)) {
$name .= ' ' . mb_substr($lastName, 0, 1, 'UTF-8') . '.';
}

return $name;
}
}
Binary file removed logo.gif
Binary file not shown.
Loading

0 comments on commit 2a1e4be

Please sign in to comment.