Compare commits
15 Commits
Author | SHA1 | Date | |
---|---|---|---|
8ef7bea74c | |||
56881b50a0 | |||
425d0431c5 | |||
2419a5752e | |||
ed2bba47e3 | |||
|
ea85c80a5b | ||
|
0ceb19e204 | ||
|
6a30fb4ca7 | ||
|
af531fbd4c | ||
|
9eba3efa5e | ||
17b4648aaf | |||
5779aee380 | |||
e573074111 | |||
9fdb1ac12b | |||
e3e27bbcb6 |
330
CRM/ConstituentsOnly/BAO/ConstituentsOnly.php
Normal file
330
CRM/ConstituentsOnly/BAO/ConstituentsOnly.php
Normal file
@ -0,0 +1,330 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class CRM_ConstituentsOnly_BAO_ConstituentsOnly {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Suported Report Classes.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function getSuportedReportClasses() {
|
||||||
|
return [
|
||||||
|
'CRM_Report_Form_Contact_Summary',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get sql.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function getCommonSql() {
|
||||||
|
return "
|
||||||
|
SELECT MAX(contact_a.id) AS contact_id
|
||||||
|
FROM civicrm_contact contact_a
|
||||||
|
LEfT JOIN civicrm_relationship cr
|
||||||
|
ON (cr.contact_id_a = contact_a.id)
|
||||||
|
LEFT JOIN civicrm_contact cc
|
||||||
|
ON (cr.contact_id_b = cc.id)
|
||||||
|
AND cc.is_deleted = 0
|
||||||
|
AND (cc.do_not_trade IS NULL OR cc.do_not_trade = 0)
|
||||||
|
AND cr.is_active = 1
|
||||||
|
WHERE contact_a.do_not_trade = 1
|
||||||
|
AND cc.id IS NOT NULL
|
||||||
|
GROUP BY contact_a.id
|
||||||
|
|
||||||
|
UNION
|
||||||
|
SELECT MAX(contact_a.id) AS contact_id
|
||||||
|
FROM civicrm_contact contact_a
|
||||||
|
LEfT JOIN civicrm_relationship cr
|
||||||
|
ON (cr.contact_id_b = contact_a.id)
|
||||||
|
LEFT JOIN civicrm_contact cc
|
||||||
|
ON (cr.contact_id_a = cc.id)
|
||||||
|
AND cc.is_deleted = 0
|
||||||
|
AND (cc.do_not_trade IS NULL OR cc.do_not_trade = 0)
|
||||||
|
AND cr.is_active = 1
|
||||||
|
WHERE contact_a.do_not_trade = 1
|
||||||
|
AND cc.id IS NOT NULL
|
||||||
|
GROUP BY contact_a.id
|
||||||
|
";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Constituent Sql.
|
||||||
|
*
|
||||||
|
* @param array $contactIds
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getConstituentSql($contactIds, $returnArray = FALSE) {
|
||||||
|
$sql[] = "
|
||||||
|
SELECT MAX(contact_a.id) AS contact_id, cc.id AS og_contact_id, MAX(cc.sort_name) AS og_sort_name
|
||||||
|
FROM civicrm_contact contact_a
|
||||||
|
INNER JOIN civicrm_relationship cr
|
||||||
|
ON (cr.contact_id_a = contact_a.id)
|
||||||
|
AND contact_a.is_deleted = 0
|
||||||
|
AND (contact_a.do_not_trade = 0 OR contact_a.do_not_trade IS NULL)
|
||||||
|
AND cr.is_active = 1
|
||||||
|
INNER JOIN civicrm_contact cc
|
||||||
|
ON (cr.contact_id_b = cc.id)
|
||||||
|
AND cc.id IN (" . implode(',', $contactIds) . ")
|
||||||
|
AND cc.do_not_trade = 1
|
||||||
|
GROUP BY cc.id";
|
||||||
|
$sql[] = "
|
||||||
|
SELECT MAX(contact_a.id) AS contact_id, cc.id AS og_contact_id, MAX(cc.sort_name) AS og_sort_name
|
||||||
|
FROM civicrm_contact contact_a
|
||||||
|
INNER JOIN civicrm_relationship cr
|
||||||
|
ON (cr.contact_id_b = contact_a.id)
|
||||||
|
AND contact_a.is_deleted = 0
|
||||||
|
AND (contact_a.do_not_trade = 0 OR contact_a.do_not_trade IS NULL)
|
||||||
|
AND cr.is_active = 1
|
||||||
|
INNER JOIN civicrm_contact cc
|
||||||
|
ON (cr.contact_id_a = cc.id)
|
||||||
|
AND cc.id IN (" . implode(',', $contactIds) . ")
|
||||||
|
AND cc.do_not_trade = 1
|
||||||
|
GROUP BY cc.id";
|
||||||
|
if ($returnArray) {
|
||||||
|
return $sql;
|
||||||
|
}
|
||||||
|
return "
|
||||||
|
SELECT contact_id, MAX(og_contact_id) AS og_contact_id, MAX(og_sort_name) AS og_sort_name
|
||||||
|
FROM (" . implode(' UNION ', $sql) . ") AS temp GROUP BY contact_id
|
||||||
|
";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Alter Quick search query.
|
||||||
|
*
|
||||||
|
* @param string $query
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getQuickSearchQuery($query) {
|
||||||
|
$joinQuery = str_replace('WHERE ', 'WHERE (cc.do_not_trade = 1) AND ', $query);
|
||||||
|
$sqls[] = "CREATE TEMPORARY TABLE quick_temp_table_1
|
||||||
|
{$joinQuery}
|
||||||
|
";
|
||||||
|
$queries = self::getConstituentSql(["SELECT id FROM quick_temp_table_1"], TRUE);
|
||||||
|
$sqls[] = "
|
||||||
|
CREATE TEMPORARY TABLE quick_temp_table_2
|
||||||
|
{$queries[0]}
|
||||||
|
";
|
||||||
|
$sqls[] = "
|
||||||
|
INSERT INTO quick_temp_table_2
|
||||||
|
{$queries[1]}
|
||||||
|
";
|
||||||
|
foreach ($sqls as $sql) {
|
||||||
|
CRM_Core_DAO::executeQuery($sql);
|
||||||
|
}
|
||||||
|
$startPoint = stripos($query, 'from');
|
||||||
|
$endPoint = stripos($query, 'union');
|
||||||
|
$firstQuery = substr($query, $startPoint, ($endPoint - $startPoint));
|
||||||
|
$firstQuery = substr($firstQuery, stripos($firstQuery, 'select'));
|
||||||
|
$firstQuery = substr($firstQuery, 0, stripos($firstQuery, 'where'));
|
||||||
|
$firstQuery = str_replace(
|
||||||
|
'sort_name, ',
|
||||||
|
"CONCAT(cc.sort_name, ' (', og_sort_name, ')'), ",
|
||||||
|
$firstQuery
|
||||||
|
);
|
||||||
|
|
||||||
|
$strToReplace = "
|
||||||
|
UNION
|
||||||
|
(
|
||||||
|
$firstQuery
|
||||||
|
INNER JOIN quick_temp_table_2 temp ON temp.contact_id = cc.id
|
||||||
|
)
|
||||||
|
) t
|
||||||
|
";
|
||||||
|
|
||||||
|
$replace = 'WHERE (cc.do_not_trade IS NULL OR cc.do_not_trade = 0) AND ';
|
||||||
|
$query = str_replace('WHERE ', $replace, $query);
|
||||||
|
$query = str_replace(') t', $strToReplace, $query);
|
||||||
|
return $query;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rebuild search result rows.
|
||||||
|
*
|
||||||
|
* @param array $rows
|
||||||
|
* @param array $headers
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function updateSearchRows($rows, $headers) {
|
||||||
|
$contactIds = array_keys($rows);
|
||||||
|
$sql = self::getConstituentSql($contactIds);
|
||||||
|
$result = CRM_Core_DAO::executeQuery($sql);
|
||||||
|
$relContactIds = [];
|
||||||
|
|
||||||
|
while ($result->fetch()) {
|
||||||
|
$relContactIds[$result->og_contact_id] = $result->contact_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($relContactIds)) {
|
||||||
|
$formValues = ['contact_id' => $relContactIds];
|
||||||
|
|
||||||
|
$url = CRM_Utils_Array::value('q', $_GET);
|
||||||
|
$returnProperties = NULL;
|
||||||
|
$request = $_REQUEST;
|
||||||
|
|
||||||
|
$qfKey = $_REQUEST['qfKey'];
|
||||||
|
$cache = "CRM_Contact_Controller_Search_{$qfKey}";
|
||||||
|
if (!empty($_REQUEST['has_js'])) {
|
||||||
|
$formValuesFromSession = CRM_Core_Session::singleton()->get($cache);
|
||||||
|
if (!empty($formValuesFromSession['formValues'])) {
|
||||||
|
$request = $formValuesFromSession['formValues'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (in_array($url, ['civicrm/contact/search/builder']) || !empty($request['uf_group_id'])) {
|
||||||
|
$returnProperties = CRM_Core_Session::singleton()->get('return_properties_search');
|
||||||
|
if (!empty($returnProperties)) {
|
||||||
|
foreach ($headers as $header) {
|
||||||
|
if (!empty($header['sort'])) {
|
||||||
|
$headerName = str_replace('`', '', $header['sort']);
|
||||||
|
$returnProperties[$headerName] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$returnProperties['contact_sub_type'] = 1;
|
||||||
|
$returnProperties['contact_type'] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$queryParams = CRM_Contact_BAO_Query::convertFormValues($formValues);
|
||||||
|
$selector = new CRM_Contact_Selector(
|
||||||
|
'',
|
||||||
|
$queryParams,
|
||||||
|
$queryParams,
|
||||||
|
$returnProperties
|
||||||
|
);
|
||||||
|
list($select, $from, $where, $having) = $selector->getQuery()->query();
|
||||||
|
$newRows = $selector->getRows('', '', '', '');
|
||||||
|
foreach ($relContactIds as $ogContactId => $cid) {
|
||||||
|
if (empty($newRows[$cid])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$newRows[$cid]['sort_name'] .= " ({$rows[$ogContactId]['sort_name']})";
|
||||||
|
$rows[$ogContactId] = $newRows[$cid];
|
||||||
|
$prevCacheKey = "civicrm search {$qfKey}";
|
||||||
|
$exists = CRM_Core_DAO::singleValueQuery(
|
||||||
|
"SELECT count(id) FROM civicrm_prevnext_cache
|
||||||
|
WHERE (
|
||||||
|
entity_id1 = %1 OR entity_id2 = %1
|
||||||
|
)
|
||||||
|
AND cacheKey = %2
|
||||||
|
AND entity_table = 'civicrm_contact'
|
||||||
|
",
|
||||||
|
[
|
||||||
|
1 => [$cid, 'Integer'],
|
||||||
|
2 => [$prevCacheKey, 'String'],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!$exists) {
|
||||||
|
$prevCache = [
|
||||||
|
"('civicrm_contact'",
|
||||||
|
"'{$cid}'",
|
||||||
|
"'{$cid}'",
|
||||||
|
"'{$prevCacheKey}'",
|
||||||
|
"'" . $newRows[$cid]['sort_name'] . "')",
|
||||||
|
];
|
||||||
|
CRM_Core_BAO_PrevNextCache::setItem($prevCache);
|
||||||
|
}
|
||||||
|
CRM_Core_BAO_PrevNextCache::deleteItem($ogContactId, $prevCacheKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rebuild report result rows.
|
||||||
|
*
|
||||||
|
* @param array $rows
|
||||||
|
* @param CRM_Core_Report $object
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function updateReportRows($rows, &$object) {
|
||||||
|
if (property_exists($object, '_donotTradeRowBuilding')
|
||||||
|
&& $object->_donotTradeRowBuilding
|
||||||
|
) {
|
||||||
|
return $rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
$contactIds = [];
|
||||||
|
foreach ($rows as $id => $row) {
|
||||||
|
if (CRM_Utils_Array::value(
|
||||||
|
'civicrm_contact_do_not_trade_alter', $row) == 'Yes'
|
||||||
|
) {
|
||||||
|
$contactIds[$id] = $row['civicrm_contact_id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (empty($contactIds)) {
|
||||||
|
return $rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = self::getConstituentSql($contactIds);
|
||||||
|
$result = CRM_Core_DAO::executeQuery($sql);
|
||||||
|
$relContactIds = [];
|
||||||
|
while ($result->fetch()) {
|
||||||
|
$relContactIds[$result->og_contact_id] = $result->contact_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($relContactIds)) {
|
||||||
|
$object->_donotTradeRowBuilding = TRUE;
|
||||||
|
|
||||||
|
$select = $object->getVar('_select');
|
||||||
|
$from = $object->getVar('_from');
|
||||||
|
$dbAliases = $object->getVar('_aliases');
|
||||||
|
$contactAlias = "`{$dbAliases['civicrm_contact']}`";
|
||||||
|
$query = "
|
||||||
|
{$select}
|
||||||
|
{$from}
|
||||||
|
WHERE {$contactAlias}.id IN (" . implode(',', $relContactIds) . ")
|
||||||
|
";
|
||||||
|
|
||||||
|
$newRows = [];
|
||||||
|
$tempObj = $object;
|
||||||
|
$tempObj->_columnHeaders = $object->_backupHeader;
|
||||||
|
$tempObj->buildRows($query, $newRows);
|
||||||
|
$tempObj->formatDisplay($newRows);
|
||||||
|
foreach ($newRows as $id => $newRow) {
|
||||||
|
$contactId = $newRow['civicrm_contact_id'];
|
||||||
|
while (in_array($contactId, $relContactIds)) {
|
||||||
|
$ogContactId = array_search($contactId, $relContactIds);
|
||||||
|
$ogId = array_search($ogContactId, $contactIds);
|
||||||
|
$newRow['civicrm_contact_sort_name'] .= " ({$rows[$ogId]['civicrm_contact_sort_name']})";
|
||||||
|
$rows[$ogId] = $newRow;
|
||||||
|
unset($relContactIds[$ogContactId]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update sql for report.
|
||||||
|
*
|
||||||
|
* @param CRM_Core_Report $object
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function updateReportSql(&$object) {
|
||||||
|
$where = $object->getVar('_where');
|
||||||
|
$sql = self::getCommonSql();
|
||||||
|
|
||||||
|
$dbAliases = $object->getVar('_aliases');
|
||||||
|
$contactAlias = "`{$dbAliases['civicrm_contact']}`";
|
||||||
|
$searchFrom = "{$contactAlias}.`do_not_trade` IS NULL OR ({$contactAlias}.`do_not_trade` = 0)";
|
||||||
|
$replaceFrom = "IF (
|
||||||
|
{$contactAlias}.`do_not_trade` = 1,
|
||||||
|
{$contactAlias}.id IN ({$sql}),
|
||||||
|
1
|
||||||
|
)";
|
||||||
|
$where = str_replace($searchFrom, $replaceFrom, $where);
|
||||||
|
$object->setVar('_where', $where);
|
||||||
|
$object->_backupHeader = $object->getVar('_columnHeaders');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -13,6 +13,7 @@ class CRM_ConstituentsOnly_BAO_Query extends CRM_Contact_BAO_Query_Interface {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function select(&$query) {
|
public function select(&$query) {
|
||||||
|
CRM_Core_Session::singleton()->set('return_properties_search', $query->_returnProperties);
|
||||||
// hack for profile search
|
// hack for profile search
|
||||||
$url = CRM_Utils_Array::value('q', $_GET);
|
$url = CRM_Utils_Array::value('q', $_GET);
|
||||||
if (in_array($url, ['civicrm/profile', 'civicrm/contact/search/builder'])) {
|
if (in_array($url, ['civicrm/profile', 'civicrm/contact/search/builder'])) {
|
||||||
@ -44,8 +45,41 @@ class CRM_ConstituentsOnly_BAO_Query extends CRM_Contact_BAO_Query_Interface {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$url = CRM_Utils_Array::value('q', $_GET);
|
||||||
|
if (strpos($url, 'civicrm/contact/') === FALSE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($query->_paramLookup['ignore_constituent_search'])) {
|
||||||
|
$query->_qill[0][] = ts("Include non-constituents in this search");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (CRM_Utils_Array::value('civicrm_contact', $query->_tables) && empty($query->_paramLookup['do_not_trade'])) {
|
if (CRM_Utils_Array::value('civicrm_contact', $query->_tables) && empty($query->_paramLookup['do_not_trade'])) {
|
||||||
$query->_where[0][] = "( contact_a.do_not_trade IS NULL OR contact_a.do_not_trade = 0)";
|
$query->_where[0][] = "
|
||||||
|
contact_a.id NOT IN (SELECT id FROM (
|
||||||
|
SELECT contact_a.id
|
||||||
|
FROM civicrm_contact contact_a
|
||||||
|
LEFT JOIN civicrm_relationship cr
|
||||||
|
ON (cr.contact_id_a = contact_a.id)
|
||||||
|
AND cr.is_active = 1
|
||||||
|
LEFT JOIN civicrm_contact cc1
|
||||||
|
ON (cr.contact_id_a = cc1.id)
|
||||||
|
WHERE contact_a.do_not_trade = 1 AND (cr.id IS NULL OR cc1.is_deleted = 1 OR cc1.do_not_trade = 1)
|
||||||
|
AND contact_a.id <> cc1.id
|
||||||
|
UNION
|
||||||
|
SELECT contact_a.id
|
||||||
|
FROM civicrm_contact contact_a
|
||||||
|
LEFT JOIN civicrm_relationship cr
|
||||||
|
ON (cr.contact_id_b = contact_a.id)
|
||||||
|
AND cr.is_active = 1
|
||||||
|
LEFT JOIN civicrm_contact cc1
|
||||||
|
ON (cr.contact_id_b = cc1.id)
|
||||||
|
WHERE contact_a.do_not_trade = 1 AND (cr.id IS NULL OR cc1.is_deleted = 1 OR cc1.do_not_trade = 1)
|
||||||
|
AND contact_a.id <> cc1.id
|
||||||
|
) AS temp GROUP BY id
|
||||||
|
)
|
||||||
|
";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,15 +140,39 @@ function constituentsonly_civicrm_queryObjects(&$queryObjects, $type) {
|
|||||||
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_contactListQuery
|
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_contactListQuery
|
||||||
*/
|
*/
|
||||||
function constituentsonly_civicrm_contactListQuery(&$query, $queryText, $context, $id) {
|
function constituentsonly_civicrm_contactListQuery(&$query, $queryText, $context, $id) {
|
||||||
$replace = 'WHERE (cc.do_not_trade IS NULL OR cc.do_not_trade = 0) AND ';
|
$query = CRM_ConstituentsOnly_BAO_ConstituentsOnly::getQuickSearchQuery($query);
|
||||||
$query = str_replace('WHERE ', $replace, $query);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implements hook_civicrm_selectWhereClause().
|
* Implements hook_civicrm_alterReportVar().
|
||||||
*
|
*
|
||||||
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_selectWhereClause
|
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterReportVar
|
||||||
*/
|
*/
|
||||||
|
function constituentsonly_civicrm_alterReportVar($varType, &$var, &$object) {
|
||||||
|
$reportClassName = get_class($object);
|
||||||
|
$supportedClassNames = CRM_ConstituentsOnly_BAO_ConstituentsOnly::getSuportedReportClasses();
|
||||||
|
if (!in_array($reportClassName, $supportedClassNames)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ('columns' == $varType) {
|
||||||
|
$var['civicrm_contact']['fields']['do_not_trade_alter'] = [
|
||||||
|
'title' => ts('Case ID'),
|
||||||
|
'no_display' => TRUE,
|
||||||
|
'required' => TRUE,
|
||||||
|
'name' => 'do_not_trade',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($varType == 'sql') {
|
||||||
|
CRM_ConstituentsOnly_BAO_ConstituentsOnly::updateReportSql($object);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($varType == 'rows') {
|
||||||
|
$var = CRM_ConstituentsOnly_BAO_ConstituentsOnly::updateReportRows($var, $object);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function constituentsonly_civicrm_selectWhereClause($entity, &$clauses) {
|
function constituentsonly_civicrm_selectWhereClause($entity, &$clauses) {
|
||||||
if ($entity == 'Contact') {
|
if ($entity == 'Contact') {
|
||||||
$url = CRM_Utils_Array::value('q', $_GET);
|
$url = CRM_Utils_Array::value('q', $_GET);
|
||||||
@ -158,3 +182,34 @@ function constituentsonly_civicrm_selectWhereClause($entity, &$clauses) {
|
|||||||
$clauses['do_not_trade'] = ' = 0';
|
$clauses['do_not_trade'] = ' = 0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements hook_civicrm_searchColumns().
|
||||||
|
*
|
||||||
|
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_searchColumns
|
||||||
|
*/
|
||||||
|
function constituentsonly_civicrm_searchColumns($objectName, &$headers, &$rows, &$selector) {
|
||||||
|
if (in_array($objectName, ['contact']) && !empty($rows)) {
|
||||||
|
if (!empty($_POST['ignore_constituent_search'])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$rows = CRM_ConstituentsOnly_BAO_ConstituentsOnly::updateSearchRows($rows, $headers);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements hook_civicrm_buildForm().
|
||||||
|
*
|
||||||
|
* @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_buildForm
|
||||||
|
*/
|
||||||
|
function constituentsonly_civicrm_buildForm($formName, &$form) {
|
||||||
|
if ('CRM_Contact_Form_Search_Advanced' == $formName
|
||||||
|
&& !($form->getVar('_action') == CRM_Core_Action::DELETE)
|
||||||
|
&& empty($form->_searchPane)
|
||||||
|
) {
|
||||||
|
$form->addElement('checkbox', 'ignore_constituent_search', ts('Include non-constituents'));
|
||||||
|
CRM_Core_Region::instance('page-body')->add(array(
|
||||||
|
'template' => 'CRM/common.tpl',
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
13
templates/CRM/common.tpl
Normal file
13
templates/CRM/common.tpl
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
|
||||||
|
<table class="ignore_constituent_search-block">
|
||||||
|
<tr class="ignore_constituent_search">
|
||||||
|
<td>{$form.ignore_constituent_search.html} {$form.ignore_constituent_search.label}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
{literal}
|
||||||
|
<script type="text/javascript">
|
||||||
|
CRM.$(function($) {
|
||||||
|
$('#search-settings td.adv-search-top-submit').before($('table.ignore_constituent_search-block tr td'));
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
{/literal}
|
Loading…
Reference in New Issue
Block a user