CRM-12910, extend log reports to support injected job tables, via report query-hook...
authorDeepak Srivastava <deepak.srivastava@webaccess.co.in>
Sun, 11 Aug 2013 07:40:13 +0000 (13:10 +0530)
committerDeepak Srivastava <deepak.srivastava@webaccess.co.in>
Sun, 11 Aug 2013 07:40:13 +0000 (13:10 +0530)
CRM/Contact/BAO/Query/Hook.php
CRM/Logging/ReportSummary.php
CRM/Report/BAO/Hook.php [new file with mode: 0644]
CRM/Report/BAO/HookInterface.php [new file with mode: 0644]
CRM/Utils/Hook.php

index 419b5aad0ee09580a6c2b403c58829a3276c2b63..d791b626ecfce2d7dc340181ba30f73f2b84d52d 100644 (file)
@@ -66,7 +66,7 @@ class CRM_Contact_BAO_Query_Hook {
   public function getSearchQueryObjects() {
     if ($this->_queryObjects === NULL) {
       $this->_queryObjects = array();
-      CRM_Utils_Hook::queryObjects($this->_queryObjects);
+      CRM_Utils_Hook::queryObjects($this->_queryObjects, 'Contact');
     }
     return $this->_queryObjects;
   }
index 203f336b2e0ba177edc2d52e3b6c494d72c17dc0..fea2b82d5e96d7a4b56f222366cc95d5b96b0f55 100644 (file)
@@ -176,6 +176,9 @@ class CRM_Logging_ReportSummary extends CRM_Report_Form {
       $this->_logTables[$table] = array('fk' => 'entity_id', 'log_type' => 'Contact');
     }
 
+    // allow log tables to be extended via report hooks
+    CRM_Report_BAO_Hook::singleton()->alterLogTables($this->_logTables);
+
     parent::__construct();
   }
 
diff --git a/CRM/Report/BAO/Hook.php b/CRM/Report/BAO/Hook.php
new file mode 100644 (file)
index 0000000..12bbbf9
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 4.3                                                |
+ +--------------------------------------------------------------------+
+ | 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        |
+ +--------------------------------------------------------------------+
+*/
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2013
+ * $Id$
+ *
+ */
+
+/**
+ * Report hooks that allow extending a particular report.
+ * Example: Adding new tables to log reports 
+ */
+class CRM_Report_BAO_Hook {
+
+  /**
+   * @var array of CRM_Report_BAO_HookInterface objects
+   */
+  protected $_queryObjects = NULL;
+
+  /**
+   * singleton function used to manage this object
+   *
+   * @return object
+   * @static
+   *
+   */
+  public static function singleton() {
+    static $singleton = NULL;
+    if (!$singleton) {
+      $singleton = new CRM_Report_BAO_Hook();
+    }
+    return $singleton;
+  }
+
+ /**
+  * Get or build the list of search objects (via hook)
+  *
+  * @return array of CRM_Report_BAO_Hook_Interface objects
+  */
+  public function getSearchQueryObjects() {
+    if ($this->_queryObjects === NULL) {
+      $this->_queryObjects = array();
+      CRM_Utils_Hook::queryObjects($this->_queryObjects, 'Report');
+    }
+    CRM_Core_Error::debug( '$this->_queryObjects', $this->_queryObjects );
+    return $this->_queryObjects;
+  }
+
+  public function alterLogTables(&$logTables) {
+    foreach (self::getSearchQueryObjects() as $obj) {
+      $obj->alterLogTables($logTables);
+    }
+  }
+}
\ No newline at end of file
diff --git a/CRM/Report/BAO/HookInterface.php b/CRM/Report/BAO/HookInterface.php
new file mode 100644 (file)
index 0000000..af3b33f
--- /dev/null
@@ -0,0 +1,44 @@
+<?php
+/*
+ +--------------------------------------------------------------------+
+ | CiviCRM version 4.3                                                |
+ +--------------------------------------------------------------------+
+ | 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        |
+ +--------------------------------------------------------------------+
+*/
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC (c) 2004-2013
+ * $Id$
+ *
+ */
+
+/**
+ * Interface class for Report hook query objects
+ */
+class CRM_Report_BAO_HookInterface {
+
+  public function alterLogTables(&$logTables) {
+    return NULL;
+  }
+}
\ No newline at end of file
index 85f7e9b859b046d938c02abc3ad5b4cdd3572df1..64d742963da3f718baffa9b2ebb12ef2ad86580d 100644 (file)
@@ -1324,7 +1324,7 @@ abstract class CRM_Utils_Hook {
    * @param Array $queryObjects
    * @return void
    */
-  static function queryObjects(&$queryObjects) {
-    return self::singleton()->invoke(1, $queryObjects, self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject, 'civicrm_queryObjects');
+  static function queryObjects(&$queryObjects, $type = 'Contact') {
+    return self::singleton()->invoke(2, $queryObjects, $type, self::$_nullObject, self::$_nullObject, self::$_nullObject, 'civicrm_queryObjects');
   }
 }