/** * @param array $expectedParseParams * @param string|null $rawRcParams */ protected function assertParseParams($expectedParseParams, $rawRcParams) { $rc = new RecentChange(); $rc->setAttribs(['rc_params' => $rawRcParams]); $actualParseParams = $rc->parseParams(); $this->assertEquals($expectedParseParams, $actualParseParams); }
/** * Generates a notification that can be easily interpreted by a machine. * @see RCFeedFormatter::getLine */ public function getLine(array $feed, RecentChange $rc, $actionComment) { global $wgCanonicalServer, $wgServerName, $wgScriptPath; $packet = array('id' => $rc->getAttribute('rc_id'), 'type' => RecentChange::parseFromRCType($rc->getAttribute('rc_type')), 'namespace' => $rc->getTitle()->getNamespace(), 'title' => $rc->getTitle()->getPrefixedText(), 'comment' => $rc->getAttribute('rc_comment'), 'timestamp' => (int) wfTimestamp(TS_UNIX, $rc->getAttribute('rc_timestamp')), 'user' => $rc->getAttribute('rc_user_text'), 'bot' => (bool) $rc->getAttribute('rc_bot')); if (isset($feed['channel'])) { $packet['channel'] = $feed['channel']; } $type = $rc->getAttribute('rc_type'); if ($type == RC_EDIT || $type == RC_NEW) { global $wgUseRCPatrol, $wgUseNPPatrol; $packet['minor'] = (bool) $rc->getAttribute('rc_minor'); if ($wgUseRCPatrol || $type == RC_NEW && $wgUseNPPatrol) { $packet['patrolled'] = (bool) $rc->getAttribute('rc_patrolled'); } } switch ($type) { case RC_EDIT: $packet['length'] = array('old' => $rc->getAttribute('rc_old_len'), 'new' => $rc->getAttribute('rc_new_len')); $packet['revision'] = array('old' => $rc->getAttribute('rc_last_oldid'), 'new' => $rc->getAttribute('rc_this_oldid')); break; case RC_NEW: $packet['length'] = array('old' => null, 'new' => $rc->getAttribute('rc_new_len')); $packet['revision'] = array('old' => null, 'new' => $rc->getAttribute('rc_this_oldid')); break; case RC_LOG: $packet['log_id'] = $rc->getAttribute('rc_logid'); $packet['log_type'] = $rc->getAttribute('rc_log_type'); $packet['log_action'] = $rc->getAttribute('rc_log_action'); if ($rc->getAttribute('rc_params')) { $params = $rc->parseParams(); if ($rc->getAttribute('rc_params') == serialize(false) || $params !== false) { // From ApiQueryLogEvents::addLogParams $logParams = array(); // Keys like "4::paramname" can't be used for output so we change them to "paramname" foreach ($params as $key => $value) { if (strpos($key, ':') === false) { $logParams[$key] = $value; continue; } $logParam = explode(':', $key, 3); $logParams[$logParam[2]] = $value; } $packet['log_params'] = $logParams; } else { $packet['log_params'] = explode("\n", $rc->getAttribute('rc_params')); } } $packet['log_action_comment'] = $actionComment; break; } $packet['server_url'] = $wgCanonicalServer; $packet['server_name'] = $wgServerName; $packet['server_script_path'] = $wgScriptPath ?: '/'; $packet['wiki'] = wfWikiID(); return $this->formatArray($packet); }