ID; } if ( isset( $attributes['id'] ) && ! empty( $attributes['id'] ) ) { $post_id = $attributes['id']; } if ( ! empty( $post_id ) ) { $post_id = (int) $post_id; $post_type = get_post_type( $post_id ); if ( 'aiovg_videos' == $post_type ) { wp_enqueue_script( AIOVG_PLUGIN_SLUG . '-likes' ); $content = aiovg_get_like_button( $post_id ); } } return $content; } /** * Get likes / dislikes info. * * @since 3.6.1 */ public function ajax_callback_get_likes_dislikes_info() { check_ajax_referer( 'aiovg_public_ajax_nonce', 'security' ); // Proceed safe $response = array( 'status' => 'error', 'message' => '', 'likes' => 0, 'dislikes' => 0, 'liked' => false, 'disliked' => false ); $post_id = isset( $_REQUEST['post_id'] ) ? (int) $_REQUEST['post_id'] : 0; $user_id = isset( $_REQUEST['user_id'] ) ? (int) $_REQUEST['user_id'] : 0; if ( $post_id > 0 ) { $response['status'] = 'success'; $response['likes'] = (int) get_post_meta( $post_id, 'likes', true ); $response['dislikes'] = (int) get_post_meta( $post_id, 'dislikes', true ); $liked = array(); $disliked = array(); if ( $user_id > 0 ) { $liked = (array) get_user_meta( $user_id, 'aiovg_videos_likes' ); $disliked = (array) get_user_meta( $user_id, 'aiovg_videos_dislikes' ); } else { $likes_settings = aiovg_get_option( 'aiovg_likes_settings' ); if ( empty( $likes_settings['login_required_to_vote'] ) ) { if ( isset( $_COOKIE['aiovg_videos_likes'] ) ) { $liked = explode( '|', $_COOKIE['aiovg_videos_likes'] ); $liked = array_map( 'intval', $liked ); } if ( isset( $_COOKIE['aiovg_videos_dislikes'] ) ) { $disliked = explode( '|', $_COOKIE['aiovg_videos_dislikes'] ); $disliked = array_map( 'intval', $disliked ); } } } if ( in_array( $post_id, $liked ) ) { $response['liked'] = true; } elseif ( in_array( $post_id, $disliked ) ) { $response['disliked'] = true; } } // Output echo wp_json_encode( $response ); wp_die(); } /** * Toggle likes. * * @since 3.6.1 */ public function ajax_callback_toggle_likes() { check_ajax_referer( 'aiovg_public_ajax_nonce', 'security' ); // Proceed safe $response = array( 'status' => 'error', 'message' => '', 'likes' => 0, 'dislikes' => 0, 'liked' => false, 'disliked' => false ); $post_id = isset( $_REQUEST['post_id'] ) ? (int) $_REQUEST['post_id'] : 0; $user_id = isset( $_REQUEST['user_id'] ) ? (int) $_REQUEST['user_id'] : 0; $action = isset( $_REQUEST['context'] ) ? sanitize_text_field( $_REQUEST['context'] ) : ''; if ( $post_id > 0 ) { $response['likes'] = (int) get_post_meta( $post_id, 'likes', true ); $response['dislikes'] = (int) get_post_meta( $post_id, 'dislikes', true ); // Add to Likes if ( 'add_to_likes' == $action ) { $likes = $this->add_to_likes( $response['likes'], $post_id, $user_id ); if ( $likes != $response['likes'] ) { $response['status'] = 'success'; $response['likes'] = $likes; $response['liked'] = true; } } // Remove from Likes if ( 'remove_from_likes' == $action ) { $likes = $this->remove_from_likes( $response['likes'], $post_id, $user_id ); if ( $likes != $response['likes'] ) { $response['status'] = 'success'; $response['likes'] = $likes; } } // Remove from Dislikes if ( 'success' == $response['status'] ) { $response['dislikes'] = $this->remove_from_dislikes( $response['dislikes'], $post_id, $user_id ); } } // Output echo wp_json_encode( $response ); wp_die(); } /** * Toggle dislikes. * * @since 3.6.1 */ public function ajax_callback_toggle_dislikes() { check_ajax_referer( 'aiovg_public_ajax_nonce', 'security' ); // Proceed safe $response = array( 'status' => 'error', 'message' => '', 'likes' => 0, 'dislikes' => 0, 'liked' => false, 'disliked' => false ); $post_id = isset( $_REQUEST['post_id'] ) ? (int) $_REQUEST['post_id'] : 0; $user_id = isset( $_REQUEST['user_id'] ) ? (int) $_REQUEST['user_id'] : 0; $action = isset( $_REQUEST['context'] ) ? sanitize_text_field( $_REQUEST['context'] ) : ''; if ( $post_id > 0 ) { $response['likes'] = (int) get_post_meta( $post_id, 'likes', true ); $response['dislikes'] = (int) get_post_meta( $post_id, 'dislikes', true ); // Add to Dislikes if ( 'add_to_dislikes' == $action ) { $dislikes = $this->add_to_dislikes( $response['dislikes'], $post_id, $user_id ); if ( $dislikes != $response['dislikes'] ) { $response['status'] = 'success'; $response['dislikes'] = $dislikes; $response['disliked'] = true; } } // Remove from Dislikes if ( 'remove_from_dislikes' == $action ) { $dislikes = $this->remove_from_dislikes( $response['dislikes'], $post_id, $user_id ); if ( $dislikes != $response['dislikes'] ) { $response['status'] = 'success'; $response['dislikes'] = $dislikes; } } // Remove from Likes if ( 'success' == $response['status'] ) { $response['likes'] = $this->remove_from_likes( $response['likes'], $post_id, $user_id ); } } // Output echo wp_json_encode( $response ); wp_die(); } /** * Add to likes. * * @since 3.6.1 * @access private * @param int $likes Current likes count. * @param int $post_id Video post ID. * @param int $user_id Current user ID. * @return int $likes Updated likes count. */ private function add_to_likes( $likes, $post_id, $user_id ) { if ( $user_id > 0 ) { $liked = (array) get_user_meta( $user_id, 'aiovg_videos_likes' ); if ( ! in_array( $post_id, $liked ) ) { add_user_meta( $user_id, 'aiovg_videos_likes', $post_id ); $likes = $likes + 1; update_post_meta( $post_id, 'likes', $likes ); } } else { $likes_settings = aiovg_get_option( 'aiovg_likes_settings' ); if ( empty( $likes_settings['login_required_to_vote'] ) ) { $liked = array(); if ( isset( $_COOKIE['aiovg_videos_likes'] ) ) { $liked = explode( '|', $_COOKIE['aiovg_videos_likes'] ); $liked = array_map( 'intval', $liked ); } if ( ! in_array( $post_id, $liked ) ) { $likes = $likes + 1; update_post_meta( $post_id, 'likes', $likes ); // SetCookie $liked[] = $post_id; setcookie( 'aiovg_videos_likes', implode( '|', $liked ), time() + ( 86400 * 30 ), COOKIEPATH, COOKIE_DOMAIN ); } } } return $likes; } /** * Add to dislikes. * * @since 3.6.1 * @access private * @param int $dislikes Current dislikes count. * @param int $post_id Video post ID. * @param int $user_id Current user ID. * @return int $dislikes Total dislikes count. */ private function add_to_dislikes( $dislikes, $post_id, $user_id ) { if ( $user_id > 0 ) { $disliked = (array) get_user_meta( $user_id, 'aiovg_videos_dislikes' ); if ( ! in_array( $post_id, $disliked ) ) { add_user_meta( $user_id, 'aiovg_videos_dislikes', $post_id ); $dislikes = $dislikes + 1; update_post_meta( $post_id, 'dislikes', $dislikes ); } } else { $likes_settings = aiovg_get_option( 'aiovg_likes_settings' ); if ( empty( $likes_settings['login_required_to_vote'] ) ) { $disliked = array(); if ( isset( $_COOKIE['aiovg_videos_dislikes'] ) ) { $disliked = explode( '|', $_COOKIE['aiovg_videos_dislikes'] ); $disliked = array_map( 'intval', $disliked ); } if ( ! in_array( $post_id, $disliked ) ) { $dislikes = $dislikes + 1; update_post_meta( $post_id, 'dislikes', $dislikes ); // SetCookie $disliked[] = $post_id; setcookie( 'aiovg_videos_dislikes', implode( '|', $disliked ), time() + ( 86400 * 30 ), COOKIEPATH, COOKIE_DOMAIN ); } } } return $dislikes; } /** * Remove from likes. * * @since 3.6.1 * @access private * @param int $likes Current likes count. * @param int $post_id Video post ID. * @param int $user_id Current user ID. * @return int $likes Total likes count. */ private function remove_from_likes( $likes, $post_id, $user_id ) { if ( $user_id > 0 ) { $liked = (array) get_user_meta( $user_id, 'aiovg_videos_likes' ); if ( in_array( $post_id, $liked ) ) { delete_user_meta( $user_id, 'aiovg_videos_likes', $post_id ); $likes = max( 0, $likes - 1 ); update_post_meta( $post_id, 'likes', $likes ); } } else { $likes_settings = aiovg_get_option( 'aiovg_likes_settings' ); if ( empty( $likes_settings['login_required_to_vote'] ) ) { $liked = array(); if ( isset( $_COOKIE['aiovg_videos_likes'] ) ) { $liked = explode( '|', $_COOKIE['aiovg_videos_likes'] ); $liked = array_map( 'intval', $liked ); } if ( in_array( $post_id, $liked ) ) { $likes = max( 0, $likes - 1 ); update_post_meta( $post_id, 'likes', $likes ); // SetCookie if ( ( $key = array_search( $post_id, $liked ) ) !== false ) { unset( $liked[ $key ] ); } setcookie( 'aiovg_videos_likes', implode( '|', $liked ), time() + ( 86400 * 30 ), COOKIEPATH, COOKIE_DOMAIN ); } } } return $likes; } /** * Remove from dislikes. * * @since 3.6.1 * @access private * @param int $dislikes Current dislikes count. * @param int $post_id Video post ID. * @param int $user_id Current user ID. * @return int $dislikes Total dislikes count. */ private function remove_from_dislikes( $dislikes, $post_id, $user_id ) { if ( $user_id > 0 ) { $disliked = (array) get_user_meta( $user_id, 'aiovg_videos_dislikes' ); if ( in_array( $post_id, $disliked ) ) { delete_user_meta( $user_id, 'aiovg_videos_dislikes', $post_id ); $dislikes = max( 0, $dislikes - 1 ); update_post_meta( $post_id, 'dislikes', $dislikes ); } } else { $likes_settings = aiovg_get_option( 'aiovg_likes_settings' ); if ( empty( $likes_settings['login_required_to_vote'] ) ) { $disliked = array(); if ( isset( $_COOKIE['aiovg_videos_dislikes'] ) ) { $disliked = explode( '|', $_COOKIE['aiovg_videos_dislikes'] ); $disliked = array_map( 'intval', $disliked ); } if ( in_array( $post_id, $disliked ) ) { $dislikes = max( 0, $dislikes - 1 ); update_post_meta( $post_id, 'dislikes', $dislikes ); // SetCookie if ( ( $key = array_search( $post_id, $disliked ) ) !== false ) { unset( $disliked[ $key ] ); } setcookie( 'aiovg_videos_dislikes', implode( '|', $disliked ), time() + ( 86400 * 30 ), COOKIEPATH, COOKIE_DOMAIN ); } } } return $dislikes; } }