Compare commits
2 Commits
425d0431c5
...
8ef7bea74c
Author | SHA1 | Date | |
---|---|---|---|
8ef7bea74c | |||
56881b50a0 |
@ -59,21 +59,39 @@ class CRM_ConstituentsOnly_BAO_ConstituentsOnly {
|
|||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function getConstituentSql($contactIds) {
|
public static function getConstituentSql($contactIds, $returnArray = FALSE) {
|
||||||
return "
|
$sql[] = "
|
||||||
SELECT MAX(contact_a.id) AS contact_id, cc.id AS og_contact_id
|
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
|
FROM civicrm_contact contact_a
|
||||||
INNER JOIN civicrm_relationship cr
|
INNER JOIN civicrm_relationship cr
|
||||||
ON (cr.contact_id_a = contact_a.id OR cr.contact_id_b = contact_a.id)
|
ON (cr.contact_id_a = contact_a.id)
|
||||||
AND contact_a.is_deleted = 0
|
AND contact_a.is_deleted = 0
|
||||||
AND (contact_a.do_not_trade = 0 OR contact_a.do_not_trade IS NULL)
|
AND (contact_a.do_not_trade = 0 OR contact_a.do_not_trade IS NULL)
|
||||||
AND cr.is_active = 1
|
AND cr.is_active = 1
|
||||||
INNER JOIN civicrm_contact cc
|
INNER JOIN civicrm_contact cc
|
||||||
ON (cr.contact_id_a = cc.id OR cr.contact_id_b = cc.id)
|
ON (cr.contact_id_b = cc.id)
|
||||||
AND contact_a.id <> cc.id
|
AND cc.id IN (" . implode(',', $contactIds) . ")
|
||||||
AND cc.id IN (" . implode(',', $contactIds) . ")
|
AND cc.do_not_trade = 1
|
||||||
AND cc.do_not_trade = 1
|
GROUP BY cc.id";
|
||||||
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
|
||||||
";
|
";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,24 +107,15 @@ class CRM_ConstituentsOnly_BAO_ConstituentsOnly {
|
|||||||
$sqls[] = "CREATE TEMPORARY TABLE quick_temp_table_1
|
$sqls[] = "CREATE TEMPORARY TABLE quick_temp_table_1
|
||||||
{$joinQuery}
|
{$joinQuery}
|
||||||
";
|
";
|
||||||
|
$queries = self::getConstituentSql(["SELECT id FROM quick_temp_table_1"], TRUE);
|
||||||
$sqls[] = "
|
$sqls[] = "
|
||||||
CREATE TEMPORARY TABLE quick_temp_table_2
|
CREATE TEMPORARY TABLE quick_temp_table_2
|
||||||
SELECT MAX(contact_a.id) AS contact_id, cc.id AS og_contact_id, MAX(cc.sort_name) AS og_sort_name
|
{$queries[0]}
|
||||||
FROM civicrm_contact contact_a
|
";
|
||||||
INNER JOIN civicrm_relationship cr
|
$sqls[] = "
|
||||||
ON (cr.contact_id_a = contact_a.id OR cr.contact_id_b = contact_a.id)
|
INSERT INTO quick_temp_table_2
|
||||||
AND contact_a.is_deleted = 0
|
{$queries[1]}
|
||||||
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 OR cr.contact_id_b = cc.id)
|
|
||||||
AND contact_a.id <> cc.id
|
|
||||||
AND cc.id IN (SELECT id FROM quick_temp_table_1)
|
|
||||||
AND cc.do_not_trade = 1
|
|
||||||
GROUP BY cc.id
|
|
||||||
";
|
";
|
||||||
|
|
||||||
foreach ($sqls as $sql) {
|
foreach ($sqls as $sql) {
|
||||||
CRM_Core_DAO::executeQuery($sql);
|
CRM_Core_DAO::executeQuery($sql);
|
||||||
}
|
}
|
||||||
@ -147,7 +156,6 @@ class CRM_ConstituentsOnly_BAO_ConstituentsOnly {
|
|||||||
public static function updateSearchRows($rows, $headers) {
|
public static function updateSearchRows($rows, $headers) {
|
||||||
$contactIds = array_keys($rows);
|
$contactIds = array_keys($rows);
|
||||||
$sql = self::getConstituentSql($contactIds);
|
$sql = self::getConstituentSql($contactIds);
|
||||||
|
|
||||||
$result = CRM_Core_DAO::executeQuery($sql);
|
$result = CRM_Core_DAO::executeQuery($sql);
|
||||||
$relContactIds = [];
|
$relContactIds = [];
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user