/** * Returns an instance of class (singleton pattern implementation). * * @return NEWSFEED_BOL_FollowDao */ public static function getInstance() { if (self::$classInstance === null) { self::$classInstance = new self(); } return self::$classInstance; }
/** * @param int $userId * @param int $startTime */ public function generateActionSet($userId, $startTime = null) { $followDao = NEWSFEED_BOL_FollowDao::getInstance(); $actionFeedDao = NEWSFEED_BOL_ActionFeedDao::getInstance(); $activityDao = NEWSFEED_BOL_ActivityDao::getInstance(); /*$query = ' REPLACE INTO '. $this->getTableName() . ' ( `actionId`, `userId`, `timestamp` ) SELECT DISTINCT sactivity.actionId, :u as `userId`, :st FROM ' . $activityDao->getTableName() . ' sactivity INNER JOIN ' . $actionFeedDao->getTableName() . ' saction_feed ON sactivity.id=saction_feed.activityId INNER JOIN ' . $followDao->getTableName() . ' sfollow ON saction_feed.feedId = sfollow.feedId AND saction_feed.feedType = sfollow.feedType WHERE sactivity.status=:s AND sactivity.activityType=:ac AND sactivity.timeStamp<:st AND sfollow.userId=:u AND ( sactivity.privacy=sfollow.permission OR sactivity.privacy=:peb) AND sactivity.visibility & :vf UNION SELECT DISTINCT sactivity.actionId, :u as `userId`, :st FROM ' . $activityDao->getTableName() . ' sactivity INNER JOIN ' . $actionFeedDao->getTableName() . ' saction_feed ON sactivity.id=saction_feed.activityId WHERE sactivity.status=:s AND sactivity.activityType=:ac AND sactivity.timeStamp<:st AND saction_feed.feedId=:u AND saction_feed.feedType="user" AND sactivity.visibility & :vfeed UNION SELECT DISTINCT sactivity.actionId, :u as `userId`, :st FROM ' . $activityDao->getTableName() . ' sactivity WHERE sactivity.status=:s AND sactivity.timeStamp<:st AND ( sactivity.userId=:u AND sactivity.visibility & :va )';*/ $query = ' REPLACE INTO ' . $this->getTableName() . ' ( `actionId`, `userId`, `timestamp` ) SELECT DISTINCT sactivity.actionId, :u as `userId`, :st FROM ' . $activityDao->getTableName() . ' sactivity INNER JOIN ' . $actionFeedDao->getTableName() . ' saction_feed ON sactivity.id=saction_feed.activityId INNER JOIN ' . $followDao->getTableName() . ' sfollow ON saction_feed.feedId = sfollow.feedId AND saction_feed.feedType = sfollow.feedType WHERE sactivity.status=:s AND sactivity.activityType=:ac AND sactivity.timeStamp<:st AND sfollow.userId=:u AND ( sactivity.privacy=sfollow.permission OR sactivity.privacy=:peb) AND sactivity.visibility & :vf UNION SELECT DISTINCT sactivity.actionId, :u as `userId`, :st FROM ' . $activityDao->getTableName() . ' sactivity INNER JOIN ' . $activityDao->getTableName() . ' cactivity ON sactivity.actionId = cactivity.actionId WHERE sactivity.status=:s AND sactivity.timeStamp<:st AND cactivity.activityType=:ac AND cactivity.visibility & :va AND sactivity.userId=:u AND sactivity.visibility & :va AND cactivity.status=:s UNION SELECT DISTINCT sactivity.actionId, :u as `userId`, :st FROM ' . $activityDao->getTableName() . ' sactivity INNER JOIN ' . $actionFeedDao->getTableName() . ' saction_feed ON sactivity.id=saction_feed.activityId INNER JOIN ' . $activityDao->getTableName() . ' cactivity ON sactivity.actionId = cactivity.actionId WHERE sactivity.status=:s AND sactivity.timeStamp<:st AND cactivity.activityType=:ac AND sactivity.visibility & :vfeed AND saction_feed.feedId=:u AND saction_feed.feedType="user" AND cactivity.status=:s'; $this->dbo->update($query, array('u' => (int) $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)); }
public function removeFollow($userId, $feedType, $feedId) { return $this->followDao->removeFollow($userId, $feedType, $feedId); }
public function findUserFeedActivity($userId, $actionIds) { $followDao = NEWSFEED_BOL_FollowDao::getInstance(); $actionFeedDao = NEWSFEED_BOL_ActionFeedDao::getInstance(); $unionQueryList = array(); $queryParts = BOL_UserDao::getInstance()->getUserQueryFilter("activity", "userId", array("method" => "NEWSFEED_BOL_ActivityDao::findUserFeedActivity")); $unionQueryList[] = 'SELECT activity.* FROM ' . $this->getTableName() . ' activity WHERE activity.actionId IN(' . implode(', ', $actionIds) . ') AND activity.status=:s AND activity.privacy=:peb AND activity.visibility & :vfeed AND activity.activityType IN ("' . implode('", "', NEWSFEED_BOL_Service::getInstance()->SYSTEM_ACTIVITIES) . '")'; foreach ($actionIds as $actionId) { $unionQueryList[] = ' SELECT a.* FROM ( SELECT DISTINCT activity.* FROM ' . $this->getTableName() . ' activity ' . $queryParts["join"] . ' LEFT 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 activity.actionId = ' . $actionId . ' AND ( (activity.status=:s AND ( ( follow.userId=:u AND activity.visibility & :vf AND ( activity.privacy=:peb OR activity.privacy=follow.permission ) ) OR ( activity.userId=:u AND activity.visibility & :va ) OR ( action_feed.feedId=:u AND action_feed.feedType="user" AND activity.visibility & :vfeed ) )) ) ORDER BY activity.timeStamp DESC, activity.id DESC LIMIT 100 ) a'; } $query = implode(' UNION ', $unionQueryList) . " ORDER BY 7 DESC, 1 DESC"; return $this->dbo->queryForObjectList($query, $this->getDtoClassName(), 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, 'peb' => NEWSFEED_BOL_Service::PRIVACY_EVERYBODY)); }
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; }