示例#1
0
 /**
  * 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));
    }
示例#3
0
 public function removeFollow($userId, $feedType, $feedId)
 {
     return $this->followDao->removeFollow($userId, $feedType, $feedId);
 }
示例#4
0
 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));
 }
示例#5
0
    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;
    }