[REF] Fix Order class to not reload if already loaded
authoreileen <emcnaughton@wikimedia.org>
Sun, 17 Jan 2021 20:56:47 +0000 (09:56 +1300)
committereileen <emcnaughton@wikimedia.org>
Sun, 17 Jan 2021 20:56:47 +0000 (09:56 +1300)
CRM/Financial/BAO/Order.php

index ffe8af8ff9737937e1ebfa2a6a836cb53a683db6..2779f003a2274556765ec2c227abeabdccbcd035 100644 (file)
@@ -176,13 +176,21 @@ class CRM_Financial_BAO_Order {
    * @param int $id
    *
    * @return array
-   * @throws \CiviCRM_API3_Exception
    */
   public function getPriceFieldSpec(int $id) :array {
-    if (!isset($this->priceFieldMetadata[$id])) {
+    return $this->getPriceFieldsMetadata()[$id];
+  }
+
+  /**
+   * Get the metadata for the fields in the price set.
+   *
+   * @return array
+   */
+  public function getPriceFieldsMetadata(): array {
+    if (empty($this->priceFieldMetadata)) {
       $this->priceFieldMetadata = CRM_Price_BAO_PriceSet::getCachedPriceSetDetail($this->getPriceSetID())['fields'];
     }
-    return $this->priceFieldMetadata[$id];
+    return $this->priceFieldMetadata;
   }
 
   /**
@@ -193,7 +201,7 @@ class CRM_Financial_BAO_Order {
    *
    * @param array $input
    */
-  public function setPriceSelectionFromUnfilteredInput(array $input) {
+  public function setPriceSelectionFromUnfilteredInput(array $input): void {
     foreach ($input as $fieldName => $value) {
       if (strpos($fieldName, 'price_') === 0) {
         $fieldID = substr($fieldName, 6);