Advertisement
jegtheme

like-function.php

Nov 2nd, 2014
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.16 KB | None | 0 0
  1. <?php
  2.  
  3. add_action('init', 'j_set_like_cookie');
  4. define('JEG_COOKIE_NAME', 'wp-jeg-setting');
  5.  
  6. add_action('wp_ajax_vote_post'          , 'j_ajax_vote_post');
  7. add_action('wp_ajax_nopriv_vote_post'   , 'j_ajax_vote_post');
  8.  
  9. add_action('wp_ajax_total_vote'             , 'j_ajax_total_vote');
  10. add_action('wp_ajax_nopriv_total_vote'      , 'j_ajax_total_vote');
  11.  
  12. function j_set_like_cookie() {
  13.     if(!isset($_COOKIE[JEG_COOKIE_NAME])) {
  14.         $cookieTimeout = j_get_option("cookie_timeout", time() + 24 * 60 * 60 * 30);
  15.         setcookie(JEG_COOKIE_NAME, uniqid(), $cookieTimeout, '/');
  16.     }
  17. }
  18.  
  19. function j_get_like_count($postid) {
  20.     global $wpdb;
  21.     $themetable = $wpdb->prefix . JEG_SHORTNAME . '_post_like';
  22.    
  23.     $count = j_get_meta('post_initial_like', 0, $postid) + $wpdb->get_var("SELECT COUNT(id) FROM $themetable WHERE post_id = '$postid'");  
  24.     return $count;
  25. }
  26.  
  27. function j_ajax_total_vote () {
  28.     $total = j_get_like_count($_REQUEST['postid']);
  29.     jsendResponse(array(
  30.         total   => $total
  31.     ));
  32. }
  33.  
  34. function j_have_voted ($postid) {
  35.     global $wpdb;
  36.     $ip     = $_SERVER['REMOTE_ADDR'];
  37.     if(isset($_COOKIE[JEG_COOKIE_NAME])) {
  38.         $cookie = $_COOKIE[JEG_COOKIE_NAME];
  39.     } else {
  40.         $cookie = '';
  41.     }
  42.     $themetable = $wpdb->prefix . JEG_SHORTNAME . '_post_like';
  43.    
  44.     if(!empty($ip) && !empty($cookie)) {
  45.         $vote = $wpdb->get_var("SELECT COUNT(id) FROM $themetable WHERE post_id = '$postid'" .  
  46.             " AND ip = '$ip'" .
  47.             " AND cookie = '$cookie'");
  48.         if($vote == 0) {
  49.             return false;
  50.         } else {
  51.             return true;
  52.         }
  53.     } else {
  54.         return NULL;
  55.     }
  56. }
  57.  
  58.  
  59. function jeg_mysql_escape($inp) {
  60.     if(is_array($inp))
  61.         return array_map(__METHOD__, $inp);
  62.  
  63.     if(!empty($inp) && is_string($inp)) {
  64.         return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $inp);
  65.     }
  66.  
  67.     return $inp;
  68. }
  69.  
  70.  
  71. function j_add_vote($postid) {
  72.     global $wpdb;
  73.     $ip     = $_SERVER['REMOTE_ADDR'];
  74.     $cookie = jeg_mysql_escape($_COOKIE[JEG_COOKIE_NAME]);
  75.     $themetable = $wpdb->prefix . JEG_SHORTNAME . '_post_like';
  76.    
  77.     if(!empty($ip) && !empty($cookie) && !empty($postid)) {
  78.        
  79.         if(j_have_voted($postid) === false) {
  80.             $query = "INSERT INTO $themetable SET ";
  81.                 $query .= "post_id = '" . $postid . "', ";
  82.                 $query .= "date_time = '" . date('Y-m-d H:i:s') . "', ";
  83.                 $query .= "ip = '$ip', ";
  84.                 $query .= "cookie = '$cookie' ";
  85.            
  86.             $success = $wpdb->query($query);
  87.             if($success) {
  88.                 return 3;
  89.             } else {
  90.                 return 2;
  91.             }
  92.         } else {
  93.             return 1;
  94.         }
  95.        
  96.     } else {
  97.         return 0;
  98.     }  
  99. }
  100.  
  101. function j_ajax_vote_post() {
  102.     $result = j_add_vote($_REQUEST['postid']);
  103.     switch ($result) {
  104.         case 0 :
  105.             jsendResponse(array(
  106.                 'id'        => 0,
  107.                 'msg'       => j__('parameter_not_complete_lang')
  108.             ));
  109.             break;
  110.         case 1 :
  111.             jsendResponse(array(
  112.                 'id'        => 1,
  113.                 'msg'       => j__('have_voted_lang')
  114.             ));
  115.             break;
  116.         case 2 :
  117.             jsendResponse(array(
  118.                 'id'        => 2,
  119.                 'msg'       => j__('db_error_lang')
  120.             ));
  121.             break;
  122.         case 3 :
  123.             jsendResponse(array(
  124.                 'id'        => 3,
  125.                 'msg'       => j__('thanks_vote_lang'),
  126.                 'total'     => j_get_like_count($_REQUEST['postid'])
  127.             ));
  128.             break;
  129.         default :
  130.             break;
  131.     }
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement