Skip to content

Commit

Permalink
#5929: [Forwardport] Saving Product does not update URL rewrite.
Browse files Browse the repository at this point in the history
  • Loading branch information
p-bystritsky committed Nov 12, 2018
1 parent 072ef37 commit 284daec
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,15 @@
namespace Magento\CatalogUrlRewrite\Observer;

use Magento\Catalog\Model\Product;
use Magento\CatalogUrlRewrite\Model\ProductUrlPathGenerator;
use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
use Magento\Framework\App\ObjectManager;
use Magento\UrlRewrite\Model\UrlPersistInterface;
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
use Magento\Framework\Event\ObserverInterface;

/**
* Class ProductProcessUrlRewriteSavingObserver
*/
class ProductProcessUrlRewriteSavingObserver implements ObserverInterface
{
/**
Expand All @@ -23,22 +27,33 @@ class ProductProcessUrlRewriteSavingObserver implements ObserverInterface
*/
private $urlPersist;

/**
* @var ProductUrlPathGenerator
*/
private $productUrlPathGenerator;

/**
* @param ProductUrlRewriteGenerator $productUrlRewriteGenerator
* @param UrlPersistInterface $urlPersist
* @param ProductUrlPathGenerator|null $productUrlPathGenerator
*/
public function __construct(
ProductUrlRewriteGenerator $productUrlRewriteGenerator,
UrlPersistInterface $urlPersist
UrlPersistInterface $urlPersist,
ProductUrlPathGenerator $productUrlPathGenerator = null
) {
$this->productUrlRewriteGenerator = $productUrlRewriteGenerator;
$this->urlPersist = $urlPersist;
$this->productUrlPathGenerator = $productUrlPathGenerator ?: ObjectManager::getInstance()
->get(ProductUrlPathGenerator::class);
}

/**
* Generate urls for UrlRewrite and save it in storage
*
* @param \Magento\Framework\Event\Observer $observer
* @return void
* @throws \Magento\UrlRewrite\Model\Exception\UrlAlreadyExistsException
*/
public function execute(\Magento\Framework\Event\Observer $observer)
{
Expand All @@ -51,6 +66,8 @@ public function execute(\Magento\Framework\Event\Observer $observer)
|| $product->dataHasChangedFor('visibility')
) {
if ($product->isVisibleInSiteVisibility()) {
$product->unsUrlPath();
$product->setUrlPath($this->productUrlPathGenerator->getUrlPath($product));
$this->urlPersist->replace($this->productUrlRewriteGenerator->generate($product));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ public function testUrlKeyHasChangedInGlobalContext()

$product->setData('save_rewrites_history', true);
$product->setUrlKey('new-url');
$product->setUrlPath('new-path');
$product->save();

$expected = [
Expand Down Expand Up @@ -152,6 +153,7 @@ public function testUrlKeyHasChangedInStoreviewContextWithPermanentRedirection()

$product->setData('save_rewrites_history', true);
$product->setUrlKey('new-url');
$product->setUrlPath('new-path');
$product->save();

$expected = [
Expand Down Expand Up @@ -207,6 +209,7 @@ public function testUrlKeyHasChangedInStoreviewContextWithoutPermanentRedirectio

$product->setData('save_rewrites_history', false);
$product->setUrlKey('new-url');
$product->setUrlPath('new-path');
$product->save();

$expected = [
Expand Down

0 comments on commit 284daec

Please sign in to comment.