function view($u = null) { global $wgOut, $wgTitle, $wgUser, $wgRequest; $diff = $wgRequest->getVal('diff'); $rcid = $wgRequest->getVal('rcid'); $this->user = $u ? $u : User::newFromName($wgTitle->getDBKey()); if (!$u && $this->mTitle->getNamespace() != NS_USER || !$this->user || isset($diff) || isset($rcid)) { return Article::view(); } if ($this->user->getID() == 0) { header('HTTP/1.1 404 Not Found'); $wgOut->setRobotpolicy('noindex,nofollow'); $wgOut->errorpage('nosuchuser', 'Noarticletext_user'); return; } $this->isPageOwner = $wgUser->getID() == $this->user->getID(); if ($this->user->isBlocked() && $this->isPageOwner) { $wgOut->blockedPage(); return; } $wgOut->setRobotpolicy('index,follow'); $skin = $wgUser->getSkin(); //user settings $checkStats = $this->user->getOption('profilebox_stats') == 1; $checkStartedEdited = $this->user->getOption('profilebox_startedEdited') == 1; $wgOut->addScript(HtmlSnips::makeUrlTags('js', array('profilebox.js'), '/extensions/wikihow/profilebox/', false)); $wgOut->addHTML(HtmlSnips::makeUrlTags('css', array('profilebox.css'), '/extensions/wikihow/profilebox/', false)); $wgOut->addHTML(HtmlSnips::makeUrlTags('css', array('rcwidget.css'), '/extensions/wikihow/rcwidget/', false)); $profileStats = new ProfileStats($this->user); $badgeData = $profileStats->getBadges(); $wgOut->addHTML(ProfileBox::getDisplayBadge($badgeData)); if (!$u) { $skin->addWidget($this->getRCUserWidget()); } if ($checkStats || $checkStartedEdited) { $createdData = $profileStats->getArticlesCreated(0); } //stats if ($checkStats) { $stats = ProfileBox::fetchStats("User:"******"<div class='clearall'></div>"); } }
function fetchStats($pagename) { global $wgUser; $dbr = wfGetDB(DB_SLAVE); $t = Title::newFromText($pagename); $u = User::newFromName($t->getText()); if (!$u || $u->getID() == 0) { $ret = wfMessage('profilebox_ajax_error')->text(); return $ret; } $cachetime = 24 * 60 * 60; // 1 day if ($wgUser->getID() == $u->getID()) { $cachetime = 60; } $updateflag = 0; $response = array(); $row = $dbr->selectRow('profilebox', '*', array('pb_user' => $u->getID()), __METHOD__); if ($row) { $now = time(); $last = strtotime($row->pb_lastUpdated . " UTC"); $diff = $now - $last; if (isset($row->pb_lastUpdated) && $diff <= $cachetime) { $response['created'] = number_format($row->pb_started, 0, "", ","); $response['edited'] = number_format($row->pb_edits, 0, "", ","); $response['patrolled'] = number_format($row->pb_patrolled, 0, "", ","); $response['viewership'] = number_format($row->pb_viewership, 0, "", ","); $response['uid'] = $u->getID(); $response['contribpage'] = "/Special:Contributions/" . $u->getName(); if (class_exists('ThumbsUp')) { $response['thumbs_given'] = number_format($row->pb_thumbs_given, 0, "", ","); $response['thumbs_received'] = number_format($row->pb_thumbs_received, 0, "", ","); } $updateflag = 0; } else { $updateflag = 1; } } else { $updateflag = 1; } if ($updateflag) { $conds = array('fe_user' => $u->getID()); $created = $dbr->selectField('firstedit', 'count(*)', $conds, __METHOD__); $conds = array('log_user' => $u->getID(), 'log_type' => 'patrol'); $patrolled = $dbr->selectField('logging', 'count(*)', $conds, __METHOD__); $edited = WikihowUser::getAuthorStats($u->getName()); $viewership = 0; $vsql = "select sum(page_counter) as viewership from page,firstedit where page_namespace=0 and page_id=fe_page and fe_user="******"select sum(distinct(page_counter)) as viewership from page,revision where page_namespace=0 and page_id=rev_page and rev_user="******" GROUP BY rev_page; $vres = $dbr->query($vsql, __METHOD__); foreach ($vres as $row1) { $viewership += $row1->viewership; } $dbw = wfGetDB(DB_MASTER); $sql = "INSERT INTO profilebox (pb_user,pb_started,pb_edits,pb_patrolled,pb_viewership,pb_lastUpdated) "; $sql .= "VALUES (" . $u->getID() . ",{$created},{$edited},{$patrolled},{$viewership},'" . wfTimestampNow() . "') "; $sql .= "ON DUPLICATE KEY UPDATE pb_started={$created},pb_edits={$edited},pb_patrolled={$patrolled},pb_viewership={$viewership},pb_lastUpdated='" . wfTimestampNow() . "'"; $dbw->query($sql, __METHOD__); $response['created'] = number_format($created, 0, "", ","); $response['edited'] = number_format($edited, 0, "", ","); $response['patrolled'] = number_format($patrolled, 0, "", ","); $response['viewership'] = number_format($viewership, 0, "", ","); $response['uid'] = $u->getID(); $response['contribpage'] = "/Special:Contributions/" . $u->getName(); if (class_exists('ThumbsUp')) { $response['thumbs_given'] = number_format($row->pb_thumbs_given, 0, "", ","); $response['thumbs_received'] = number_format($row->pb_thumbs_received, 0, "", ","); } } //check badges $badges = ProfileStats::genBadges($dbr, $u); $response = array_merge($response, $badges); return $response; }