OptionGroup - Use standard delete function which calls hooks
authorColeman Watts <coleman@civicrm.org>
Thu, 2 Dec 2021 20:01:44 +0000 (15:01 -0500)
committerColeman Watts <coleman@civicrm.org>
Sat, 4 Dec 2021 13:49:50 +0000 (08:49 -0500)
CRM/Core/BAO/OptionGroup.php
tests/phpunit/api/v4/Action/BaseCustomValueTest.php

index ff972d984227fbdf3f2e02bcd263a84028ff3e86..12da9c3d3f152b04970e6a805b64b4e82e72f4fe 100644 (file)
@@ -14,7 +14,7 @@
  * @package CRM
  * @copyright CiviCRM LLC https://civicrm.org/licensing
  */
-class CRM_Core_BAO_OptionGroup extends CRM_Core_DAO_OptionGroup {
+class CRM_Core_BAO_OptionGroup extends CRM_Core_DAO_OptionGroup implements \Civi\Test\HookInterface {
 
   /**
    * Class constructor.
@@ -92,18 +92,25 @@ class CRM_Core_BAO_OptionGroup extends CRM_Core_DAO_OptionGroup {
   /**
    * Delete Option Group.
    *
+   * @deprecated
    * @param int $optionGroupId
-   *   Id of the Option Group to be deleted.
    */
   public static function del($optionGroupId) {
-    // need to delete all option value field before deleting group
-    $optionValue = new CRM_Core_DAO_OptionValue();
-    $optionValue->option_group_id = $optionGroupId;
-    $optionValue->delete();
+    static::deleteRecord(['id' => $optionGroupId]);
+  }
 
-    $optionGroup = new CRM_Core_DAO_OptionGroup();
-    $optionGroup->id = $optionGroupId;
-    $optionGroup->delete();
+  /**
+   * Callback for hook_civicrm_pre().
+   * @param \Civi\Core\Event\PreEvent $event
+   * @throws CRM_Core_Exception
+   */
+  public static function self_hook_civicrm_pre(\Civi\Core\Event\PreEvent $event) {
+    if ($event->action === 'delete') {
+      // need to delete all option value field before deleting group
+      \Civi\Api4\OptionValue::delete(FALSE)
+        ->addWhere('option_group_id', '=', $event->id)
+        ->execute();
+    }
   }
 
   /**
index 94c45e328db4dc76da04394ac3008bc62a4ab9a4..44c2fa51104d8cab5894f0151a291b199dda35ae 100644 (file)
@@ -33,7 +33,6 @@ abstract class BaseCustomValueTest extends UnitTestCase {
   public function tearDown(): void {
     $optgroups = CustomField::get(FALSE)->addSelect('option_group_id')->addWhere('option_group_id', 'IS NOT NULL')->execute();
     foreach ($optgroups as $optgroup) {
-      \Civi\Api4\OptionValue::delete(FALSE)->addWhere('option_group_id', '=', $optgroup['option_group_id'])->execute();
       \Civi\Api4\OptionGroup::delete(FALSE)->addWhere('id', '=', $optgroup['option_group_id'])->execute();
     }
     CustomField::delete(FALSE)->addWhere('id', '>', 0)->execute();