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; }