Changeset 758

Show
Ignore:
Timestamp:
12/30/08 21:18:58 (4 years ago)
Author:
d0nut
Message:

borrowed code from net.deixu.wbblite.memberlist-1.0.1 to get rid of wbb3 dependency - now wbb2 compatible

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • buddyloo/files/lib/page/FriendsPage.class.php

    r270 r758  
    11<?php 
    2 require_once(WCF_DIR.'lib/page/MembersListPage.class.php'); 
     2require_once(WCF_DIR.'lib/page/SortablePage.class.php'); 
     3require_once(WCF_DIR.'lib/data/user/avatar/Avatar.class.php'); 
     4require_once(WCF_DIR.'lib/data/user/UserProfile.class.php'); 
     5require_once(WCF_DIR.'lib/data/user/option/UserOptions.class.php'); 
     6require_once(WCF_DIR.'lib/page/util/menu/HeaderMenu.class.php'); 
    37 
    48/** 
     
    913 * @license     GNU General Public License <http://opensource.org/licenses/gpl-3.0.html> 
    1014 */ 
    11 class FriendsPage extends MembersListPage { 
     15class FriendsPage extends SortablePage { 
    1216        public $templateName = 'buddylooFriends'; 
     17        public $itemsPerPage = 30; 
     18        public $defaultSortField = 'username'; 
     19        public $defaultSortOrder = 'ASC'; 
     20 
    1321        public $groupedMembers = array(); 
     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 = ''; 
    1436         
    1537        /** 
    16          * @see MembersListPage::getSearchResult() 
     38         * 
    1739         */ 
    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; 
    2558        } 
    2659         
    2760        /** 
    28          * @see MembersListPage::getMembers() 
     61         * Returns the data of a member. 
     62         *  
     63         * @param       array           $row 
     64         * @return      array  
    2965         */ 
    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&amp;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&amp;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&amp;userID='.$member['userID'].'"><img src="'.RELATIVE_WCF_DIR.'icon/emailM.png" title="'.$emailTitle.'" alt="'.$emailTitle.'" /></a>'; 
     107                                        break; 
     108                        } 
     109                } 
     110                return $user; 
     111        } 
    32112         
    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']; 
    54122        } 
    55123         
     
    68136                )); 
    69137        } 
     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        } 
    70196} 
    71197?>