Вход Регистрация
Файл: upload/module/feed/include/service/feed.class.php
Строк: 667
<?php
/**
 * [PHPFOX_HEADER]
 */

defined('PHPFOX') or exit('NO DICE!');

/**
 *
 *
 * @copyright        [PHPFOX_COPYRIGHT]
 * @author          Raymond Benc
 * @package          Module_Feed
 * @version         $Id: feed.class.php 4491 2012-07-10 10:54:57Z Raymond_Benc $
 */
class Feed_Service_Feed extends Phpfox_Service 
{    
    private 
$_aViewMoreFeeds = array();
    private 
$_aCallback = array();
    private 
$_sLastDayInfo '';
    private 
$_aFeedTimeline = array('left' => array(), 'right' => array());    
    
    
/**
     * Class constructor
     */
    
public function __construct()
    {
        
$this->_sTable Phpfox::getT('feed');

        ((
$sPlugin Phpfox_Plugin::get('feed.service_feed___construct')) ? eval($sPlugin) : false);
    }
    
    public function 
getTimeLineYears($iUserId$iLastTimeStamp)
    {                    
        
$aNewYears = array();
        
$sCacheId $this->cache()->set(array('timeline'$iUserId));
        if (!(
$aNewYears $this->cache()->get($sCacheId)))
        {
            
$aYears range(date('Y'PHPFOX_TIME), date('Y'$iLastTimeStamp));        
            foreach (
$aYears as $iYear)
            {
                
$iStartYear mktime(00011$iYear);
                
$iEndYear mktime(0001231$iYear);            

                
$iCnt $this->database()->select('COUNT(*)')
                    ->
from(Phpfox::getT('feed'))
                    ->
where('user_id = ' . (int) $iUserId .' AND feed_reference = 0 AND time_stamp > '' . $iStartYear . '' AND time_stamp <= '' . $iEndYear . ''')
                    ->
execute('getSlaveField');

                if (
$iCnt)
                {
                    
$aNewYears[] = $iYear;
                }
            }
            
            
$this->cache()->save($sCacheId$aNewYears);
        }

        if (!
is_array($aNewYears))
        {
            
$aNewYears = array();
        }
        
        
$iBirthYear date('Y'$iLastTimeStamp);
        
$iDOB $this->database()->select('dob_setting')->from(Phpfox::getT('user_field'))->execute('getSlaveField');
        
        if (!
in_array($iBirthYear$aNewYears) && ($iDOB == || $iDOB == 4))
        {
            
$aNewYears[] = $iBirthYear;
        }
        
        
$aYears = array();
        foreach (
$aNewYears as $iYear)
        {
            
$aMonths = array();
            foreach (
range(112) as $iMonth)
            {
                if (
$iYear == date('Y'PHPFOX_TIME) && $iMonth date('n'PHPFOX_TIME))
                {
                    
                }
                elseif (
$iYear == date('Y'$iLastTimeStamp) && $iMonth date('n'$iLastTimeStamp))
                {
                    
                }
                else
                {
                    
$aMonths[] = array(
                        
'id' => $iMonth,
                        
'phrase' => Phpfox::getTime('F'mktime(00$iMonth1$iYear), false)
                    );
                }
            }
            
            
$aMonths array_reverse($aMonths);

            
$aYears[] = array(
                
'year' => $iYear,
                
'months' => $aMonths
            
);
        }

        return 
$aYears;
    }
    
    public function 
getForItem($sModule$iItemId)
    {
        
$aRow $this->database()->select('*')
            ->
from(Phpfox::getT('feed'))
            ->
where('type_id = '' . $this->database()->escape($sModule) . '' AND item_id = ' . (int) $iItemId)
            ->
execute('getSlaveRow');
    
        if (isset(
$aRow['feed_id']))
        {
            return 
$aRow;
        }
        
        return 
false;
    }
    
    public function 
callback($aCallback)
    {
        
$this->_aCallback $aCallback;
        
        return 
$this;
    }
    
    public function 
setTable($sTable)
    {
        
$this->_sTable $sTable;
    }

