/**
  * Loads a list of recent activity entries.
  * 
  * @return	array
  */
 public function load()
 {
     $eventList = new ViewableUserActivityEventList();
     if ($this->parameters['lastEventID']) {
         $eventList->getConditionBuilder()->add("user_activity_event.time <= ?", array($this->parameters['lastEventTime']));
         $eventList->getConditionBuilder()->add("user_activity_event.eventID < ?", array($this->parameters['lastEventID']));
     } else {
         $eventList->getConditionBuilder()->add("user_activity_event.time < ?", array($this->parameters['lastEventTime']));
     }
     // profile view
     if ($this->parameters['userID']) {
         $eventList->getConditionBuilder()->add("user_activity_event.userID = ?", array($this->parameters['userID']));
     } else {
         if ($this->parameters['filteredByFollowedUsers'] && count(WCF::getUserProfileHandler()->getFollowingUsers())) {
             $eventList->getConditionBuilder()->add('user_activity_event.userID IN (?)', array(WCF::getUserProfileHandler()->getFollowingUsers()));
         }
     }
     $eventList->readObjects();
     $lastEventTime = $eventList->getLastEventTime();
     if (!$lastEventTime) {
         return array();
     }
     // removes orphaned and non-accessable events
     UserActivityEventHandler::validateEvents($eventList);
     if (!count($eventList)) {
         return array();
     }
     // parse template
     WCF::getTPL()->assign(array('eventList' => $eventList));
     $events = $eventList->getObjects();
     return array('lastEventID' => end($events)->eventID, 'lastEventTime' => $lastEventTime, 'template' => WCF::getTPL()->fetch('recentActivityListItem'));
 }
 /**
  * @see	\wcf\system\dashboard\box\IDashboardBox::init()
  */
 public function init(DashboardBox $box, IPage $page)
 {
     parent::init($box, $page);
     // get current date
     $currentDay = DateUtil::format(null, 'm-d');
     $date = explode('-', DateUtil::format(null, 'Y-n-j'));
     // get user ids
     $userIDs = UserBirthdayCache::getInstance()->getBirthdays($date[1], $date[2]);
     $userIDs = array_intersect($userIDs, WCF::getUserProfileHandler()->getFollowingUsers());
     if (!empty($userIDs)) {
         $userProfileList = new UserProfileList();
         $userProfileList->setObjectIDs($userIDs);
         $userProfileList->readObjects();
         $i = 0;
         foreach ($userProfileList as $userProfile) {
             if ($i == 10) {
                 break;
             }
             if (!$userProfile->isProtected() && substr($userProfile->birthday, 5) == $currentDay) {
                 $this->userProfiles[] = $userProfile;
                 $i++;
             }
         }
     }
     $this->fetched();
 }
 /**
  * @see	\wcf\system\dashboard\box\IDashboardBox::init()
  */
 public function init(DashboardBox $box, IPage $page)
 {
     parent::init($box, $page);
     if (MODULE_USERS_ONLINE && WCF::getSession()->getPermission('user.profile.canViewUsersOnlineList') && count(WCF::getUserProfileHandler()->getFollowingUsers())) {
         $this->usersOnlineList = new UsersOnlineList();
         $this->usersOnlineList->getConditionBuilder()->add('session.userID IN (?)', array(WCF::getUserProfileHandler()->getFollowingUsers()));
         $this->usersOnlineList->sqlLimit = 10;
         $this->usersOnlineList->readObjects();
     }
     $this->fetched();
 }
 /**
  * @see	\wcf\system\dashboard\box\IDashboardBox::init()
  */
 public function init(DashboardBox $box, IPage $page)
 {
     parent::init($box, $page);
     if (WCF::getUser()->userID && count(WCF::getUserProfileHandler()->getFollowingUsers())) {
         $this->canFilterByFollowedUsers = true;
     }
     $this->eventList = new ViewableUserActivityEventList();
     if ($this->canFilterByFollowedUsers && WCF::getUser()->recentActivitiesFilterByFollowing) {
         $this->filteredByFollowedUsers = true;
         $this->eventList->getConditionBuilder()->add('user_activity_event.userID IN (?)', array(WCF::getUserProfileHandler()->getFollowingUsers()));
     }
     $this->eventList->sqlLimit = RECENT_ACTIVITY_ITEMS;
     $this->eventList->readObjects();
     $this->lastEventTime = $this->eventList->getLastEventTime();
     // removes orphaned and non-accessable events
     UserActivityEventHandler::validateEvents($this->eventList);
     $this->fetched();
 }
 /**
  * Checks the 'canViewOnlineStatus' setting.
  * 
  * @param	integer		$userID
  * @param	integer		$canViewOnlineStatus
  * @return	boolean
  */
 public static function isVisible($userID, $canViewOnlineStatus)
 {
     if (WCF::getSession()->getPermission('admin.user.canViewInvisible') || $userID == WCF::getUser()->userID) {
         return true;
     }
     switch ($canViewOnlineStatus) {
         case 0:
             // everyone
             return true;
         case 1:
             // registered
             if (WCF::getUser()->userID) {
                 return true;
             }
             break;
         case 2:
             // following
             if (WCF::getUserProfileHandler()->isFollower($userID)) {
                 return true;
             }
             break;
     }
     return false;
 }