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

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

/**
 * 
 * 
 * @copyright        [PHPFOX_COPYRIGHT]
 * @author          Raymond_Benc
 * @package         Phpfox_Service
 * @version         $Id: browse.class.php 4545 2012-07-20 10:40:35Z Raymond_Benc $
 */
class Poll_Service_Browse extends Phpfox_Service 
{
    
/**
     * Class constructor
     */    
    
public function __construct()
    {    
        
    }
    
    public function 
query()
    {
        
$this->database()->select('pd.background, pd.percentage, pd.border, pr.answer_id, pr.user_id as voted, friends2.friend_id AS is_friend, ')
            ->
leftjoin(Phpfox::getT('poll_design'), 'pd''pd.poll_id = poll.poll_id')
            ->
leftjoin(Phpfox::getT('poll_result'), 'pr''pr.poll_id = poll.poll_id AND pr.user_id = ' Phpfox::getUserId())
            ->
leftJoin(Phpfox::getT('friend'), 'friends2''friends2.user_id = poll.user_id AND friends2.friend_user_id = ' Phpfox::getUserId());                

        if (
Phpfox::isUser() && Phpfox::isModule('like'))
        {
            
$this->database()->select('lik.like_id AS is_liked, ')->leftJoin(Phpfox::getT('like'), 'lik''lik.type_id = 'poll' AND lik.item_id = poll.poll_id AND lik.user_id = ' Phpfox::getUserId());
        }        
    }
    
    public function 
getQueryJoins($bIsCount false$bNoQueryFriend false)
    {
        if (
Phpfox::isModule('friend') && Phpfox::getService('friend')->queryJoin($bNoQueryFriend))
        {
            
$this->database()->join(Phpfox::getT('friend'), 'friends''friends.user_id = poll.user_id AND friends.friend_user_id = ' Phpfox::getUserId());    
        }        
    }

    public function 
processRows(&$aPolls2)
    {
        
$aPolls $aPolls2;
        
$aPolls2 = array();
        
        
// we "implode" the poll_ids to run only one query on the DB to get the
        // answers
        
$sPolls '';
        foreach (
$aPolls as $aPoll)
        {
            
$sPolls .= $aPoll['poll_id'] . ',';
        }
        
$sPolls rtrim($sPolls',');

        
$aAnswers $this->database()->select('pa.*, pr.user_id as voted')
            ->
from(Phpfox::getT('poll_answer'),'pa')
            ->
where('pa.poll_id IN(' $sPolls ')')
            ->
leftjoin(Phpfox::getT('poll_result'), 'pr''pr.answer_id = pa.answer_id AND pr.user_id = ' Phpfox::getUserId())
            ->
order('pa.ordering ASC')
            ->
execute('getSlaveRows');
        
        
// now merge both arrays by their poll_id and add the count for the total votes        
        
$iTotalVotes 0;
        
$aTotalVotes = array();
        foreach (
$aAnswers as $aAnswer)
        {            
            if(
$aAnswer['total_votes'] > 0)
            {
                if (isset(
$aTotalVotes[$aAnswer['poll_id']]))
                {
                    
$aTotalVotes[$aAnswer['poll_id']] += $aAnswer['total_votes'];//$aTotalVotes[$aAnswer['poll_id']]+1;
                
}
                else
                {
                    
$aTotalVotes[$aAnswer['poll_id']] = $aAnswer['total_votes'];
                }
            }
        }

        foreach (
$aPolls as $iKey => $aPoll)
        {
            
$aPoll['aFeed'] = array(            
                
'feed_display' => 'mini',    
                
'comment_type_id' => 'poll',
                
'privacy' => $aPoll['privacy'],
                
'comment_privacy' => $aPoll['privacy_comment'],
                
'like_type_id' => 'poll',                
                
'feed_is_liked' => (isset($aPoll['is_liked']) ? $aPoll['is_liked'] : false),
                
'feed_is_friend' => (isset($aPoll['is_friend']) ? $aPoll['is_friend'] : false),
                
'item_id' => $aPoll['poll_id'],
                
'user_id' => $aPoll['user_id'],
                
'total_comment' => $aPoll['total_comment'],
                
'feed_total_like' => $aPoll['total_like'],
                
'total_like' => $aPoll['total_like'],
                
'feed_link' => Phpfox::permalink('poll'$aPoll['poll_id'], $aPoll['question']),
                
'feed_title' => $aPoll['question'],
                
'type_id' => 'poll'
            
);            
            
            
$aPolls2[$aPoll['poll_id']] = $aPoll;

            if (
$aPoll['poll_id']['user_id'] == Phpfox::getUserId())
            {
                
$aPolls2[$aPoll['poll_id']]['user_voted_this_poll'] = 'true';
            }
            else
            {
                
$aPolls2[$aPoll['poll_id']]['user_voted_this_poll'] = 'false'// this could be tricky, test and see if it works everywhere
            
}
            
            if (!isset(
$aPolls2[$aPoll['poll_id']]['total_votes']))
            {
                
$aPolls2[$aPoll['poll_id']]['total_votes'] = 0;
            }
            
            foreach (
$aAnswers as &$aAnswer)
            { 
// we add the total votes for the poll
                
                
if (!isset($aAnswer['vote_percentage']))
                {
                    
$aAnswer['vote_percentage'] = 0;
                }
                if (!isset(
$aAnswer['total_votes']))
                {
                    
$aAnswer['total_votes'] = 0;
                }
                
// Normalize if user voted this answer or not
                
if (isset($aAnswer['voted']) && $aAnswer['voted'] == Phpfox::getUserId())
                {
                    
$aAnswer['user_voted_this_answer'] = 1;
                }
                else
                {
                    
$aAnswer['user_voted_this_answer'] = 2;
                }
                if (
$aPoll['poll_id'] == $aAnswer['poll_id'])
                {
                    if ((isset(
$aTotalVotes[$aAnswer['poll_id']]) && $aTotalVotes[$aAnswer['poll_id']] > 0))
                    {
                        
$aAnswer['vote_percentage'] =  round( ($aAnswer['total_votes'] / $aTotalVotes[$aAnswer['poll_id']]) * 100 );
                    }
                    else
                    {
                         
$aAnswer['vote_percentage'] = 0;
                    }
                    
                    
$aPolls2[$aPoll['poll_id']]['answer'][$aAnswer['answer_id']] = $aAnswer;
                    
                    
$aPolls2[$aPoll['poll_id']]['total_votes'] += $aAnswer['total_votes'];
                }                
            }        
            
            if (
$aPoll['randomize'] == && !empty($aPolls2[$aPoll['poll_id']]['answer']))
            {
                
shuffle($aPolls2[$aPoll['poll_id']]['answer']);
            }
        }
        
        unset(
$aPolls);
    }
    
    
/**
     * 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('poll.service_browse__call'))
        {
            eval(
$sPlugin);
            return;
        }
            
        
/**
         * No method or plug-in found we must throw a error.
         */
        
Phpfox_Error::trigger('Call to undefined method ' __CLASS__ '::' $sMethod '()'E_USER_ERROR);
    }    
}

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