FlexObjectTrait.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * @package Grav\Common\Flex
  5. *
  6. * @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved.
  7. * @license MIT License; see LICENSE file for details.
  8. */
  9. namespace Grav\Common\Flex\Traits;
  10. use RocketTheme\Toolbox\Event\Event;
  11. /**
  12. * Trait FlexObjectTrait
  13. * @package Grav\Common\Flex\Traits
  14. */
  15. trait FlexObjectTrait
  16. {
  17. use FlexCommonTrait;
  18. /**
  19. * @param string $name
  20. * @param object|null $event
  21. * @return $this
  22. */
  23. public function triggerEvent(string $name, $event = null)
  24. {
  25. $events = [
  26. 'onRender' => 'onFlexObjectRender',
  27. 'onBeforeSave' => 'onFlexObjectBeforeSave',
  28. 'onAfterSave' => 'onFlexObjectAfterSave',
  29. 'onBeforeDelete' => 'onFlexObjectBeforeDelete',
  30. 'onAfterDelete' => 'onFlexObjectAfterDelete'
  31. ];
  32. if (null === $event) {
  33. $event = new Event([
  34. 'type' => 'flex',
  35. 'directory' => $this->getFlexDirectory(),
  36. 'object' => $this
  37. ]);
  38. }
  39. if (isset($events['name'])) {
  40. $name = $events['name'];
  41. } elseif (strpos($name, 'onFlexObject') !== 0 && strpos($name, 'on') === 0) {
  42. $name = 'onFlexObject' . substr($name, 2);
  43. }
  44. $container = $this->getContainer();
  45. if ($event instanceof Event) {
  46. $container->fireEvent($name, $event);
  47. } else {
  48. $container->dispatchEvent($event);
  49. }
  50. return $this;
  51. }
  52. }