(REF) APIv4 FieldSpec - Extract OptionsSpecTrait (options, optionsCallback)
authorTim Otten <totten@civicrm.org>
Fri, 16 Jul 2021 06:30:04 +0000 (23:30 -0700)
committerTim Otten <totten@civicrm.org>
Fri, 16 Jul 2021 06:38:24 +0000 (23:38 -0700)
Civi/Api4/Service/Spec/FieldSpec.php
Civi/Schema/Traits/OptionsSpecTrait.php [new file with mode: 0644]

index ceefef3a4c38b2e9ca9d5740739398da968db2ee..98390294169fbb4eb079275e88e8bd7b43b7af29 100644 (file)
@@ -15,6 +15,7 @@ namespace Civi\Api4\Service\Spec;
 use Civi\Schema\Traits\BasicSpecTrait;
 use Civi\Schema\Traits\DataTypeSpecTrait;
 use Civi\Schema\Traits\GuiSpecTrait;
+use Civi\Schema\Traits\OptionsSpecTrait;
 use Civi\Schema\Traits\SqlSpecTrait;
 
 class FieldSpec {
@@ -25,6 +26,9 @@ class FieldSpec {
   // DataTypeSpecTrait: dataType, serialize, fkEntity
   use DataTypeSpecTrait;
 
+  // OptionsSpecTrait: options, optionsCallback
+  use OptionsSpecTrait;
+
   // GuiSpecTrait: label, inputType, inputAttrs, helpPre, helpPost
   use GuiSpecTrait;
 
@@ -56,16 +60,6 @@ class FieldSpec {
    */
   public $requiredIf;
 
-  /**
-   * @var array|bool
-   */
-  public $options;
-
-  /**
-   * @var callable
-   */
-  private $optionsCallback;
-
   /**
    * @var array
    */
@@ -223,44 +217,6 @@ class FieldSpec {
     return $this;
   }
 
-  /**
-   * @param array $values
-   * @param array|bool $return
-   * @param bool $checkPermissions
-   * @return array
-   */
-  public function getOptions($values = [], $return = TRUE, $checkPermissions = TRUE) {
-    if (!isset($this->options)) {
-      if ($this->optionsCallback) {
-        $this->options = ($this->optionsCallback)($this, $values, $return, $checkPermissions);
-      }
-      else {
-        $this->options = FALSE;
-      }
-    }
-    return $this->options;
-  }
-
-  /**
-   * @param array|bool $options
-   *
-   * @return $this
-   */
-  public function setOptions($options) {
-    $this->options = $options;
-    return $this;
-  }
-
-  /**
-   * @param callable $callback
-   *
-   * @return $this
-   */
-  public function setOptionsCallback($callback) {
-    $this->optionsCallback = $callback;
-    return $this;
-  }
-
   /**
    * Gets all public variables, converted to snake_case
    *
diff --git a/Civi/Schema/Traits/OptionsSpecTrait.php b/Civi/Schema/Traits/OptionsSpecTrait.php
new file mode 100644 (file)
index 0000000..13a2fa5
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC. All rights reserved.                        |
+ |                                                                    |
+ | This work is published under the GNU AGPLv3 license with some      |
+ | permitted exceptions and without any warranty. For full license    |
+ | and copyright information, see https://civicrm.org/licensing       |
+ +--------------------------------------------------------------------+
+ */
+
+namespace Civi\Schema\Traits;
+
+/**
+ * Describe what values are allowed to be stored in this field.
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC https://civicrm.org/licensing
+ */
+trait OptionsSpecTrait {
+
+  /**
+   * @var array|bool
+   */
+  public $options;
+
+  /**
+   * @var callable
+   */
+  private $optionsCallback;
+
+  /**
+   * @param array $values
+   * @param array|bool $return
+   * @param bool $checkPermissions
+   *
+   * @return array
+   */
+  public function getOptions($values = [], $return = TRUE, $checkPermissions = TRUE) {
+    if (!isset($this->options)) {
+      if ($this->optionsCallback) {
+        $this->options = ($this->optionsCallback)($this, $values, $return, $checkPermissions);
+      }
+      else {
+        $this->options = FALSE;
+      }
+    }
+    return $this->options;
+  }
+
+  /**
+   * @param array|bool $options
+   *
+   * @return $this
+   */
+  public function setOptions($options) {
+    $this->options = $options;
+    return $this;
+  }
+
+  /**
+   * @param callable $callback
+   *
+   * @return $this
+   */
+  public function setOptionsCallback($callback) {
+    $this->optionsCallback = $callback;
+    return $this;
+  }
+
+}