- // Recycle global $user and $i18n objects, as user settings and language are specific for each report.
- $user = new ttUser(null, $report['user_id']);
+ // Recycle global $user object, as user settings are specific for each report.
+ $user = new ttUser(null, $options['user_id']);
+ if (!$user->id) continue; // Skip not found user.
+
+ // Avoid complications with impersonated users, possibly from subgroups.
+ // Note: this may happen when cron.php is called by a browser who already impersonates.
+ // This is not supposed to happen in automatic cron job.
+ if ($user->behalf_id)
+ continue; // Skip processing on behalf situations entirely.
+
+ // TODO: write a new function ttFavReportHelper::adjustOptions that will use
+ // a $user object recycled above. Put user handling below into it.
+ // Also adjust remaining options for potentially changed user access rights and group properties.
+ // For example, tracking mode may have changed, but fav report options are still old...
+ // This needs to be fixed.
+ $options = ttFavReportHelper::adjustOptions($options);
+
+ // Skip users with disabled Notifications plugin.
+ if (!$user->isPluginEnabled('no')) continue;
+
+ // Recycle $i18n object because language is user-specific.