    public function 
get($iUserid null$iFeedId null$iPage 0$bForceReturn false)
    {
        
$oUrl Phpfox::getLib('url');
        
$oReq Phpfox::getLib('request');
        
$oParseOutput Phpfox::getLib('parse.output');
        
        if (
$oReq->get('get-new'))
        {
            
// $bForceReturn = true;
        
}
        
        if ((
$iCommentId $oReq->getInt('comment-id')))
        {
            if (isset(
$this->_aCallback['feed_comment']))
            {
                
$aCustomCondition = array('feed.type_id = '' . $this->_aCallback['feed_comment'] . '' AND feed.item_id = ' . (int) $iCommentId ' AND feed.parent_user_id = ' . (int) $this->_aCallback['item_id']);
            }
            else
            {
                
$aCustomCondition = array('feed.type_id IN('feed_comment', 'feed_egift') AND feed.item_id = ' . (int) $iCommentId ' AND feed.parent_user_id = ' . (int) $iUserid);
            }

            
$iFeedId true;
        }
        elseif ((
$iStatusId $oReq->getInt('status-id')))
        {
            
$aCustomCondition = array('feed.type_id = 'user_status' AND feed.item_id = ' . (int) $iStatusId ' AND feed.user_id = ' . (int) $iUserid);
            
$iFeedId true;
        }
        elseif ((
$iLinkId $oReq->getInt('link-id')))
        {
            
$aCustomCondition = array('feed.type_id = 'link' AND feed.item_id = ' . (int) $iLinkId ' AND feed.user_id = ' . (int) $iUserid);
            
$iFeedId true;
        }
        elseif ((
$iLinkId $oReq->getInt('plink-id')))
        {
            
$aCustomCondition = array('feed.type_id = 'link' AND feed.item_id = ' . (int) $iLinkId ' AND feed.parent_user_id  = ' . (int) $iUserid);
            
$iFeedId true;
        }        
        elseif ((
$iPokeId $oReq->getInt('poke-id')))
        {
            
$aCustomCondition = array('feed.type_id = 'poke' AND feed.item_id = ' . (int) $iPokeId ' AND feed.user_id = ' . (int) $iUserid);
            
$iFeedId true;
        }            
        
        
$iTotalFeeds = (int) Phpfox::getComponentSetting(($iUserid === null Phpfox::getUserId() : $iUserid), 'feed.feed_display_limit_' . ($iUserid !== null 'profile' 'dashboard'), Phpfox::getParam('feed.feed_display_limit'));            
        
        
$iOffset = ($iPage $iTotalFeeds);
        
        ((
$sPlugin Phpfox_Plugin::get('feed.service_feed_get_start')) ? eval($sPlugin) : false);

        
$aCond = array();
        if (isset(
$this->_aCallback['module']))
        {
            
$aNewCond = array();
            if ((
$iCommentId $oReq->getInt('comment-id')))
            {
                if (!isset(
$this->_aCallback['feed_comment']))
                {
                    
$aCustomCondition = array('feed.type_id = '' . $this->_aCallback['module'] . '_comment' AND feed.item_id = ' . (int) $iCommentId '');
                }                
            }            
            
$aNewCond[] = 'AND feed.parent_user_id = ' . (int) $this->_aCallback['item_id'];
            if (
$iUserid !== null && $iFeedId !== null)
            {
                
$aNewCond[] = 'AND feed.feed_id = ' . (int) $iFeedId ' AND feed.user_id = ' . (int) $iUserid;    
            }

            
$aRows $this->database()->select('feed.*, ' Phpfox::getUserField() .', u.view_id')
                ->
from(Phpfox::getT($this->_aCallback['table_prefix'] . 'feed'), 'feed')            
                ->
join(Phpfox::getT('user'), 'u''u.user_id = feed.user_id')            
                ->
where((isset($aCustomCondition) ? $aCustomCondition $aNewCond))
                ->
order('feed.time_stamp DESC')
                ->
limit($iOffset$iTotalFeeds)
                ->
execute('getSlaveRows');                                    
        }
        elseif ((
$sIds $oReq->get('ids')))
        {
            
$aParts explode(','$oReq->get('ids'));
            
$sNewIds '';
            foreach (
$aParts as $sPart)
            {
                
$sNewIds .= (int) $sPart ',';
            }
            
$sNewIds rtrim($sNewIds',');
            
            
$aRows $this->database()->select('feed.*, ' Phpfox::getUserField().', u.view_id')
                ->
from($this->_sTable'feed')            
                ->
join(Phpfox::getT('user'), 'u''u.user_id = feed.user_id')    
                ->
where('feed.feed_id IN(' $sNewIds ')')            
                ->
order('feed.time_stamp DESC')
                ->
execute('getSlaveRows');                
        }
        elseif (
$iUserid === null && $iFeedId !== null)
        {            
            
$aRows $this->database()->select('feed.*, ' Phpfox::getUserField().', u.view_id')
                ->
from($this->_sTable'feed')            
                ->
join(Phpfox::getT('user'), 'u''u.user_id = feed.user_id')    
                ->
where('feed.feed_id = ' . (int) $iFeedId)            
                ->
order('feed.time_stamp DESC')
                ->
execute('getSlaveRows');                
        }        
        elseif (
$iUserid !== null && $iFeedId !== null)
        {            
            
$aRows $this->database()->select('feed.*, apps.app_title, ' Phpfox::getUserField().', u.view_id')
                ->
from($this->_sTable'feed')            
                ->
join(Phpfox::getT('user'), 'u''u.user_id = feed.user_id')
                ->
leftJoin(Phpfox::getT('app'), 'apps''apps.app_id = feed.app_id')
                ->
where((isset($aCustomCondition) ? $aCustomCondition 'feed.feed_id = ' . (int) $iFeedId ' AND feed.user_id = ' . (int) $iUserid))
                ->
order('feed.time_stamp DESC')
                ->
limit(1)            
                ->
execute('getSlaveRows');            
        }
        elseif (
$iUserid !== null)
        {
            if (
$iUserid == Phpfox::getUserId())
            {
                
$aCond[] = 'AND feed.privacy IN(0,1,2,3,4)';
            }
            else 
            {
                if (
Phpfox::getService('user')->getUserObject($iUserid)->is_friend)
                {
                    
$aCond[] = 'AND feed.privacy IN(0,1,2)';
                }    
                else if (
Phpfox::getService('user')->getUserObject($iUserid)->is_friend_of_friend)
                {
                    
$aCond[] = 'AND feed.privacy IN(0,2)';
                }
                else 
                {
                    
$aCond[] = 'AND feed.privacy IN(0)';
                }
            }
            
            
$iTimelineYear 0;
            if ((
$iTimelineYear Phpfox::getLib('request')->get('year')) && !empty($iTimelineYear))
            {
                
$iMonth 12;
                
$iDay 31;
                if ((
$iTimelineMonth Phpfox::getLib('request')->get('month')) && !empty($iTimelineMonth))
                {
                    
$iMonth $iTimelineMonth;
                    
$iDay Phpfox::getLib('date')->lastDayOfMonth($iMonth$iTimelineYear);                                        
                }        
                
$aCond[] = 'AND feed.time_stamp <= '' . mktime(0, 0, 0, $iMonth, $iDay, $iTimelineYear) . ''';                
            }    
                        
            
$this->database()->select('feed.*')
                ->
from($this->_sTable'feed')
                
// ->join(Phpfox::getT('friend'), 'f', 'f.user_id = feed.user_id AND f.friend_user_id = ' . Phpfox::getUserId())
                
->where(array_merge($aCond, array('AND feed.user_id = ' . (int) $iUserid)))
                ->
union();
            
            if (
Phpfox::isUser())
            {
                
$this->database()->select('feed.*')
                    ->
from($this->_sTable'feed')                
                    ->
join(Phpfox::getT('privacy'), 'p''p.module_id = feed.type_id AND p.item_id = feed.item_id')
                    ->
join(Phpfox::getT('friend_list_data'), 'fld''fld.list_id = p.friend_list_id AND fld.friend_user_id = ' Phpfox::getUserId() . '')
                    ->
where('feed.privacy IN(4) AND feed.user_id = ' . (int) $iUserid ' AND feed.feed_reference = 0')                            
                    ->
union();                    
            }
            
            
            
$this->database()->select('feed.*')
                ->
from($this->_sTable'feed')
                
// ->join(Phpfox::getT('friend'), 'f', 'f.user_id = feed.user_id AND f.friend_user_id = ' . Phpfox::getUserId())
                
->where(array_merge($aCond, array('AND feed.parent_user_id = ' . (int) $iUserid)))
                ->
union();
            
            
$aRows $this->database()->select('feed.*, apps.app_title,  ' Phpfox::getUserField())
                
// ->from($this->_sTable, 'feed')
                
->unionFrom('feed')
                ->
join(Phpfox::getT('user'), 'u''u.user_id = feed.user_id')
                ->
leftJoin(Phpfox::getT('app'), 'apps''apps.app_id = feed.app_id')
                
// ->where($aCond)
                
->order('feed.time_stamp DESC')
                ->
group('feed.feed_id')
                ->
limit($iOffset$iTotalFeeds)            
                ->
execute('getSlaveRows');
            
/*
            static $iIteration = 0;
            $iIteration++;
            if (Phpfox::getService('profile')->timeline())
            {
                $aUserObject = Phpfox::getService('user')->getUserObject($iUserid);
                if (isset($aUserObject->user_id))
                {
                    $iBirthYear = date('Y', $aUserObject->birthday_search);
                    if ($iBirthYear == $iTimelineYear || empty($aRows) && $iIteration >= 2)
                    {
                        $aRows[] = array(
                            'feed_id' => 'ub' . $aUserObject->user_id,
                            'type_id' => 'user_birth',
                            'item_id' => $aUserObject->user_id,
                            'time_stamp' => $aUserObject->birthday_search,
                            'privacy' => '0',
                            'privacy_comment' => '0',
                            'user_image' => $aUserObject->user_image,
                            'full_name' => $aUserObject->full_name,
                            'user_name' => $aUserObject->user_name,
                            'user_id' => $aUserObject->user_id,
                            'parent_feed_id' => '0'
                        );
                    }                    
                }
            }
             * 
             */
        
}
        else
        {
            
// Users must be active within 7 days or we skip their activity feed
            
$iLastActiveTimeStamp = ((int) Phpfox::getParam('feed.feed_limit_days') <= : (PHPFOX_TIME - (86400 Phpfox::getParam('feed.feed_limit_days'))));            
            if (
Phpfox::getUserParam('privacy.can_view_all_items'))
            {                
                
$aRows $this->database()->select('feed.*, f.friend_id AS is_friend, apps.app_title, ' Phpfox::getUserField())
                        ->
from(Phpfox::getT('feed'), 'feed')            
                        ->
join(Phpfox::getT('user'), 'u''u.user_id = feed.user_id')            
                        ->
leftJoin(Phpfox::getT('friend'), 'f''f.user_id = feed.user_id AND f.friend_user_id = ' Phpfox::getUserId())
                        ->
leftJoin(Phpfox::getT('app'), 'apps''apps.app_id = feed.app_id')
                        ->
order('feed.time_stamp DESC')
                        ->
group('feed.feed_id')
                        ->
limit($iOffset$iTotalFeeds)            
                        ->
where('feed.time_stamp > '' . $iLastActiveTimeStamp . '' AND feed.feed_reference = 0')
                        ->
execute('getSlaveRows');                                            
            }
            else
            {
                if (
Phpfox::getParam('feed.feed_only_friends'))
                {                    
                    
// Get my friends feeds
                    
$this->database()->select('feed.*')
                        ->
from($this->_sTable'feed')
                        ->
join(Phpfox::getT('friend'), 'f''f.user_id = feed.user_id AND f.friend_user_id = ' Phpfox::getUserId())
                        ->
where('feed.privacy IN(0,1,2) AND feed.time_stamp > '' . $iLastActiveTimeStamp . '' AND feed.feed_reference = 0')
                        ->
union();

                    
// Get my feeds
                    
$this->database()->select('feed.*')
                        ->
from($this->_sTable'feed')
                        ->
where('feed.privacy IN(0,1,2,3,4) AND feed.user_id = ' Phpfox::getUserId() . ' AND feed.time_stamp > '' . $iLastActiveTimeStamp . '' AND feed.feed_reference = 0')
                        ->
union();                    
                }
                else 
                {                    
                    
// Get my friends feeds
                    
$this->database()->select('feed.*')
                        ->
from($this->_sTable'feed')
                        ->
join(Phpfox::getT('friend'), 'f''f.user_id = feed.user_id AND f.friend_user_id = ' Phpfox::getUserId())
                        ->
where('feed.privacy IN(1,2) AND feed.time_stamp > '' . $iLastActiveTimeStamp . '' AND feed.feed_reference = 0')
                        ->
union();        

                    
// Get my friends of friends feeds
                    
$this->database()->select('feed.*')
                        ->
from($this->_sTable'feed')
                        ->
join(Phpfox::getT('friend'), 'f1''f1.user_id = feed.user_id')
                        ->
join(Phpfox::getT('friend'), 'f2''f2.user_id = ' Phpfox::getUserId() . ' AND f2.friend_user_id = f1.friend_user_id')                    
                        ->
where('feed.privacy IN(2) AND feed.time_stamp > '' . $iLastActiveTimeStamp .  '' AND feed.feed_reference = 0')
                        ->
union();                

                    
// Get my feeds
                    
$this->database()->select('feed.*')
                        ->
from($this->_sTable'feed')
                        ->
where('feed.privacy IN(1,2,3,4) AND feed.user_id = ' Phpfox::getUserId() . ' AND feed.time_stamp > '' . $iLastActiveTimeStamp . '' AND feed.feed_reference = 0')
                        ->
union();

                    
// Get public feeds
                    
$this->database()->select('feed.*')
                        ->
from($this->_sTable'feed')
                        ->
where('feed.privacy IN(0) AND feed.time_stamp > '' . $iLastActiveTimeStamp . '' AND feed.feed_reference = 0')
                        ->
union();                    

                    
// Get feeds based on custom friends lists    
                    
$this->database()->select('feed.*')
                        ->
from($this->_sTable'feed')                
                        ->
join(Phpfox::getT('privacy'), 'p''p.module_id = feed.type_id AND p.item_id = feed.item_id')
                        ->
join(Phpfox::getT('friend_list_data'), 'fld''fld.list_id = p.friend_list_id AND fld.friend_user_id = ' Phpfox::getUserId() . '')
                        ->
where('feed.privacy IN(4) AND feed.time_stamp > '' . $iLastActiveTimeStamp . '' AND feed.feed_reference = 0')                            
                        ->
union();                
                }            

                
$aRows $this->database()->select('feed.*, f.friend_id AS is_friend, apps.app_title, u.view_id,  ' Phpfox::getUserField())
                        ->
unionFrom('feed')            
                        ->
join(Phpfox::getT('user'), 'u''u.user_id = feed.user_id')            
                        ->
leftJoin(Phpfox::getT('friend'), 'f''f.user_id = feed.user_id AND f.friend_user_id = ' Phpfox::getUserId())
                        ->
leftJoin(Phpfox::getT('app'), 'apps''apps.app_id = feed.app_id')
                        ->
order('feed.time_stamp DESC')
                        ->
group('feed.feed_id')
                        ->
limit($iOffset$iTotalFeeds)            
                        ->
execute('getSlaveRows');                    
            }
        }    

        if (
$bForceReturn === true)
        {
            return 
$aRows;
        }
        
        
$bFirstCheckOnComments false;
        if (
Phpfox::getParam('feed.allow_comments_on_feeds') && Phpfox::isUser() && Phpfox::isModule('comment'))
        {
            
$bFirstCheckOnComments true;    
        }
        
        
$iLoopMaxCount Phpfox::getParam('feed.group_duplicate_feeds');    
        if (
Phpfox::getService('profile')->timeline())
        {
            
$iLoopMaxCount 0;
        }
        
$aFeedLoop = array();
        
$aLoopHistory = array();
        if (
$iLoopMaxCount 0)
        {
            foreach (
$aRows as $iKey => $aRow)
            {                
                
$sFeedKey $aRow['user_id'] . $aRow['type_id'] . date('dmyH'$aRow['time_stamp']);    
                if (isset(
$aRow['type_id']))
                {
                    
$aModule explode('_'$aRow['type_id']);
                    if (isset(
$aModule[0]) && Phpfox::isModule($aModule[0]) && Phpfox::hasCallback($aModule[0] . (isset($aModule[1]) ? '_' $aModule[1] : ''), 'getReportRedirect'))
                    {        
                        
$aRow['report_module'] = $aRows[$iKey]['report_module'] = $aModule[0] . (isset($aModule[1]) ? '_' $aModule[1] : '');
                        
$aRow['report_phrase'] = $aRows[$iKey]['report_phrase'] = 'Report this entry';
                        
$aRow['force_report'] = $aRows[$iKey]['force_report'] = true;
                    }
                }
                
                if (isset(
$aFeedLoop[$sFeedKey]))
                {
                    if (!isset(
$aLoopHistory[$sFeedKey]))
                    {
                        
$aLoopHistory[$sFeedKey] = 0;
                    }
                    
                    
$aLoopHistory[$sFeedKey]++;
    
                    if (
$aLoopHistory[$sFeedKey] >= ($iLoopMaxCount 1))
                    {                
                        
$bIsLoop true;
                        
                        
$this->_aViewMoreFeeds[$sFeedKey][] = $aRow;
                    }
                    else 
                    {
                        
                        
$aFeedLoop[$sFeedKey $aLoopHistory[$sFeedKey]] = $aRow;    
                        
                        continue;
                    }
                }            
                else 
                {            
                    
$aFeedLoop[$sFeedKey] = $aRow;    
                }
                
                if (isset(
$bIsLoop))
                {                
                    unset(
$bIsLoop);
                }            
            }                
        }
        else 
        {
            
$aFeedLoop $aRows;    
        }
        
        
$aFeeds = array();
        
$aCacheData = array();
        
$sLastFriendId '';
        
$sLastPhotoId 0;
        foreach (
$aFeedLoop as $sKey => $aRow)
        {            
            
$aRow['feed_time_stamp'] = $aRow['time_stamp'];
            if ((
$aReturn $this->_processFeed($aRow$sKey$iUserid$bFirstCheckOnComments)))
            {
                if (isset(
$aReturn['force_user']))
                {
                    
$aReturn['user_name'] = $aReturn['force_user']['user_name'];
                    
$aReturn['full_name'] = $aReturn['force_user']['full_name'];
                    
$aReturn['user_image'] = $aReturn['force_user']['user_image'];
                    
$aReturn['server_id'] = $aReturn['force_user']['server_id'];
                }
                
                
$aReturn['feed_month_year'] = date('m_Y'$aRow['feed_time_stamp']);
                
$aReturn['feed_time_stamp'] = $aRow['feed_time_stamp'];
                
$aFeeds[] = $aReturn;
            }        
        }
        
        if (
Phpfox::getService('profile')->timeline())
        {        
            
$iSubCnt 0;
            foreach (
$aFeeds as $iKey => $aFeed)
            {
                if (
is_int($iKey/2))
                {
                    
$this->_aFeedTimeline['left'][] = $aFeed;
                }
                else
                {
                    
$this->_aFeedTimeline['right'][] = $aFeed;
                }
                
                
$iSubCnt++;
                if (
$iSubCnt === 1)
                {
                    
$sMonth date('m'$aFeed['feed_time_stamp']);
                    
$sYear date('Y'$aFeed['feed_time_stamp']);
                    if (
$sMonth == date('m'PHPFOX_TIME) && $sYear == date('Y'PHPFOX_TIME))
                    {
                        
$this->_sLastDayInfo '';
                    }
                    elseif (
$sYear == date('Y'PHPFOX_TIME))
                    {
                        
$this->_sLastDayInfo Phpfox::getTime('F'$aFeed['feed_time_stamp'], false);
                    }
                    else
                    {
                        
$this->_sLastDayInfo Phpfox::getTime('F Y'$aFeed['feed_time_stamp'], false);
                    }
                }
            }
        }
        
        return 
$aFeeds;
    }    
    
