Skip to content

Commit

Permalink
Merge pull request civicrm#11423 from totten/master-onchange
Browse files Browse the repository at this point in the history
CRM-21568 - Move emptiness judgments from SettingsBag::setDb to InnoDBIndexer
  • Loading branch information
eileenmcnaughton authored and sluc23 committed Jan 10, 2018
2 parents 4e33661 + 7616d78 commit ce3c34b
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 3 deletions.
4 changes: 4 additions & 0 deletions CRM/Core/InnoDBIndexer.php
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ public static function singleton($fresh = FALSE) {
* Specification of the setting (per *.settings.php).
*/
public static function onToggleFts($oldValue, $newValue, $metadata) {
if (empty($oldValue) && empty($newValue)) {
return;
}

$indexer = CRM_Core_InnoDBIndexer::singleton();
$indexer->setActive($newValue);
$indexer->fixSchemaDifferences();
Expand Down
8 changes: 5 additions & 3 deletions Civi/Core/SettingsBag.php
Original file line number Diff line number Diff line change
Expand Up @@ -352,9 +352,11 @@ protected function setDb($name, $value) {
}
$dao->find(TRUE);

// string comparison with 0 always return true, so to be ensure the type use ===
// ref - https://stackoverflow.com/questions/8671942/php-string-comparasion-to-0-integer-returns-true
if (isset($metadata['on_change']) && !($value === 0 && ($dao->value === NULL || unserialize($dao->value) == 0))) {
// Call 'on_change' listeners. It would be nice to only fire when there's
// a genuine change in the data. However, PHP developers have mixed
// expectations about whether 0, '0', '', NULL, and FALSE represent the same
// value, so there's no universal way to determine if a change is genuine.
if (isset($metadata['on_change'])) {
foreach ($metadata['on_change'] as $callback) {
call_user_func(
\Civi\Core\Resolver::singleton()->get($callback),
Expand Down

0 comments on commit ce3c34b

Please sign in to comment.