Commit fd166980 authored by Eileen McNaughton's avatar Eileen McNaughton Committed by GitHub

Merge pull request #14675 from seamuslee001/cleanup_prev_next_set_item

[REF] Cleanup usage of CRM_Core_BAO_PrevNextCache::setItem and deprec…
parents 075af2f0 e1c519d7
......@@ -338,14 +338,46 @@ FROM civicrm_prevnext_cache pn
}
/**
* @param $values
* @param string $sqlValues string of SQLValues to insert
* @return array
*/
public static function setItem($values) {
$insert = "INSERT INTO civicrm_prevnext_cache ( entity_table, entity_id1, entity_id2, cachekey, data ) VALUES \n";
$query = $insert . implode(",\n ", $values);
public static function convertSetItemValues($sqlValues) {
$closingBrace = strpos($sqlValues, ')') - strlen($sqlValues);
$valueArray = array_map('trim', explode(', ', substr($sqlValues, strpos($sqlValues, '(') + 1, $closingBrace - 1)));
foreach ($valueArray as $key => &$value) {
// remove any quotes from values.
if (substr($value, 0, 1) == "'") {
$valueArray[$key] = substr($value, 1, -1);
}
}
return $valueArray;
}
//dump the dedupe matches in the prevnext_cache table
CRM_Core_DAO::executeQuery($query);
/**
* @param array|string $entity_table
* @param int $entity_id1
* @param int $entity_id2
* @param string $cacheKey
* @param string $data
*/
public static function setItem($entity_table = NULL, $entity_id1 = NULL, $entity_id2 = NULL, $cacheKey = NULL, $data = NULL) {
// If entity table is an array we are passing in an older format where this function only had 1 param $values. We put a deprecation warning.
if (!empty($entity_table) && is_array($entity_table)) {
Civi::log()->warning('Deprecated code path. Values should not be set this is going away in the future in favour of specific function params for each column.', array('civi.tag' => 'deprecated'));
foreach ($values as $value) {
$valueArray = self::convertSetItemValues($value);
self::setItem($valueArray[0], $valueArray[1], $valueArray[2], $valueArray[3], $valueArray[4]);
}
}
else {
CRM_Core_DAO::executeQuery("INSERT INTO civicrm_prevnext_cache (entity_table, entity_id1, entity_id2, cacheKey, data) VALUES
(%1, %2, %3, %4, '{$data}')", [
1 => [$entity_table, 'String'],
2 => [$entity_id1, 'Integer'],
3 => [$entity_id2, 'Integer'],
4 => [$cacheKey, 'String'],
]);
}
}
/**
......
......@@ -376,9 +376,8 @@ class CRM_Dedupe_Finder {
];
$data = CRM_Core_DAO::escapeString(serialize($row));
$values[] = " ( 'civicrm_contact', $dstID, $srcID, '$cacheKeyString', '$data' ) ";
CRM_Core_BAO_PrevNextCache::setItem('civicrm_contact', $dstID, $srcID, $cacheKeyString, $data);
}
CRM_Core_BAO_PrevNextCache::setItem($values);
return $mainContacts;
}
......
......@@ -772,9 +772,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m
];
$data = CRM_Core_DAO::escapeString(serialize($data));
$values = [];
$values[] = " ( 'civicrm_contact', 0, 0, '{$cacheKeyString}_stats', '$data' ) ";
CRM_Core_BAO_PrevNextCache::setItem($values);
CRM_Core_BAO_PrevNextCache::setItem('civicrm_contact', 0, 0, $cacheKeyString . '_stats', $data);
}
/**
......
......@@ -62,4 +62,22 @@ class CRM_Core_BAO_PrevNextCacheTest extends CiviUnitTestCase {
$this->quickCleanup(array('civicrm_prevnext_cache'));
}
public function testSetItem() {
$cacheKeyString = 'TestCacheKeyString';
$data = '1234afgbghh';
$values = [];
$values[] = " ( 'civicrm_contact', 0, 0, '{$cacheKeyString}_stats', '$data' ) ";
$valueArray = CRM_Core_BAO_PrevNextCache::convertSetItemValues($values[0]);
// verify as SetItem would do that it converts the original values style into a sensible array format
$this->assertEquals(['civicrm_contact', 0, 0, 'TestCacheKeyString_stats', '1234afgbghh'], $valueArray);
CRM_Core_BAO_PrevNextCache::setItem($valueArray[0], $valueArray[1], $valueArray[2], $valueArray[3], $valueArray[4]);
$dao = new CRM_Core_BAO_PrevNextCache();
$dao->cacheKey = 'TestCacheKeyString_stats';
$dao->find(TRUE);
$this->assertEquals('1234afgbghh', $dao->data);
$this->assertEquals(0, $dao->entity_id1);
$this->assertEquals(0, $dao->entity_id2);
$this->assertEquals('civicrm_contact', $dao->entity_table);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment