/** * Function for logging the event for Schema:Echo * @param $user User being notified. * @param $event EchoEvent to log detail about. * @param $deliveryMethod string containing either 'web' or 'email' */ public static function logSchemaEcho(User $user, EchoEvent $event, $deliveryMethod) { global $wgEchoConfig, $wgEchoNotifications; if (!$wgEchoConfig['eventlogging']['Echo']['enabled']) { // Only attempt event logging if Echo schema is enabled return; } // Notifications under system category should have -1 as sender id if ($event->getCategory() === 'system') { $sender = -1; } else { $agent = $event->getAgent(); if ($agent) { $sender = $agent->isAnon() ? $agent->getName() : $agent->getId(); } else { $sender = -1; } } if (isset($wgEchoNotifications[$event->getType()]['group'])) { $group = $wgEchoNotifications[$event->getType()]['group']; } else { $group = 'neutral'; } $data = array('version' => $wgEchoConfig['version'], 'eventId' => $event->getId(), 'notificationType' => $event->getType(), 'notificationGroup' => $group, 'sender' => (string) $sender, 'recipientUserId' => $user->getId(), 'recipientEditCount' => (int) $user->getEditCount()); // Add the source if it exists. (This is mostly for the Thanks extension.) $extra = $event->getExtra(); if (isset($extra['source'])) { $data['eventSource'] = (string) $extra['source']; } if ($deliveryMethod == 'email') { $data['deliveryMethod'] = 'email'; } else { // whitelist valid delivery methods so it is always valid $data['deliveryMethod'] = 'web'; } // Add revision ID if it exists $rev = $event->getRevision(); if ($rev) { $data['revisionId'] = $rev->getId(); } self::actuallyLogTheEvent('Echo', $data); }