예제 #1
0
 /**
  * @dataProvider provideUserTitleTimestamp
  */
 public function testConstruction($user, LinkTarget $linkTarget, $notifTimestamp)
 {
     $item = new WatchedItem($user, $linkTarget, $notifTimestamp);
     $this->assertSame($user, $item->getUser());
     $this->assertSame($linkTarget, $item->getLinkTarget());
     $this->assertSame($notifTimestamp, $item->getNotificationTimestamp());
     // The below tests the internal WatchedItem::getTitle method
     $this->assertInstanceOf('Title', $item->getTitle());
     $this->assertSame($linkTarget->getDBkey(), $item->getTitle()->getDBkey());
     $this->assertSame($linkTarget->getFragment(), $item->getTitle()->getFragment());
     $this->assertSame($linkTarget->getNamespace(), $item->getTitle()->getNamespace());
     $this->assertSame($linkTarget->getText(), $item->getTitle()->getText());
 }
예제 #2
0
 private function extractOutputData(WatchedItem $watchedItem, array $recentChangeInfo)
 {
     /* Determine the title of the page that has been changed. */
     $title = Title::makeTitle($watchedItem->getLinkTarget()->getNamespace(), $watchedItem->getLinkTarget()->getDBkey());
     $user = $this->getUser();
     /* Our output data. */
     $vals = [];
     $type = intval($recentChangeInfo['rc_type']);
     $vals['type'] = RecentChange::parseFromRCType($type);
     $anyHidden = false;
     /* Create a new entry in the result for the title. */
     if ($this->fld_title || $this->fld_ids) {
         // These should already have been filtered out of the query, but just in case.
         if ($type === RC_LOG && $recentChangeInfo['rc_deleted'] & LogPage::DELETED_ACTION) {
             $vals['actionhidden'] = true;
             $anyHidden = true;
         }
         if ($type !== RC_LOG || LogEventsList::userCanBitfield($recentChangeInfo['rc_deleted'], LogPage::DELETED_ACTION, $user)) {
             if ($this->fld_title) {
                 ApiQueryBase::addTitleInfo($vals, $title);
             }
             if ($this->fld_ids) {
                 $vals['pageid'] = intval($recentChangeInfo['rc_cur_id']);
                 $vals['revid'] = intval($recentChangeInfo['rc_this_oldid']);
                 $vals['old_revid'] = intval($recentChangeInfo['rc_last_oldid']);
             }
         }
     }
     /* Add user data and 'anon' flag, if user is anonymous. */
     if ($this->fld_user || $this->fld_userid) {
         if ($recentChangeInfo['rc_deleted'] & Revision::DELETED_USER) {
             $vals['userhidden'] = true;
             $anyHidden = true;
         }
         if (Revision::userCanBitfield($recentChangeInfo['rc_deleted'], Revision::DELETED_USER, $user)) {
             if ($this->fld_userid) {
                 $vals['userid'] = (int) $recentChangeInfo['rc_user'];
                 // for backwards compatibility
                 $vals['user'] = (int) $recentChangeInfo['rc_user'];
             }
             if ($this->fld_user) {
                 $vals['user'] = $recentChangeInfo['rc_user_text'];
             }
             if (!$recentChangeInfo['rc_user']) {
                 $vals['anon'] = true;
             }
         }
     }
     /* Add flags, such as new, minor, bot. */
     if ($this->fld_flags) {
         $vals['bot'] = (bool) $recentChangeInfo['rc_bot'];
         $vals['new'] = $recentChangeInfo['rc_type'] == RC_NEW;
         $vals['minor'] = (bool) $recentChangeInfo['rc_minor'];
     }
     /* Add sizes of each revision. (Only available on 1.10+) */
     if ($this->fld_sizes) {
         $vals['oldlen'] = intval($recentChangeInfo['rc_old_len']);
         $vals['newlen'] = intval($recentChangeInfo['rc_new_len']);
     }
     /* Add the timestamp. */
     if ($this->fld_timestamp) {
         $vals['timestamp'] = wfTimestamp(TS_ISO_8601, $recentChangeInfo['rc_timestamp']);
     }
     if ($this->fld_notificationtimestamp) {
         $vals['notificationtimestamp'] = $watchedItem->getNotificationTimestamp() == null ? '' : wfTimestamp(TS_ISO_8601, $watchedItem->getNotificationTimestamp());
     }
     /* Add edit summary / log summary. */
     if ($this->fld_comment || $this->fld_parsedcomment) {
         if ($recentChangeInfo['rc_deleted'] & Revision::DELETED_COMMENT) {
             $vals['commenthidden'] = true;
             $anyHidden = true;
         }
         if (Revision::userCanBitfield($recentChangeInfo['rc_deleted'], Revision::DELETED_COMMENT, $user)) {
             if ($this->fld_comment && isset($recentChangeInfo['rc_comment'])) {
                 $vals['comment'] = $recentChangeInfo['rc_comment'];
             }
             if ($this->fld_parsedcomment && isset($recentChangeInfo['rc_comment'])) {
                 $vals['parsedcomment'] = Linker::formatComment($recentChangeInfo['rc_comment'], $title);
             }
         }
     }
     /* Add the patrolled flag */
     if ($this->fld_patrol) {
         $vals['patrolled'] = $recentChangeInfo['rc_patrolled'] == 1;
         $vals['unpatrolled'] = ChangesList::isUnpatrolled((object) $recentChangeInfo, $user);
     }
     if ($this->fld_loginfo && $recentChangeInfo['rc_type'] == RC_LOG) {
         if ($recentChangeInfo['rc_deleted'] & LogPage::DELETED_ACTION) {
             $vals['actionhidden'] = true;
             $anyHidden = true;
         }
         if (LogEventsList::userCanBitfield($recentChangeInfo['rc_deleted'], LogPage::DELETED_ACTION, $user)) {
             $vals['logid'] = intval($recentChangeInfo['rc_logid']);
             $vals['logtype'] = $recentChangeInfo['rc_log_type'];
             $vals['logaction'] = $recentChangeInfo['rc_log_action'];
             $vals['logparams'] = LogFormatter::newFromRow($recentChangeInfo)->formatParametersForApi();
         }
     }
     if ($anyHidden && $recentChangeInfo['rc_deleted'] & Revision::DELETED_RESTRICTED) {
         $vals['suppressed'] = true;
     }
     return $vals;
 }