| | 22 | public $members = array(); |
| | 23 | |
| | 24 | public $fields = array( |
| | 25 | 'username'=>'wcf.user.username', |
| | 26 | 'avatar'=>'wcf.user.avatar', |
| | 27 | 'email'=>'wcf.user.email', |
| | 28 | 'homepage'=>'wcf.user.option.homepage', |
| | 29 | 'registrationDate'=>'wcf.user.registrationDate', |
| | 30 | 'posts'=>'wcf.user.posts' |
| | 31 | ); |
| | 32 | |
| | 33 | private $userOptions; |
| | 34 | private $homepageField; |
| | 35 | public $realSortField = ''; |
| 18 | | protected function getSearchResult() {} |
| 19 | | |
| 20 | | /** |
| 21 | | * @see MembersListPage::countItems() |
| 22 | | */ |
| 23 | | public function countItems() { |
| 24 | | return MultipleLinkPage::countItems(); |
| | 40 | public function readParameters() { |
| | 41 | parent::readParameters(); |
| | 42 | |
| | 43 | $this->userOptions = new UserOptions(); |
| | 44 | $this->homepageField = $this->userOptions->getOption('homepage'); |
| | 45 | $this->activeFields = array('username','avatar','email','homepage','registrationDate','posts'); |
| | 46 | |
| | 47 | // headers |
| | 48 | foreach ($this->activeFields as $field) { |
| | 49 | $name = 'wcf.user.'.($this->userOptions->getOption($field)?'option.':''). $field; |
| | 50 | if (!empty($name)) $this->headers[] = array('field' => $field, 'name' => $name); |
| | 51 | } |
| | 52 | |
| | 53 | // use options from memberlistpage, if existing |
| | 54 | if(defined('MEMBERS_LIST_USERS_PER_PAGE')) $this->itemsPerPage = MEMBERS_LIST_USERS_PER_PAGE; |
| | 55 | if(defined('MEMBERS_LIST_COLUMNS')) $this->activeFields = explode(',', MEMBERS_LIST_COLUMNS); |
| | 56 | //if(defined('MEMBERS_LIST_DEFAULT_SORT_FIELD')) $this->defaultSortField = MEMBERS_LIST_DEFAULT_SORT_FIELD; |
| | 57 | //if(defined('MEMBERS_LIST_DEFAULT_SORT_ORDER')) $this->defaultSortOrder = MEMBERS_LIST_DEFAULT_SORT_ORDER; |
| 30 | | protected function readMembers() { |
| 31 | | $i=0; |
| | 66 | public function prepareMember($member) { |
| | 67 | $profile = new UserProfile(null, $member); |
| | 68 | $user = array('username'=>'', 'avatar'=>'','email'=>'','homepage'=>'','registrationDate'=>'','posts'=>'posts'); |
| | 69 | $username = StringUtil::encodeHTML($member['username']); |
| | 70 | foreach($member as $name => $column) { |
| | 71 | switch($name) { |
| | 72 | case 'username': |
| | 73 | $online = (WCF::getUser()->getPermission('user.memberlist.canViewOnlineStatus') && $profile->isOnline()) ? 'online' : 'offline'; |
| | 74 | $iconTitle = WCF::getLanguage()->get('wcf.user.'.$online, array('$username'=>$username)); |
| | 75 | $profileTitle = WCF::getLanguage()->get('wcf.user.viewProfile', array('$username' => $username)); |
| | 76 | $user['username'] = '<div class="containerIconSmall"><img src="'.RELATIVE_WCF_DIR.'icon/'.$online.'S.png" alt="'.$iconTitle.'" title="'.$iconTitle.'" /></div>' |
| | 77 | . '<div class="containerContentSmall">' |
| | 78 | . '<p><a href="index.php?page=User&userID='.$member['userID'].SID_ARG_2ND.'" title="'.$profileTitle.'">'.$username.'</a></p>' |
| | 79 | . ($profile->getUserTitle() ? '<p>'.$profile->getUserTitle().($profile->getRank() ? ' '. $profile->getRank()->getImage() : '').'</p>' : '') |
| | 80 | . '</div>'; |
| | 81 | break; |
| | 82 | case 'registrationDate': |
| | 83 | $user['registrationDate'] = DateUtil::formatDate(null, $column); |
| | 84 | break; |
| | 85 | case 'avatar': |
| | 86 | if($column != 0) { |
| | 87 | $avatar = new Avatar($column); |
| | 88 | $avatar->setMaxHeight(50); |
| | 89 | $avatarTitle = WCF::getLanguage()->get('wcf.user.viewProfile', array('$username' => $username)); |
| | 90 | $user['avatar'] = '<a href="index.php?page=User&userID='.$member['userID'].SID_ARG_2ND.'" title="'.$avatarTitle.'">'.$avatar->__toString().'</a>'; |
| | 91 | } |
| | 92 | break; |
| | 93 | case 'posts': |
| | 94 | $user['posts'] = $column; |
| | 95 | break; |
| | 96 | case 'homepage': |
| | 97 | if(empty($column) || $column == 'http://') { |
| | 98 | $user['homepage'] = ''; |
| | 99 | break; |
| | 100 | } |
| | 101 | $homepageTitle = WCF::getLanguage()->get('wcf.user.profile.homepage.title', array('$username'=>$username)); |
| | 102 | $user['homepage'] = '<a href="'.$member['homepage'].'"><img src="'.RELATIVE_WCF_DIR.'icon/websiteM.png" title="'.$homepageTitle.'" alt="'.$homepageTitle.'" /></a>'; |
| | 103 | break; |
| | 104 | case 'email': |
| | 105 | $emailTitle = WCF::getLanguage()->get('wcf.user.profile.email.title', array('$username'=>$username)); |
| | 106 | $user['email'] = '<a href="index.php?form=Mail&userID='.$member['userID'].'"><img src="'.RELATIVE_WCF_DIR.'icon/emailM.png" title="'.$emailTitle.'" alt="'.$emailTitle.'" /></a>'; |
| | 107 | break; |
| | 108 | } |
| | 109 | } |
| | 110 | return $user; |
| | 111 | } |
| 33 | | $sql = "SELECT ".$this->sqlSelects." |
| 34 | | avatar.*, user.*, rank.* |
| 35 | | FROM wcf".WCF_N."_user_whitelist whitelist |
| 36 | | JOIN ".$this->userTable." user |
| 37 | | ON (whitelist.whiteUserID = user.userID) |
| 38 | | ".$this->sqlJoins." |
| 39 | | LEFT JOIN wcf".WCF_N."_avatar avatar |
| 40 | | ON (avatar.avatarID = ".$this->userTableAlias.".avatarID) |
| 41 | | LEFT JOIN wcf".WCF_N."_user_rank rank |
| 42 | | ON (rank.rankID = ".$this->userTableAlias.".rankID) |
| 43 | | WHERE whitelist.userID = ".WCF::getUser()->userID." |
| 44 | | ORDER BY user.".$this->realSortField." ".$this->sortOrder; |
| 45 | | $result = WCF::getDB()->sendQuery($sql); |
| 46 | | while ($row = WCF::getDB()->fetchArray($result)) { |
| 47 | | if($i++ == 0) { |
| 48 | | $this->groupedMembers[0] = array('members' => array(), 'groupName' => ''); |
| 49 | | } |
| 50 | | $member = $this->getMember($row); |
| 51 | | $this->members[] = $member; |
| 52 | | $this->groupedMembers[0]['members'][] =& $this->members[(count($this->members) - 1)]; |
| 53 | | } |
| | 113 | /** |
| | 114 | * @see MultipleLinkPage::countItems() |
| | 115 | */ |
| | 116 | public function countItems() { |
| | 117 | parent::countItems(); |
| | 118 | |
| | 119 | $sql = 'SELECT COUNT(userID) AS c FROM wcf'.WCF_N.'_user_whitelist WHERE userID = '.WCF::getUser()->userID; |
| | 120 | $row = WCF::getDB()->getFirstRow($sql); |
| | 121 | return $row['c']; |
| | 138 | |
| | 139 | /** |
| | 140 | * @see SortablePage::validateSortField() |
| | 141 | */ |
| | 142 | public function validateSortField() { |
| | 143 | parent::validateSortField(); |
| | 144 | |
| | 145 | switch ($this->sortField) { |
| | 146 | case 'username': |
| | 147 | case 'email': |
| | 148 | case 'registrationData': |
| | 149 | case 'posts': |
| | 150 | $this->realSortField = $this->sortField; |
| | 151 | break; |
| | 152 | case 'avatar': |
| | 153 | $this->realSortField = 'avatarID'; |
| | 154 | break; |
| | 155 | case 'homepage': |
| | 156 | $this->realSortField = 'userOption'.$this->homepageField['optionID']; |
| | 157 | break; |
| | 158 | default: |
| | 159 | $this->sortField = $this->defaultSortField; |
| | 160 | $this->realSortField = $this->sortField; |
| | 161 | break; |
| | 162 | } |
| | 163 | } |
| | 164 | |
| | 165 | /** |
| | 166 | * @see Page::readData() |
| | 167 | */ |
| | 168 | public function readData() { |
| | 169 | parent::readData(); |
| | 170 | |
| | 171 | $i=0; |
| | 172 | $prefix = $this->sortField == 'homepage' ? 'wcfOption' : ($this->sortField == 'posts' ? 'wbb' : 'wcf'); |
| | 173 | $sql = 'SELECT wcf.userID, wcf.username, wcf.email, wcf.registrationDate, wbb.posts, wcf.userTitle, wcf.rankID, |
| | 174 | wcf.lastActivityTime, rank.neededPoints, rank.rankTitle, rank.rankImage, rank.repeatImage, |
| | 175 | avatar.avatarID as avatar, wcfOption.userOption'.$this->homepageField['optionID'].' as homepage |
| | 176 | FROM wcf'.WCF_N.'_user_whitelist whitelist |
| | 177 | INNER JOIN wcf'.WCF_N.'_user wcf |
| | 178 | ON whitelist.whiteUserID = wcf.userID |
| | 179 | LEFT JOIN wcf'.WCF_N.'_user_rank rank ON rank.rankID=wcf.rankID |
| | 180 | LEFT JOIN wbb'.WBB_N.'_user wbb ON wbb.userID=wcf.userID |
| | 181 | LEFT JOIN wcf'.WCF_N.'_avatar avatar ON avatar.avatarID=wcf.avatarID |
| | 182 | LEFT JOIN wcf'.WCF_N.'_user_option_value wcfOption ON wcfOption.userID=wcf.userID |
| | 183 | WHERE whitelist.userID = '.WCF::getUser()->userID.' |
| | 184 | ORDER BY '.$prefix.'.'.$this->realSortField.' '.$this->sortOrder. |
| | 185 | ($this->sortField != 'username' ? ', wcf.userID' : ''); |
| | 186 | $result = WCF::getDB()->sendQuery($sql, $this->itemsPerPage, ($this->pageNo - 1) * $this->itemsPerPage); |
| | 187 | while($row = WCF::getDB()->fetchArray($result)) { |
| | 188 | if($i++ == 0) { |
| | 189 | $this->groupedMembers[0] = array('members' => array(), 'groupName' => ''); |
| | 190 | } |
| | 191 | $member = $this->prepareMember($row); |
| | 192 | $this->members[] = $member; |
| | 193 | $this->groupedMembers[0]['members'][] =& $this->members[(count($this->members) - 1)]; |
| | 194 | } |
| | 195 | } |