Вход Регистрация
Файл: qa-include/qa-app-votes.php
Строк: 305
<?php

/*
    Question2Answer (c) Gideon Greenspan

    http://www.question2answer.org/

    
    File: qa-include/qa-app-votes.php
    Version: See define()s at top of qa-include/qa-base.php
    Description: Handling incoming votes (application level)


    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_vote_error_html($post$vote$userid$topage)
/*
    Check if $userid can vote on $post, on the page $topage.
    Return an HTML error to display if there was a problem, or false if it's OK.
*/
    
{
        if (
qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__$args); }
        
        require_once 
QA_INCLUDE_DIR.'qa-app-users.php';
        require_once 
QA_INCLUDE_DIR.'qa-app-limits.php';
        
        if (
            
is_array($post) &&
            ( (
$post['basetype']=='Q') || ($post['basetype']=='A') ) &&
            
qa_opt(($post['basetype']=='Q') ? 'voting_on_qs' 'voting_on_as') &&
            ( (!isset(
$post['userid'])) || (!isset($userid)) || ($post['userid']!=$userid) )
        ) {
            
$permiterror=qa_user_permit_error(($post['basetype']=='Q') ? 'permit_vote_q' 'permit_vote_a'QA_LIMIT_VOTES);
            
            
$errordownonly=(!$permiterror) && ($vote<0);
            if (
$errordownonly)
                
$permiterror=qa_user_permit_error('permit_vote_down');
                
            switch (
$permiterror) {
                case 
'login':
                    return 
qa_insert_login_links(qa_lang_html('main/vote_must_login'), $topage);
                    break;
                    
                case 
'confirm':
                    return 
qa_insert_login_links(qa_lang_html($errordownonly 'main/vote_down_must_confirm' 'main/vote_must_confirm'), $topage);
                    break;
                    
                case 
'limit':
                    return 
qa_lang_html('main/vote_limit');
                    break;
                    
                default:
                    return 
qa_lang_html('users/no_permission');
                    break;
                    
                case 
false:
                    return 
false;
            }
        
        } else
            return 
qa_lang_html('main/vote_not_allowed'); // voting option should not have been presented (but could happen due to options change)
    
}

    
    function 
qa_vote_set($post$userid$handle$cookieid$vote)
/*
    Actually set (application level) the $vote (-1/0/1) by $userid (with $handle and $cookieid) on $postid.
    Handles user points, recounting and event reports as appropriate.
*/
    
{
        if (
qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__$args); }
        
        require_once 
QA_INCLUDE_DIR.'qa-db-points.php';
        require_once 
QA_INCLUDE_DIR.'qa-db-hotness.php';
        require_once 
QA_INCLUDE_DIR.'qa-db-votes.php';
        require_once 
QA_INCLUDE_DIR.'qa-db-post-create.php';
        require_once 
QA_INCLUDE_DIR.'qa-app-limits.php';
        
        
$vote=(int)min(1max(-1$vote));
        
$oldvote=(int)qa_db_uservote_get($post['postid'], $userid);

        
qa_db_uservote_set($post['postid'], $userid$vote);
        
qa_db_post_recount_votes($post['postid']);
        
        
$postisanswer=($post['basetype']=='A');
        
        if (
$postisanswer) {
            
qa_db_post_acount_update($post['parentid']);
            
qa_db_unupaqcount_update();
        }
        
        
$columns=array();
        
        if ( (
$vote>0) || ($oldvote>0) )
            
$columns[]=$postisanswer 'aupvotes' 'qupvotes';

        if ( (
$vote<0) || ($oldvote<0) )
            
$columns[]=$postisanswer 'adownvotes' 'qdownvotes';
            
        
qa_db_points_update_ifuser($userid$columns);
        
        
qa_db_points_update_ifuser($post['userid'], array($postisanswer 'avoteds' 'qvoteds''upvoteds''downvoteds'));
        
        if (
$post['basetype']=='Q')
            
qa_db_hotness_update($post['postid']);
        
        if (
$vote<0)
            
$event=$postisanswer 'a_vote_down' 'q_vote_down';
        elseif (
$vote>0)
            
$event=$postisanswer 'a_vote_up' 'q_vote_up';
        else
            
$event=$postisanswer 'a_vote_nil' 'q_vote_nil';
        
        
qa_report_event($event$userid$handle$cookieid, array(
            
'postid' => $post['postid'],
            
'vote' => $vote,
            
'oldvote' => $oldvote,
        ));
    }
    
    
    function 
qa_flag_error_html($post$userid$topage)
/*
    Check if $userid can flag $post, on the page $topage.
    Return an HTML error to display if there was a problem, or false if it's OK.
*/
    
