src/EventListener/AdminListener.php line 25

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Enterprise License (PEL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  *  @license    http://www.pimcore.org/license     GPLv3 and PEL
  13.  */
  14. namespace App\EventListener;
  15. use Pimcore\Event\Model\ElementEventInterface;
  16. use Pimcore\Event\Model\DataObjectEvent;
  17. use Pimcore\Model\DataObject\Tag;
  18. use Pimcore\Model\DataObject\TagCategory;
  19. class AdminListener
  20. {
  21.     public function onTagAddOrUpdate(ElementEventInterface $e) {
  22.         if ($e instanceof DataObjectEvent) {
  23.             $tag $e->getObject();
  24.             if (!($tag instanceof Tag)) {
  25.                 return true;
  26.             }
  27.             $parentOfTag $tag->getParent();
  28.             
  29.             if ($parentOfTag instanceof TagCategory) {
  30.                 $parentsTags $parentOfTag->getTags();
  31.                 $parentsTags[] = $tag;
  32.                 try {
  33.                     $parentOfTag->setTags($parentsTags);
  34.                     $parentOfTag->save();
  35.                 } catch (\Throwable $th) {
  36.                     // catch and do nothing if tag was already in there
  37.                 }
  38.             }
  39.         }
  40.     }
  41. }