    public function 
getTimeline()
    {
        return 
$this->_aFeedTimeline;
    }
    
    public function 
getLastDay()
    {
        return 
$this->_sLastDayInfo;
    }    
    
    public function 
getLikeForFeed($iFeed)
    {
        
$aLikeRows $this->database()->select('fl.feed_id, ' Phpfox::getUserField())
            ->
from(Phpfox::getT('feed_like'), 'fl')
            ->
join(Phpfox::getT('user'), 'u''u.user_id = fl.user_id')
            ->
where('fl.feed_id = ' . (int) $iFeed)
            ->
execute('getSlaveRows');
                        
        
$aLikes = array();
        
$aLikesCount = array();
        foreach (
$aLikeRows as $aLikeRow)
        {
            if (!isset(
$aLikesCount[$aLikeRow['feed_id']]))
            {
                
$aLikesCount[$aLikeRow['feed_id']] = 0;
            }
                        
            
$aLikesCount[$aLikeRow['feed_id']]++;
                        
            if (
$aLikesCount[$aLikeRow['feed_id']] > 3)
            {
                continue;
            }
                        
            
$aLikes[$aLikeRow['feed_id']][] = $aLikeRow;    
        }
                    
        return array(
$aLikesCount$aLikes);
    }

    
/**
     * We get the redirect URL of the item depending on which module
     * it belongs to. We use the callback to connect to the correct module.
     *
     * @param integer $iId Is the ID# of the feed
     * @return boolean|string If we are unable to find the correct feed, If we find the correct feed
     */
    
public function getRedirect($iId)
    {
        
// Get the feed
        
$aFeed $this->database()->select('privacy_comment, feed_id, type_id, item_id, user_id')
            ->
from($this->_sTable)
            ->
where('feed_id =' . (int) $iId)
            ->
execute('getSlaveRow');
        
        
        
// Make sure we found a feed
        
if (!isset($aFeed['feed_id']))
        {
            return 
false;
        }
        
$aProcessedFeed $this->_processFeed($aFeedfalse$aFeed['user_id'], false);        
        
Phpfox::getLib('url')->send($aProcessedFeed['feed_link'], array(), null302);
                
/* Apparently in some CGI servers for some reason the redirect
                 * triggers a 500 error when the callback doesnt exist
                 * http://www.phpfox.com/tracker/view/6356/
                 */
                
if (!Phpfox::hasCallback($aFeed['type_id'], 'getFeedRedirect'))
                {
                    return 
false;
                }
        
// Run the callback so we get the correct link
        
return Phpfox::callback($aFeed['type_id'] . '.getFeedRedirect'$aFeed['item_id'], $aFeed['child_item_id']);
    }
    