{
        if (
qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__$args); }
        
        require_once 
QA_INCLUDE_DIR.'qa-db-selects.php';
        require_once 
QA_INCLUDE_DIR.'qa-app-options.php';
        require_once 
QA_INCLUDE_DIR.'qa-app-users.php';
        require_once 
QA_INCLUDE_DIR.'qa-app-limits.php';

        if (
            
is_array($post) &&
            
qa_opt('flagging_of_posts') &&
            ( (!isset(
$post['userid'])) || (!isset($userid)) || ($post['userid']!=$userid) )
        ) {
        
            switch (
qa_user_permit_error('permit_flag'QA_LIMIT_FLAGS)) {
                case 
'login':
                    return 
qa_insert_login_links(qa_lang_html('question/flag_must_login'), $topage);
                    break;
                    
                case 
'confirm':
                    return 
qa_insert_login_links(qa_lang_html('question/flag_must_confirm'), $topage);
                    break;
                    
                case 
'limit':
                    return 
qa_lang_html('question/flag_limit');
                    break;
                    
                default:
                    return 
qa_lang_html('users/no_permission');
                    break;
                    
                case 
false:
                    return 
false;
            }
        
        } else
            return 
qa_lang_html('question/flag_not_allowed'); // flagging option should not have been presented
    
}
    

    function 
qa_flag_set_tohide($oldpost$userid$handle$cookieid$question)
/*
    Set (application level) a flag by $userid (with $handle and $cookieid) on $oldpost which belongs to $question.
    Handles recounting, admin notifications and event reports as appropriate.
    Returns true if the post should now be hidden because it has accumulated enough flags.
*/
    
{
        if (
qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__$args); }
        
        require_once 
QA_INCLUDE_DIR.'qa-db-votes.php';
        require_once 
QA_INCLUDE_DIR.'qa-app-limits.php';
        
        
qa_db_userflag_set($oldpost['postid'], $useridtrue);
        
qa_db_post_recount_flags($oldpost['postid']);
        
        switch (
$oldpost['basetype']) {
            case 
'Q':
                
$event='q_flag';
                break;
                
            case 
'A':
                
$event='a_flag';
                break;

            case 
'C':
                
$event='c_flag';
                break;
        }
        
        
$post=qa_db_select_with_pending(qa_db_full_post_selectspec(null$oldpost['postid']));
        
        
qa_report_event($event$userid$handle$cookieid, array(
            
'postid' => $oldpost['postid'],
            
'oldpost' => $oldpost,
            
'flagcount' => $post['flagcount'],
            
'questionid' => $question['postid'],
            
'question' => $question,
        ));
        
        return (
$post['flagcount']>=qa_opt('flagging_hide_after')) && !$post['hidden'];
    }


    function 
qa_flag_clear($oldpost$userid$handle$cookieid)
/*
    Clear (application level) a flag on $oldpost by $userid (with $handle and $cookieid).
    Handles recounting and event reports as appropriate.
*/
    
{
        if (
qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__$args); }
        
        require_once 
QA_INCLUDE_DIR.'qa-db-votes.php';
        require_once 
QA_INCLUDE_DIR.'qa-app-limits.php';
        
        
qa_db_userflag_set($oldpost['postid'], $useridfalse);
        
qa_db_post_recount_flags($oldpost['postid']);
        
        switch (
$oldpost['basetype']) {
            case 
'Q':
                
$event='q_unflag';
                break;
                
            case 
'A':
                
$event='a_unflag';
                break;

            case 
'C':
                
$event='c_unflag';
                break;
        }
        
        
qa_report_event($event$userid$handle$cookieid, array(
            
'postid' => $oldpost['postid'],
            
'oldpost' => $oldpost,
        ));
    }
    
    
    function 
qa_flags_clear_all($oldpost$userid$handle$cookieid)
/*
    Clear (application level) all flags on $oldpost by $userid (with $handle and $cookieid).
    Handles recounting and event reports as appropriate.
*/
    
{
        if (
qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__$args); }
        
        require_once 
QA_INCLUDE_DIR.'qa-db-votes.php';
        require_once 
QA_INCLUDE_DIR.'qa-app-limits.php';
        
        
qa_db_userflags_clear_all($oldpost['postid']);
        
qa_db_post_recount_flags($oldpost['postid']);

        switch (
$oldpost['basetype']) {
            case 
'Q':
                
$event='q_clearflags';
                break;
                
            case 
'A':
                
$event='a_clearflags';
                break;

            case 
'C':
                
$event='c_clearflags';
                break;
        }

        
qa_report_event($event$userid$handle$cookieid, array(
            
'postid' => $oldpost['postid'],
            
'oldpost' => $oldpost,
        ));
    }


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