(REF) Civi/API/Event - Extract RequestTrait
authorTim Otten <totten@civicrm.org>
Fri, 4 Jun 2021 04:38:04 +0000 (21:38 -0700)
committerTim Otten <totten@civicrm.org>
Mon, 7 Jun 2021 03:18:52 +0000 (20:18 -0700)
Civi/API/Event/Event.php
Civi/API/Event/PrepareEvent.php
Civi/API/Event/RequestTrait.php [new file with mode: 0644]
Civi/API/Event/ResolveEvent.php

index 9a68b743390abc368a10c53004ea028b197cab85..c5ad2cc92b658bd52b813d3c3c7605dc59733046 100644 (file)
@@ -17,6 +17,8 @@ namespace Civi\API\Event;
  */
 class Event extends \Symfony\Component\EventDispatcher\Event {
 
+  use RequestTrait;
+
   /**
    * @var \Civi\API\Kernel
    */
@@ -28,14 +30,6 @@ class Event extends \Symfony\Component\EventDispatcher\Event {
    */
   protected $apiProvider;
 
-  /**
-   * @var array
-   *   The full description of the API request.
-   *
-   * @see \Civi\API\Request::create
-   */
-  protected $apiRequest;
-
   /**
    * @param \Civi\API\Provider\ProviderInterface $apiProvider
    *   The API responsible for executing the request.
@@ -46,7 +40,7 @@ class Event extends \Symfony\Component\EventDispatcher\Event {
   public function __construct($apiProvider, $apiRequest, $apiKernel) {
     $this->apiKernel = $apiKernel;
     $this->apiProvider = $apiProvider;
-    $this->apiRequest = $apiRequest;
+    $this->setApiRequest($apiRequest);
   }
 
   /**
@@ -65,24 +59,4 @@ class Event extends \Symfony\Component\EventDispatcher\Event {
     return $this->apiProvider;
   }
 
-  /**
-   * @return array
-   */
-  public function getApiRequest() {
-    return $this->apiRequest;
-  }
-
-  /**
-   * Create a brief string identifying the entity/action. Useful for
-   * pithy matching/switching.
-   *
-   * Ex: if ($e->getApiRequestSig() === '3.contact.get') { ... }
-   *
-   * @return string
-   *   Ex: '3.contact.get'
-   */
-  public function getApiRequestSig() {
-    return mb_strtolower($this->apiRequest['version'] . '.' . $this->apiRequest['entity'] . '.' . $this->apiRequest['action']);
-  }
-
 }
index 1c6576173c89598a17b99a14ad5df2f345836ff6..452ee4c9c2674b0f4002c6cdc483e29f940abc6b 100644 (file)
@@ -26,11 +26,11 @@ class PrepareEvent extends Event {
   /**
    * @param array $apiRequest
    *   The full description of the API request.
-   * @return PrepareEvent
+   * @return static
    */
   public function setApiRequest($apiRequest) {
-    $this->apiRequest = $apiRequest;
-    return $this;
+    // Elevate from 'protected' to 'public'.
+    return parent::setApiRequest($apiRequest);
   }
 
   /**
diff --git a/Civi/API/Event/RequestTrait.php b/Civi/API/Event/RequestTrait.php
new file mode 100644 (file)
index 0000000..b216c5e
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+namespace Civi\API\Event;
+
+/**
+ * Trait RequestTrait
+ * @package Civi\API\Event
+ *
+ * Most events emitted by the API subsystem should include information about the active API request.
+ */
+trait RequestTrait {
+
+  /**
+   * @var \Civi\Api4\Generic\AbstractAction|array
+   *   The full description of the API request.
+   *
+   * @see \Civi\API\Request::create
+   */
+  protected $apiRequest;
+
+  /**
+   * @return \Civi\Api4\Generic\AbstractAction|array
+   */
+  public function getApiRequest() {
+    return $this->apiRequest;
+  }
+
+  /**
+   * @param \Civi\Api4\Generic\AbstractAction|array $apiRequest
+   *   The full description of the API request.
+   * @return static
+   */
+  protected function setApiRequest($apiRequest) {
+    $this->apiRequest = $apiRequest;
+    return $this;
+  }
+
+  /**
+   * Create a brief string identifying the entity/action. Useful for
+   * pithy matching/switching.
+   *
+   * Ex: if ($e->getApiRequestSig() === '3.contact.get') { ... }
+   *
+   * @return string
+   *   Ex: '3.contact.get'
+   */
+  public function getApiRequestSig(): string {
+    return mb_strtolower($this->apiRequest['version'] . '.' . $this->apiRequest['entity'] . '.' . $this->apiRequest['action']);
+  }
+
+  /**
+   * @return string
+   *   Ex: 'Contact', 'Activity'
+   */
+  public function getEntityName(): string {
+    return $this->apiRequest['entity'];
+  }
+
+  /**
+   * @return string
+   *   Ex: 'create', 'update'
+   */
+  public function getActionName(): string {
+    return $this->apiRequest['action'];
+  }
+
+}
index 8d574a0327829161e19e0a3e8abeaf45953fd6d9..cd2cba839eb4166a90bb8c0a52a9ee57ad3deaa2 100644 (file)
@@ -46,7 +46,8 @@ class ResolveEvent extends Event {
    *   The full description of the API request.
    */
   public function setApiRequest($apiRequest) {
-    $this->apiRequest = $apiRequest;
+    // Elevate from 'protected' to 'public'.
+    return parent::setApiRequest($apiRequest);
   }
 
 }