function wfUserSiteFollowsDetailsResponse($user_name, $t_name) { $user_id = User::idFromName($user_name); $t_id = User::idFromName($t_name); $sites = UserSiteFollow::getFullFollowedSites($user_id, $t_id); $ret = array('success' => true, 'result' => $sites); $out = json_encode($ret); return $out; }
public static function getTopFollowedSitesWithDetails($user_id, $target_user_id) { $usf = new UserSiteFollow(); $tuser = User::newFromId($target_user_id); $followedByTargetUser = $usf->getFullFollowedSites($tuser); $user = User::newFromId($user_id); $followedByCurrentUser = $usf->getFullFollowedSites($user); return self::sortFollowedSiteWithDetails($tuser, $followedByTargetUser, $followedByCurrentUser, 5); }
/** * Show the special page * * @param $params Mixed: parameter(s) passed to the page or null */ public function execute($params) { global $wgUser, $wgSitename, $wgHuijiPrefix, $wgUserLevels; $lang = $this->getLanguage(); $out = $this->getOutput(); $request = $this->getRequest(); $user = $this->getUser(); // Set the page title, robot policies, etc. $this->setHeaders(); $output = '<i>' . $this->msg('editranknote')->plain() . '</i>'; // Add CSS // $out->addModuleStyles( 'ext.socialprofile.useruserfollows.css' ); $out->addModuleStyles('ext.socialprofile.userstats.css'); // Add JS $out->addModuleScripts('ext.socialprofile.usersitefollows.js'); $output = ''; /** * Get query string variables */ $user_id = $request->getVal('user_id'); $target_user_id = $request->getInt('target_user_id'); $rel_type = $request->getInt('rel_type'); $page = $request->getInt('page'); /** * Set up config for page / default values */ if (!$page || !is_numeric($page)) { $page = 1; } if (!$rel_type || !is_numeric($rel_type)) { $rel_type = 2; } //per_page : Limit the number of pages per page $per_page = 20; $per_row = 2; /** * If no user is set in the URL, we assume its the current user */ if ($target_user_id == 0 || !is_int($target_user_id)) { $out->setPageTitle($this->msg('g-error-title')->plain()); $out->addHTML($this->msg('g-error-message-invalid-link')->plain()); return false; } $sites = UserSiteFollow::getFullFollowedSites($user_id, $target_user_id); $total = count($sites); $star_page = $per_page * ($page - 1); $per_sites = array_slice($sites, $star_page, $per_page); if (!$sites) { $output .= '<div class="top-users"><h3>暂时还没有关注哦</h3>'; } if (!$per_sites) { $output .= '<div class="top-users"><h3>此页暂时没有站点</h3>'; } $output .= '<div class="top-users" style="width:90%; max-width:500px">'; foreach ($per_sites as $user) { $site_name = $user['val']; $domain_name = $user['key']; $is_follow = $user['is']; if ($user_id == '' || $user_id == 0) { $output .= '<div class=\\"top-fan-row\\"><a href=http://' . $domain_name . '.huiji.wiki class="list-group-item">' . $site_name . '</a>'; } else { if ($is_follow == 'Y') { $output .= '<div class=\\"top-fan-row\\"><a href=http://' . $domain_name . '.huiji.wiki class="list-group-item">' . $site_name . '<span class="badge user-site-follow-from-modal unfollow">取关</span></a>'; } else { $output .= '<div class=\\"top-fan-row\\"><a href=http://' . $domain_name . '.huiji.wiki class="list-group-item">' . $site_name . '<span class="badge user-site-follow-from-modal">关注</span></a>'; } } $output .= '<div class="cleared"></div>'; $output .= '</div>'; } $output .= '</div><div class="cleared"></div>'; /** * Build next/prev nav */ $total = intval(str_replace(',', '', $total)); $numofpages = $total / $per_page; $pageLink = $this->getPageTitle(); if ($numofpages > 1) { $output .= '<nav class="page-nav pagination">'; if ($page > 1) { $output .= '<li>' . Linker::link($pageLink, '<span aria-hidden="true">«</span>', array(), array('user' => $user_name, 'user_id' => $user_id, 'target_user_id' => $target_user_id, 'rel_type' => $rel_type, 'page' => $page - 1)) . '</li>'; } if ($total % $per_page != 0) { $numofpages++; } // if ( $numofpages >= 2 && $page < $total ) { // $numofpages = 2 + $page; // } // if ( $numofpages >= ( $total / $per_page ) ) { // $numofpages = ( $total / $per_page ) + 1; // } for ($i = 1; $i <= $numofpages; $i++) { if ($i == $page) { $output .= '<li class="active"><a href="#">' . $i . ' <span class="sr-only">(current)</span></a></li>'; } else { $output .= '<li>' . Linker::link($pageLink, $i, array(), array('user' => $user_name, 'user_id' => $user_id, 'target_user_id' => $target_user_id, 'rel_type' => $rel_type, 'page' => $i)) . '</li>'; } } if ($total - $per_page * $page > 0) { $output .= '<li>' . Linker::link($pageLink, '<span aria-hidden="true">»</span>', array(), array('user' => $user_name, 'user_id' => $user_id, 'target_user_id' => $target_user_id, 'rel_type' => $rel_type, 'page' => $page + 1)) . '</li>'; } $output .= '</nav>'; } $out->addHTML($output); }
/** * get user Following Sites * @param boolean $expanded if true, return detail info about the sites * @param object $viewPointUser if this is not null, get this user's following site * @return array sites info */ public function getFollowingSites($expanded = false, $viewPointUser = null) { $this->mFollowingSites = UserSiteFollow::getFullFollowedSites($this->mUser); $cache = self::getUserCache(); $cache->set($this->mUser->getId(), $this); if (!$expanded) { return $this->mFollowingSites; } else { if ($viewPointUser != null) { $viewPointHuijiUser = self::newFromUser($viewPointUser); $vSites = $viewPointHuijiUser->getFollowingSites(); return UserSiteFollow::sortFollowedSiteWithDetails($this->mUser, $this->mFollowingSites, $vSites); } else { return UserSiteFollow::sortFollowedSiteWithDetails($this->mUser, $this->mFollowingSites, null); } } }