/** * Returns an instance of class (singleton pattern implementation). * * @return NEWSFEED_BOL_ActionSetDao */ public static function getInstance() { if (self::$classInstance === null) { self::$classInstance = new self(); } return self::$classInstance; }
private function __construct() { $this->actionDao = NEWSFEED_BOL_ActionDao::getInstance(); $this->actionFeedDao = NEWSFEED_BOL_ActionFeedDao::getInstance(); $this->followDao = NEWSFEED_BOL_FollowDao::getInstance(); $this->likeDao = NEWSFEED_BOL_LikeDao::getInstance(); $this->statusDao = NEWSFEED_BOL_StatusDao::getInstance(); $this->activityDao = NEWSFEED_BOL_ActivityDao::getInstance(); $this->cronCommandDao = NEWSFEED_BOL_CronCommandDao::getInstance(); $this->actionSetDao = NEWSFEED_BOL_ActionSetDao::getInstance(); }
public function findCountByUser($userId, $startTime, $formats = null) { $cacheKey = md5('user_feed_count' . $userId); $cachedCount = OW::getCacheManager()->load($cacheKey); if ($cachedCount !== null) { return $cachedCount; } $followDao = NEWSFEED_BOL_FollowDao::getInstance(); $actionFeedDao = NEWSFEED_BOL_ActionFeedDao::getInstance(); $activityDao = NEWSFEED_BOL_ActivityDao::getInstance(); $actionSetDao = NEWSFEED_BOL_ActionSetDao::getInstance(); /*$actionSetDao->deleteActionSetUserId($userId); $actionSetDao->generateActionSet($userId, $startTime);*/ $queryParts = BOL_UserDao::getInstance()->getUserQueryFilter("cactivity", "userId", array("method" => "NEWSFEED_BOL_ActionDao::findCountByUser")); if ($formats !== null) { $queryParts["where"] .= " AND action.format IN ( '" . implode("','", $formats) . "' )"; } $query = 'SELECT COUNT(DISTINCT `id`) FROM ( SELECT action.`id` FROM ' . $this->getTableName() . ' action INNER JOIN ' . $activityDao->getTableName() . ' activity ON action.id = activity.actionId INNER JOIN `' . $actionSetDao->getTableName() . '` cactivity ON action.id = cactivity.actionId ' . $queryParts["join"] . ' INNER JOIN ' . $actionFeedDao->getTableName() . ' action_feed ON activity.id=action_feed.activityId LEFT JOIN ' . $followDao->getTableName() . ' follow ON action_feed.feedId = follow.feedId AND action_feed.feedType = follow.feedType WHERE ' . $queryParts["where"] . ' AND cactivity.userId = :u AND activity.status=:s AND activity.timeStamp<:st AND ( ( follow.userId=:u AND activity.visibility & :vf ) ) UNION SELECT action.`id` FROM ' . $this->getTableName() . ' action INNER JOIN ' . $activityDao->getTableName() . ' activity ON action.id = activity.actionId INNER JOIN `' . $actionSetDao->getTableName() . '` cactivity ON action.id = cactivity.actionId ' . $queryParts["join"] . ' WHERE ' . $queryParts["where"] . ' AND cactivity.userId = :u AND activity.status=:s AND activity.timeStamp<:st AND ( ( activity.userId=:u AND activity.visibility & :va ) ) UNION SELECT action.`id` FROM ' . $this->getTableName() . ' action INNER JOIN ' . $activityDao->getTableName() . ' activity ON action.id = activity.actionId INNER JOIN `' . $actionSetDao->getTableName() . '` cactivity ON action.id = cactivity.actionId ' . $queryParts["join"] . ' INNER JOIN ' . $actionFeedDao->getTableName() . ' action_feed ON activity.id=action_feed.activityId WHERE ' . $queryParts["where"] . ' AND cactivity.userId = :u AND activity.status=:s AND activity.timeStamp<:st AND ( ( action_feed.feedId=:u AND action_feed.feedType="user" AND activity.visibility & :vfeed ) ) UNION SELECT action.`id` FROM ' . $this->getTableName() . ' action INNER JOIN ' . $activityDao->getTableName() . ' activity ON action.id = activity.actionId INNER JOIN `' . $actionSetDao->getTableName() . '` cactivity ON action.id = cactivity.actionId ' . $queryParts["join"] . ' INNER JOIN ' . $activityDao->getTableName() . ' subscribe ON activity.actionId=subscribe.actionId and subscribe.activityType=:as AND subscribe.userId=:u WHERE ' . $queryParts["where"] . ' AND cactivity.userId = :u AND activity.status=:s AND activity.timeStamp<:st ) a '; $count = $this->dbo->queryForColumn($query, array('u' => $userId, 'va' => NEWSFEED_BOL_Service::VISIBILITY_AUTHOR, 'vf' => NEWSFEED_BOL_Service::VISIBILITY_FOLLOW, 'vfeed' => NEWSFEED_BOL_Service::VISIBILITY_FEED, 's' => NEWSFEED_BOL_Service::ACTION_STATUS_ACTIVE, 'st' => empty($startTime) ? time() : $startTime, 'peb' => NEWSFEED_BOL_Service::PRIVACY_EVERYBODY, 'ac' => NEWSFEED_BOL_Service::SYSTEM_ACTIVITY_CREATE, 'as' => NEWSFEED_BOL_Service::SYSTEM_ACTIVITY_SUBSCRIBE)); $cacheLifeTime = self::CACHE_LIFETIME; $cacheTags = array(self::CACHE_TAG_ALL, self::CACHE_TAG_USER, self::CACHE_TAG_USER_PREFIX . $userId); OW::getCacheManager()->save($count, $cacheKey, $cacheTags, $cacheLifeTime); return $count; }