    public function 
getFeed($iId)
    {
        return 
$this->database()->select('*')
            ->
from(Phpfox::getT((isset($this->_aCallback['table_prefix']) ? $this->_aCallback['table_prefix'] : '') . 'feed'))
            ->
where('feed_id =' . (int) $iId)
            ->
execute('getSlaveRow');
    }
    
    public function 
shortenText($sText)
    {
        
$oParseOutput Phpfox::getLib('parse.output');
        
        return 
$oParseOutput->split($oParseOutput->shorten($oParseOutput->parse($sText), 300'feed.view_more'true), 40);    
    }
    
    public function 
shortenTitle($sText)
    {
        
$oParseOutput Phpfox::getLib('parse.output');
        
        return 
$oParseOutput->shorten($oParseOutput->clean($sText), 60'...');
    }
    
    public function 
quote($sText)
    {
        
Phpfox::getLib('parse.output')->setImageParser(array('width' => 200'height' => 200));

        
$sNewText '<div class="p_4">' $this->shortenText($sText) . '</div>';
        
        
Phpfox::getLib('parse.output')->setImageParser(array('clear' => true));
        
        return 
$sNewText;
    }
    
    public function 
getForBrowse($aConds$sSort 'feed.time_stamp DESC'$iRange ''$sLimit '')
    {
        
$iCnt $this->database()->select('COUNT(*)')
            ->
from($this->_sTable'feed')
            ->
where($aConds)
            ->
execute('getSlaveField');                
            
            
$aRows $this->database()->select('feed.*, fl.feed_id AS is_liked, ' Phpfox::getUserField('u1''owner_') . ', ' Phpfox::getUserField('u2''viewer_'))
                ->
from($this->_sTable'feed')
                ->
join(Phpfox::getT('user'), 'u1''u1.user_id = feed.user_id')
                ->
leftJoin(Phpfox::getT('user'), 'u2''u2.user_id = feed.item_user_id')
                ->
leftJoin(Phpfox::getT('feed_like'), 'fl''fl.feed_id = feed.feed_id AND fl.user_id = ' Phpfox::getUserId())
                ->
where($aConds)
                ->
order($sSort)
                ->
limit($iRange$sLimit$iCnt)
                ->
execute('getSlaveRows');            
            
            
$aFeeds = array();
            foreach (
$aRows as $aRow)
            {
                
$aRow['link'] = Phpfox::getLib('url')->makeUrl('feed.view', array('id' => $aRow['feed_id']));

                
$aParts1 explode('.'$aRow['type_id']);
                
$sModule $aParts1[0];
                if (
strpos($sModule'_'))
                {
                    
$aParts explode('_'$sModule);
                    
$sModule $aParts[0];
                    if (
$sModule == 'comment' && isset($aParts[1]) && !Phpfox::isModule($aParts[1]))
                    {
                        continue;
                    }
                }                
                
                if (!
Phpfox::isModule($sModule))
                {
                    continue;
                }
                
                if ((
$aFeed Phpfox::callback($aRow['type_id'] . '.getNewsFeed'$aRow)))
                {
                    if (isset(
$aLikes[$aFeed['feed_id']]))
                    {
                        
$aFeed['like_rows'] = $aLikes[$aFeed['feed_id']];
                    }
                    
                    if (isset(
$aLikesCount[$aFeed['feed_id']]))
                    {
                        
$aFeed['like_count'] = ($aLikesCount[$aFeed['feed_id']] - count($aFeed['like_rows']));
                    }                    
                    
                    
$aFeeds[] = $aFeed;
                }
            }
            
        return array(
$iCnt$aFeeds);
    }
    
