public function setTrackChanges($trackChanges = true)
{
if (is_bool($trackChanges) || !$trackChanges) {
// turn change track on or off
if ($trackChanges) {
$this->trackChanges = $this->trackChanges | self::trackChangesOn;
} else {
$this->trackChanges = $this->trackChanges & ~self::trackChangesOn;
}
// remove bit
} else {
if (is_int($trackChanges)) {
// set bitmask
$allowed = array(self::trackChangesOn, self::trackChangesValues, self::trackChangesOn | self::trackChangesValues);
if (in_array($trackChanges, $allowed)) {
$this->trackChanges = $trackChanges;
}
}
}
return $this;
}