release 0.267: front layout/basket fixes and product redirect hardening
This commit is contained in:
@@ -3,6 +3,38 @@ namespace admin\factory;
|
||||
use shop\Product;
|
||||
class ShopProduct
|
||||
{
|
||||
private static function seoLinkUsedByOtherProduct( int $product_id, string $lang_id, string $seo_link ): bool
|
||||
{
|
||||
global $mdb;
|
||||
|
||||
if ( !$seo_link )
|
||||
return false;
|
||||
|
||||
return (bool) $mdb -> count( 'pp_shop_products_langs', [
|
||||
'AND' => [
|
||||
'lang_id' => $lang_id,
|
||||
'seo_link' => $seo_link,
|
||||
'product_id[!]' => $product_id,
|
||||
],
|
||||
] );
|
||||
}
|
||||
|
||||
private static function removeConflictingRedirectSources( int $product_id, string $lang_id, string $from ): void
|
||||
{
|
||||
global $mdb;
|
||||
|
||||
if ( !$from )
|
||||
return;
|
||||
|
||||
$mdb -> delete( 'pp_redirects', [
|
||||
'AND' => [
|
||||
'from' => $from,
|
||||
'lang_id' => $lang_id,
|
||||
'product_id[!]' => $product_id,
|
||||
],
|
||||
] );
|
||||
}
|
||||
|
||||
// count_product
|
||||
static public function count_product( $where = null )
|
||||
{
|
||||
@@ -1010,18 +1042,30 @@ class ShopProduct
|
||||
|
||||
if ( $new_seo_link !== $current_seo_link and $current_seo_link != '' )
|
||||
{
|
||||
if ( !$mdb -> count( 'pp_redirects', [ 'from' => $current_seo_link, 'to' => $new_seo_link, 'lang_id' => $lg['id'], 'product_id' => $product_id ] ) )
|
||||
if ( $mdb -> count( 'pp_redirects', [ 'from' => $new_seo_link, 'to' => $current_seo_link, 'lang_id' => $lg['id'], 'product_id' => $product_id ] ) )
|
||||
$mdb -> delete( 'pp_redirects', [ 'from' => $new_seo_link, 'to' => $current_seo_link, 'lang_id' => $lg['id'], 'product_id' => $product_id ] );
|
||||
|
||||
$mdb -> delete( 'pp_redirects', [
|
||||
'AND' => [
|
||||
'product_id' => $product_id,
|
||||
'lang_id' => $lg['id'],
|
||||
'from' => $current_seo_link,
|
||||
'to[!]' => $new_seo_link,
|
||||
],
|
||||
] );
|
||||
|
||||
if ( !self::seoLinkUsedByOtherProduct( (int) $product_id, (string) $lg['id'], (string) $current_seo_link ) )
|
||||
{
|
||||
if ( $mdb -> count( 'pp_redirects', [ 'from' => $new_seo_link, 'to' => $current_seo_link, 'lang_id' => $lg['id'], 'product_id' => $product_id ] ) )
|
||||
$mdb -> delete( 'pp_redirects', [ 'from' => $new_seo_link, 'to' => $current_seo_link, 'lang_id' => $lg['id'], 'product_id' => $product_id ] );
|
||||
else
|
||||
self::removeConflictingRedirectSources( (int) $product_id, (string) $lg['id'], (string) $current_seo_link );
|
||||
|
||||
if ( !$mdb -> count( 'pp_redirects', [ 'from' => $current_seo_link, 'to' => $new_seo_link, 'lang_id' => $lg['id'], 'product_id' => $product_id ] ) )
|
||||
{
|
||||
if ( \S::canAddRedirect( $current_seo_link, $new_seo_link ) )
|
||||
if ( \S::canAddRedirect( $current_seo_link, $new_seo_link, $lg['id'] ) )
|
||||
$mdb -> insert( 'pp_redirects', [ 'from' => $current_seo_link, 'to' => $new_seo_link, 'lang_id' => $lg['id'], 'product_id' => $product_id ] );
|
||||
else
|
||||
$mdb -> delete( 'pp_redirects', [ 'product_id' => $product_id, 'lang_id' => $lg['id'] ] );
|
||||
}
|
||||
}
|
||||
else
|
||||
$mdb -> delete( 'pp_redirects', [ 'AND' => [ 'product_id' => $product_id, 'lang_id' => $lg['id'], 'from' => $current_seo_link ] ] );
|
||||
}
|
||||
|
||||
$mdb -> update( 'pp_shop_products_langs', [
|
||||
|
||||
Reference in New Issue
Block a user