    public function 
processAjax($iId)
    {
        
$oAjax Phpfox::getLib('ajax');
        
        
$aFeeds Phpfox::getService('feed')->get(Phpfox::getUserId(), $iId);
        
        if (!isset(
$aFeeds[0]))
        {
            
$oAjax->alert('This item has successfully been submitted. Before it can be displayed it will have to first be approved by a site Admin.');
            
$oAjax->call('$Core.resetActivityFeedForm();');    
                
            return;
        }
        
        
        if (isset(
$aFeeds[0]['type_id']))
        {
            
Phpfox::getLib('template')->assign(array(
                
'aFeed' => $aFeeds[0],
                
'aFeedCallback' => array('module' => str_replace('_comment','',$aFeeds[0]['type_id']), 'item_id' => $aFeeds[0]['item_id'])
                ))->
getTemplate((Phpfox::getService('profile')->timeline() ? 'feed.block.timeline' 'feed.block.entry'));                
        }
        else
        {
            
Phpfox::getLib('template')->assign(array('aFeed' => $aFeeds[0]))->getTemplate('feed.block.entry');                
        }    
        
        
$sId 'js_tmp_comment_' md5('feed_' uniqid() . Phpfox::getUserId()) . '';
        
        
$sNewContent =  '<div id="' $sId '" class="js_temp_new_feed_entry js_feed_view_more_entry_holder">' $oAjax->getContent(false) . '</div>';
        
        if (
Phpfox::getService('profile')->timeline())
        {
            
$oAjax->prepend('.timeline_left_new''<div class="timeline_feed_row"><div class="timeline_arrow_left">0</div><div class="timeline_float_left">0</div>' $sNewContent '</div>');
        }
        else
        {
            
$oAjax->prepend('#js_new_feed_comment'$sNewContent);
        }
        
        
$oAjax->call('$('#' . $sId . '').highlightFade();');
        
        
$oAjax->removeClass('.js_user_feed''row_first');
        
$oAjax->call("iCnt = 0; $('.js_user_feed').each(function(){ iCnt++; if (iCnt == 1) { $(this).addClass('row_first'); } });");
        
$oAjax->call('$Core.resetActivityFeedForm();');    
        
$oAjax->call('$Core.loadInit();');
    }
    
    public function 
getShareLinks()
    {
        if (
$sPlugin Phpfox_Plugin::get('feed.service_feed_getsharelinks__start'))
        {
            eval(
$sPlugin);
            if (isset(
$aPluginReturn))
            {
                return 
$aPluginReturn;
            }
        }
        
$sCacheId $this->cache()->set('feed_share_link');
        
        if (!(
$aLinks $this->cache()->get($sCacheId)))
        {
            
$aLinks $this->database()->select('fs.*')
                ->
from(Phpfox::getT('feed_share'), 'fs')
                ->
join(Phpfox::getT('module'), 'm''m.module_id = fs.module_id AND m.is_active = 1')
                ->
order('fs.ordering ASC')
                ->
execute('getSlaveRows');
                
            foreach (
$aLinks as $iKey => $aLink)
            {
                
$aLinks[$iKey]['module_block'] = $aLink['module_id'] . '.' $aLink['block_name'];
            }
                
            
$this->cache()->save($sCacheId$aLinks);
        }
        
$aNoDuplicates = array();
        if (!
is_array($aLinks) || empty($aLinks))
        {
            return 
$aLinks;
        }
        foreach (
$aLinks as $iKey => $aLink)
        {
            unset(
$aLink['share_id']);
            if (
in_array(serialize($aLink), $aNoDuplicates))
            {
                unset(
$aLinks[$iKey]);
                continue;
            }
            if (
Phpfox::hasCallback($aLink['module_id'], 'checkFeedShareLink') && Phpfox::callback($aLink['module_id'] . '.checkFeedShareLink') === false)
            {
                unset(
$aLinks[$iKey]);
            }
            
$aNoDuplicates[] = serialize($aLink);
        }
        
        return 
$aLinks;
    }

    
/**
     * If a call is made to an unknown method attempt to connect
     * it to a specific plug-in with the same name thus allowing
     * plug-in developers the ability to extend classes.
     *
     * @param string $sMethod is the name of the method
     * @param array $aArguments is the array of arguments of being passed
     */
    
public function __call($sMethod$aArguments)
    {
        
/**
         * Check if such a plug-in exists and if it does call it.
         */
        
if ($sPlugin Phpfox_Plugin::get('feed.service_feed__call'))
        {
            return eval(
$sPlugin);
        }

        
/**
         * No method or plug-in found we must throw a error.
         */
        
Phpfox_Error::trigger('Call to undefined method ' __CLASS__ '::' $sMethod '()'E_USER_ERROR);
    }
        
    private function 
_parseFeed($sLink$sStr$sUserName)
    {
        
$sLink stripslashes($sLink);
        
$sStr stripslashes($sStr);
        
$sUserName stripslashes($sUserName);
        
        
$bAddSpan true;
        if (
preg_match('/feed/view/i'$sLink))
        {
            
$bAddSpan false;    
        }
        
        return (
$bAddSpan '<span class="user_profile_link_span" id="js_user_name_link_' $sUserName '">' '') . '<a href="' $sLink '">' $sStr '</a>' . ($bAddSpan '</span>' '');
    }        
    
    private function 
_processFeed($aRow$sKey$iUserid$bFirstCheckOnComments)
    {            
        switch (
$aRow['type_id'])
        {
            case 
'comment_profile':
            case 
'comment_profile_my':
                
$aRow['type_id'] = 'profile_comment'; break;
            case 
'profile_info':
                
$aRow['type_id'] = 'custom'; break;
            case 
'comment_photo':
                
$aRow['type_id'] = 'photo_comment'; break;
            case 
'comment_blog':
                
$aRow['type_id'] = 'blog_comment'; break;
            case 
'comment_video':
                
$aRow['type_id'] = 'video_comment'; break;
            case 
'comment_group':
                
$aRow['type_id'] = 'pages_comment'; break;                
        }
        
        if (
preg_match('/(.*)_feedlike/i'$aRow['type_id'])
                || 
$aRow['type_id'] == 'profile_design'
            
)
        {
            
$this->database()->delete(Phpfox::getT('feed'), 'feed_id = ' . (int) $aRow['feed_id']);
            
            return 
false;
        }
        
        
            if (!
Phpfox::hasCallback($aRow['type_id'], 'getActivityFeed'))
            {    
                return 
false;
            }                        

            
$aFeed Phpfox::callback($aRow['type_id'] . '.getActivityFeed'$aRow, (isset($this->_aCallback['module']) ? $this->_aCallback null));            
                        
            if (
$aFeed === false)
            {
                return 
false;
            }            
            
            if (!empty(
$aRow['feed_reference']))
            {
                
$aRow['item_id'] = $aRow['feed_reference'];
            }
            
            if (isset(
$this->_aViewMoreFeeds[$sKey]))
            {
                foreach (
$this->_aViewMoreFeeds[$sKey] as $iSubKey => $aSubRow)
                {                
                    
$mReturnViewMore $this->_processFeed($aSubRow$iSubKey$iUserid$bFirstCheckOnComments);
                    
                    if (
$mReturnViewMore === false)
                    {
                        continue;
                    }
                    
                    
$aFeed['more_feed_rows'][] = $mReturnViewMore;
                }
            }
            
            if (
Phpfox::isModule('like') && isset($aFeed['like_type_id']) && (int) $aFeed['feed_total_like'] > 0)
            {    
                
$aFeed['likes'] = Phpfox::getService('like')->getLikesForFeed($aFeed['like_type_id'], (isset($aFeed['like_item_id']) ? $aFeed['like_item_id'] : $aRow['item_id']), ((int) $aFeed['feed_is_liked'] > true false), Phpfox::getParam('feed.total_likes_to_display'));
            }            
        

            if (isset(
$aFeed['comment_type_id']) && (int) $aFeed['total_comment'] > && Phpfox::isModule('comment'))
            {                
                
// 
                
$aFeed['comments'] = Phpfox::getService('comment')->getCommentsForFeed($aFeed['comment_type_id'], $aRow['item_id'], Phpfox::getParam('comment.total_comments_in_activity_feed'));
                
//$aFeed['comments'] = Phpfox::getService('comment')->getCommentsForFeed($aFeed['comment_type_id'], (!empty($aRow['feed_reference']) ? $aRow['feed_reference'] : $aRow['item_id']), Phpfox::getParam('comment.total_comments_in_activity_feed'));
            
}            
            
//d($aRow);            d($aFeed);die();
            
if (isset($aRow['app_title']) && $aRow['app_id'])
            {
                
$sLink '<a href="' Phpfox::permalink('apps'$aRow['app_id'], $aRow['app_title']) . '">' $aRow['app_title'] . '</a>';
                
$aFeed['app_link'] = $sLink;            
            }
            
            
// Check if user can post comments on this feed/item
            
$bCanPostComment false;
            if (
$bFirstCheckOnComments)
            {
                
$bCanPostComment true;    
            }            
            if (
$iUserid !== null && $iUserid != Phpfox::getUserId())
            {                
                switch (
$aRow['privacy_comment'])
                {
                    case 
'1':
                        if (!
Phpfox::getService('user')->getUserObject($iUserid)->is_friend)
                        {
                            
$bCanPostComment false;
                        }
                        break;
                    case 
'2':                                
                        if (!
Phpfox::getService('user')->getUserObject($iUserid)->is_friend && !Phpfox::getService('user')->getUserObject($iUserid)->is_friend_of_friend)
                        {
                            
$bCanPostComment false;
                        }
                        break;            
                    case 
'3':
                        
$bCanPostComment false;
                        break;
                }
            }
            
            if (
$iUserid === null)
            {
                if (
$aRow['user_id'] != Phpfox::getUserId())
                {
                    switch (
$aRow['privacy_comment'])
                    {    
                        case 
'1':
                        case 
'2':
                            if (!
$aRow['is_friend'])
                            {
                                
$bCanPostComment false;
                            }
                            break;
                        case 
'3':
                            
$bCanPostComment false;
                            break;
                    }
                }
            }
            
            
$aRow['can_post_comment'] = $bCanPostComment;
            
            return 
array_merge($aRow$aFeed);        
    }
}

?>
Онлайн: 0
Реклама