CRM_Utils_Hook - Fire Symfony event dispatcher for hook_post and hook_pre.
authorTim Otten <totten@civicrm.org>
Mon, 26 May 2014 23:57:43 +0000 (16:57 -0700)
committerTim Otten <totten@civicrm.org>
Wed, 28 May 2014 04:00:11 +0000 (21:00 -0700)
CRM/Utils/Hook.php
Civi/Core/Event/PostEvent.php [new file with mode: 0644]
Civi/Core/Event/PreEvent.php [new file with mode: 0644]

index 523b4020b43bc2ba6c205580c5e62759ef49de51..f1a431c6f05ace032e3e04efec2a38249497b798 100644 (file)
@@ -259,6 +259,9 @@ abstract class CRM_Utils_Hook {
    * @return null the return value is ignored
    */
   static function pre($op, $objectName, $id, &$params) {
+    $event = new \Civi\Core\Event\PreEvent($op, $objectName, $id, $params);
+    \Civi\Core\Container::singleton()->get('dispatcher')->dispatch("hook_civicrm_pre", $event);
+    \Civi\Core\Container::singleton()->get('dispatcher')->dispatch("hook_civicrm_pre::$objectName", $event);
     return self::singleton()->invoke(4, $op, $objectName, $id, $params, self::$_nullObject, self::$_nullObject, 'civicrm_pre');
   }
 
@@ -275,6 +278,9 @@ abstract class CRM_Utils_Hook {
    * @access public
    */
   static function post($op, $objectName, $objectId, &$objectRef) {
+    $event = new \Civi\Core\Event\PostEvent($op, $objectName, $objectId, $objectRef);
+    \Civi\Core\Container::singleton()->get('dispatcher')->dispatch("hook_civicrm_post", $event);
+    \Civi\Core\Container::singleton()->get('dispatcher')->dispatch("hook_civicrm_post::$objectName", $event);
     return self::singleton()->invoke(4, $op, $objectName, $objectId, $objectRef, self::$_nullObject, self::$_nullObject, 'civicrm_post');
   }
 
diff --git a/Civi/Core/Event/PostEvent.php b/Civi/Core/Event/PostEvent.php
new file mode 100644 (file)
index 0000000..e2d0093
--- /dev/null
@@ -0,0 +1,62 @@
+<?php
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 4.4                                                |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2013                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+*/
+
+namespace Civi\Core\Event;
+
+/**
+ * Class AuthorizeEvent
+ * @package Civi\API\Event
+ */
+class PostEvent extends \Symfony\Component\EventDispatcher\Event {
+
+  /**
+   * @var string 'create'|'edit'|'delete' etc
+   */
+  public $action;
+
+  /**
+   * @var string
+   */
+  public $entity;
+
+  /**
+   * @var int|NULL
+   */
+  public $id;
+
+  /**
+   * @var Object
+   */
+  public $object;
+
+  function __construct($action, $entity, $id, $object) {
+    $this->action = $action;
+    $this->entity = $entity;
+    $this->id = $id;
+    $this->object = $object;
+  }
+}
diff --git a/Civi/Core/Event/PreEvent.php b/Civi/Core/Event/PreEvent.php
new file mode 100644 (file)
index 0000000..6b44ab4
--- /dev/null
@@ -0,0 +1,62 @@
+<?php
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 4.4                                                |
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC (c) 2004-2013                                |
+ +--------------------------------------------------------------------+
+ | This file is a part of CiviCRM.                                    |
+ |                                                                    |
+ | CiviCRM is free software; you can copy, modify, and distribute it  |
+ | under the terms of the GNU Affero General Public License           |
+ | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
+ |                                                                    |
+ | CiviCRM is distributed in the hope that it will be useful, but     |
+ | WITHOUT ANY WARRANTY; without even the implied warranty of         |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
+ | See the GNU Affero General Public License for more details.        |
+ |                                                                    |
+ | You should have received a copy of the GNU Affero General Public   |
+ | License and the CiviCRM Licensing Exception along                  |
+ | with this program; if not, contact CiviCRM LLC                     |
+ | at info[AT]civicrm[DOT]org. If you have questions about the        |
+ | GNU Affero General Public License or the licensing of CiviCRM,     |
+ | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
+ +--------------------------------------------------------------------+
+*/
+
+namespace Civi\Core\Event;
+
+/**
+ * Class AuthorizeEvent
+ * @package Civi\API\Event
+ */
+class PreEvent extends \Symfony\Component\EventDispatcher\Event {
+
+  /**
+   * @var string 'create'|'edit'|'delete' etc
+   */
+  public $action;
+
+  /**
+   * @var string
+   */
+  public $entity;
+
+  /**
+   * @var int|NULL
+   */
+  public $id;
+
+  /**
+   * @var array
+   */
+  public $params;
+
+  function __construct($action, $entity, $id, $params) {
+    $this->action = $action;
+    $this->entity = $entity;
+    $this->id = $id;
+    $this->params = $params;
+  }
+}