Example #1
0
 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;
 }