Вход Регистрация
Файл: qa-include/qa-db-votes.php
Строк: 94
<?php
    
/*
    Question2Answer (c) Gideon Greenspan

    http://www.question2answer.org/

    
    File: qa-include/qa-db-votes.php
    Version: See define()s at top of qa-include/qa-base.php
    Description: Database-level access to votes tables


    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation; either version 2
    of the License, or (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    More about this license: http://www.question2answer.org/license.php
*/

    
if (!defined('QA_VERSION')) { // don't allow this page to be requested directly from browser
        
header('Location: ../');
        exit;
    }


    function 
qa_db_uservote_set($postid$userid$vote)
/*
    Set the vote for $userid on $postid to $vote in the database
*/
    
{
        
$vote=max(min(($vote), 1), -1);
        
        
qa_db_query_sub(
            
'INSERT INTO ^uservotes (postid, userid, vote, flag) VALUES (#, #, #, 0) ON DUPLICATE KEY UPDATE vote=#',
            
$postid$userid$vote$vote
        
);
    }

    
    function 
qa_db_uservote_get($postid$userid)
/*
    Get the vote for $userid on $postid from the database (or NULL if none)
*/
    
{
        return 
qa_db_read_one_value(qa_db_query_sub(
            
'SELECT vote FROM ^uservotes WHERE postid=# AND userid=#',
            
$postid$userid
        
), true);
    }
    
    
    function 
qa_db_userflag_set($postid$userid$flag)
/*
    Set the flag for $userid on $postid to $flag (true or false) in the database
*/
    
{
        
$flag=$flag 0;

        
qa_db_query_sub(
            
'INSERT INTO ^uservotes (postid, userid, vote, flag) VALUES (#, #, 0, #) ON DUPLICATE KEY UPDATE flag=#',
            
$postid$userid$flag$flag
        
);
    }
    
    
    function 
qa_db_userflags_clear_all($postid)
/*
    Clear all flags for $postid in the database
*/
    
{
        
qa_db_query_sub(
            
'UPDATE ^uservotes SET flag=0 WHERE postid=#',
            
$postid
        
);
    }
    
    
    function 
qa_db_post_recount_votes($postid)
/*
    Recalculate the cached count of upvotes, downvotes and netvotes for $postid in the database
*/
    
{
        if (
qa_should_update_counts())
            
qa_db_query_sub(
                
'UPDATE ^posts AS x, (SELECT COALESCE(SUM(GREATEST(0,vote)),0) AS upvotes, -COALESCE(SUM(LEAST(0,vote)),0) AS downvotes FROM ^uservotes WHERE postid=#) AS a SET x.upvotes=a.upvotes, x.downvotes=a.downvotes, x.netvotes=a.upvotes-a.downvotes WHERE x.postid=#',
                
$postid$postid
            
);
    }
    
    
    function 
qa_db_post_recount_flags($postid)
/*
    Recalculate the cached count of flags for $postid in the database
*/
    
{
        if (
qa_should_update_counts())
            
qa_db_query_sub(
                
'UPDATE ^posts AS x, (SELECT COALESCE(SUM(IF(flag, 1, 0)),0) AS flagcount FROM ^uservotes WHERE postid=#) AS a SET x.flagcount=a.flagcount WHERE x.postid=#',
                
$postid$postid
            
);
    }
    
    
    function 
qa_db_uservote_post_get($postid)
/*
    Returns all non-zero votes on post $postid from the database as an array of [userid] => [vote]
*/
    
{
        return 
qa_db_read_all_assoc(qa_db_query_sub(
            
'SELECT userid, vote FROM ^uservotes WHERE postid=# AND vote!=0',
            
$postid
        
), 'userid''vote');
    }
    
    
    function 
qa_db_uservoteflag_user_get($userid)
/*
    Returns all the postids from the database for posts that $userid has voted on or flagged
*/
    
{
        return 
qa_db_read_all_values(qa_db_query_sub(
            
'SELECT postid FROM ^uservotes WHERE userid=# AND (vote!=0) OR (flag!=0)',
            
$userid
        
));
    }
    

/*
    Omit PHP closing tag to help avoid accidental output
*/
Онлайн: 1
Реклама