예제 #1
0
	function testPageStatsService() {
		global $wgTitle, $wgMemc;

		$wgTitle = Title::newMainPage();
		$articleId = $wgTitle->getArticleId();
		$article = Article::newFromId($articleId);
		$key = wfMemcKey('services', 'pageheader', 'current-revision', $articleId);

		// macbre: perform this test only for existing pages
		if (!$wgTitle->exists()) {
			$this->markTestSkipped('Main page cannot be found');
			return;
		}

		$service = new PageStatsService($articleId);

		$this->assertType('array', $service->getMostLinkedCategories());
		$this->assertType('int', $service->getCommentsCount());
		$this->assertType('int', $service->getLikesCount());
		$this->assertType('array', $service->getCurrentRevision());
		$this->assertType('array', $service->getPreviousEdits());
		$this->assertType('string', $service->getFirstRevisionTimestamp());

		// comments counter regenerating
		$comments = $service->getCommentsCount();

		$service->regenerateCommentsCount();
		$this->assertEquals($comments, $service->getCommentsCount());

		// remove cached stats when article is edited
		$user = $flags = $status = false;
		PageStatsService::onArticleSaveComplete($article, $user, false, false, false, false, false, $flags, false, $status, false);

		$data = $wgMemc->get($key);
		$this->assertTrue(empty($data));

		$service->getCurrentRevision();

		$data = $wgMemc->get($key);
		$this->assertFalse(empty($data));

		// remove cached stats when article (comment) is deleted
		PageStatsService::onArticleDeleteComplete($article, $user, false, $articleId);

		$data = $wgMemc->get($key);
		$this->assertTrue(empty($data));

		$service->getCurrentRevision();

		// regenerate data
		$service->regenerateData();

		$data = $wgMemc->get($key);
		$this->assertTrue(empty($data));
	}
	/**
	 * Get recent revisions of current article and format them
	 */
	protected function getRecentRevisions() {
		global $wgTitle, $wgMemc;

		// use service to get data
		$service = new PageStatsService($wgTitle->getArticleId());

		// get info about current revision and list of authors of recent five edits
		// This key is refreshed by the onArticleSaveComplete() hook
		$mKey = wfMemcKey('mOasisRecentRevisions2', $wgTitle->getArticleId());
		$revisions = $wgMemc->get($mKey);

		if (empty($revisions)) {
			$revisions = $service->getCurrentRevision();

			// format timestamps, render avatars and user links
			if (is_array($revisions)) {
				foreach($revisions as &$revision) {
					if (isset($revision['user'])) {
						$revision['avatarUrl'] = AvatarService::getAvatarUrl($revision['user']);
						$revision['link'] = AvatarService::renderLink($revision['user']);
					}
				}
			}
			$wgMemc->set($mKey, $revisions);
		}

		return $revisions;
	}