Exemplo n.º 1
0
 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;
 }