Page.php 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\CmsUrlRewrite\Plugin\Cms\Model\ResourceModel;
  7. use Magento\UrlRewrite\Model\UrlPersistInterface;
  8. use Magento\CmsUrlRewrite\Model\CmsPageUrlPathGenerator;
  9. use Magento\CmsUrlRewrite\Model\CmsPageUrlRewriteGenerator;
  10. use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
  11. use Magento\Framework\Model\AbstractModel;
  12. use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
  13. /**
  14. * Before save and around delete plugin for \Magento\Cms\Model\ResourceModel\Page:
  15. * - autogenerates url_key if the merchant didn't fill this field
  16. * - remove all url rewrites for cms page on delete
  17. */
  18. class Page
  19. {
  20. /**
  21. * @var \Magento\CmsUrlRewrite\Model\CmsPageUrlPathGenerator
  22. */
  23. protected $cmsPageUrlPathGenerator;
  24. /**
  25. * @var UrlPersistInterface
  26. */
  27. protected $urlPersist;
  28. /**
  29. * @param CmsPageUrlPathGenerator $cmsPageUrlPathGenerator
  30. * @param UrlPersistInterface $urlPersist
  31. */
  32. public function __construct(
  33. CmsPageUrlPathGenerator $cmsPageUrlPathGenerator,
  34. UrlPersistInterface $urlPersist
  35. ) {
  36. $this->cmsPageUrlPathGenerator = $cmsPageUrlPathGenerator;
  37. $this->urlPersist = $urlPersist;
  38. }
  39. /**
  40. * Before save handler
  41. *
  42. * @param \Magento\Cms\Model\ResourceModel\Page $subject
  43. * @param \Magento\Framework\Model\AbstractModel $object
  44. *
  45. * @return void
  46. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  47. */
  48. public function beforeSave(
  49. \Magento\Cms\Model\ResourceModel\Page $subject,
  50. \Magento\Framework\Model\AbstractModel $object
  51. ) {
  52. /** @var $object \Magento\Cms\Model\Page */
  53. $urlKey = $object->getData('identifier');
  54. if ($urlKey === '' || $urlKey === null) {
  55. $object->setData('identifier', $this->cmsPageUrlPathGenerator->generateUrlKey($object));
  56. }
  57. }
  58. /**
  59. * On delete handler to remove related url rewrites
  60. *
  61. * @param \Magento\Cms\Model\ResourceModel\Page $subject
  62. * @param AbstractDb $result
  63. * @param AbstractModel $page
  64. * @return AbstractDb
  65. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  66. */
  67. public function afterDelete(
  68. \Magento\Cms\Model\ResourceModel\Page $subject,
  69. AbstractDb $result,
  70. AbstractModel $page
  71. ) {
  72. if ($page->isDeleted()) {
  73. $this->urlPersist->deleteByData(
  74. [
  75. UrlRewrite::ENTITY_ID => $page->getId(),
  76. UrlRewrite::ENTITY_TYPE => CmsPageUrlRewriteGenerator::ENTITY_TYPE,
  77. ]
  78. );
  79. }
  80. return $result;
  81. }
  82. }