Hi,
Confirmed, and thank you for the precise report. The test in onProcessOrderMassActionchangeStatus is indeed too loose:
if(isset($action['notify'])){
...
$element->history->history_notified = 1;
}
The change-status mass action renders the notification checkbox without a hidden 0 companion, and the action data is initialised with 'notify' => '' (empty string), so the key can be present but empty. isset() treats that as true and forces history_notified = 1 even when the box is unchecked. The single-order save uses !empty($data) for exactly this reason, and the mass action should do the same.
So the minimal fix is just isset -> !empty:
if(!empty($action['notify'])){
if(!isset($element->history) || !is_object($element->history))
$element->history = new stdClass();
$element->history->history_notified = 1;
}
Your version with the explicit else setting history_notified = 0 works too, it just makes the unchecked case explicit; it is not required, since the order save leaves the notification off when the flag is not set.
We will include the fix on our end in the next version.