2020-02-02 04:13:58 +01:00
< ? php
/**
2021-10-10 15:48:53 +02:00
* GDK_Points_Database class .
2020-02-02 04:13:58 +01:00
*/
2020-03-15 14:29:06 +01:00
class GDK_Points_Database
{
2021-10-10 15:48:53 +02:00
public static $prefix = 'points_' ;
2020-03-15 14:29:06 +01:00
public static function points_get_table ( $table )
{
global $wpdb ;
2021-10-10 15:48:53 +02:00
$result = '' ;
2020-03-15 14:29:06 +01:00
switch ( $table ) {
2021-10-10 15:48:53 +02:00
case 'users' :
$result = $wpdb -> prefix . self :: $prefix . 'users' ;
2020-03-15 14:29:06 +01:00
break ;
}
2021-10-10 15:48:53 +02:00
2020-03-15 14:29:06 +01:00
return $result ;
}
2020-02-02 04:13:58 +01:00
}
/**
2021-10-10 15:48:53 +02:00
* GDK_Points class .
2020-02-02 04:13:58 +01:00
*/
2020-03-15 14:29:06 +01:00
class GDK_Points
{
public static function get_points_by_user ( $user_id , $limit = null , $order_by = null , $order = null , $output = OBJECT , $offset = 0 )
{
global $wpdb ;
$limit_str = '' ;
2021-10-10 15:48:53 +02:00
if ( isset ( $limit ) && ( null !== $limit )) {
$limit_str = ' LIMIT ' . $offset . ' ,' . $limit ;
2020-03-15 14:29:06 +01:00
}
2021-10-10 15:48:53 +02:00
$order_by_str = '' ;
if ( isset ( $order_by ) && ( null !== $order_by )) {
$order_by_str = ' ORDER BY ' . $order_by ;
2020-03-15 14:29:06 +01:00
}
2021-10-10 15:48:53 +02:00
$order_str = '' ;
if ( isset ( $order ) && ( null !== $order )) {
$order_str = ' ' . $order ;
2020-03-15 14:29:06 +01:00
}
2021-10-10 15:48:53 +02:00
$result = $wpdb -> get_results ( 'SELECT * FROM ' . GDK_Points_Database :: points_get_table ( 'users' ) . " WHERE user_id = ' { $user_id } ' " . $order_by_str . $order_str . $limit_str , $output );
2020-03-15 14:29:06 +01:00
return $result ;
}
public static function get_user_total_points ( $user_id , $status = null )
{
global $wpdb ;
$result = 0 ;
$where_status = '' ;
2021-10-10 15:48:53 +02:00
if ( null !== $status ) {
$where_status = " AND status = ' " . $status . " ' " ;
2020-03-15 14:29:06 +01:00
}
2021-10-10 15:48:53 +02:00
$points = $wpdb -> get_row ( 'SELECT SUM(points) as total FROM ' . GDK_Points_Database :: points_get_table ( 'users' ) . " WHERE user_id = ' { $user_id } ' " . $where_status );
2020-03-15 14:29:06 +01:00
2021-10-10 15:48:53 +02:00
if ( $points && ( null !== $points -> total )) {
2020-03-15 14:29:06 +01:00
$result = $points -> total ;
}
2021-10-10 15:48:53 +02:00
2020-03-15 14:29:06 +01:00
return $result ;
}
public static function get_users_total_points ( $limit = null , $order_by = null , $order = null , $status = null )
{
global $wpdb ;
$where_status = '' ;
2021-10-10 15:48:53 +02:00
if ( null !== $status ) {
$where_status = " WHERE status = ' " . $status . " ' " ;
2020-03-15 14:29:06 +01:00
}
2021-10-10 15:48:53 +02:00
$points = $wpdb -> get_results ( 'SELECT SUM(points) as total, user_id FROM ' . GDK_Points_Database :: points_get_table ( 'users' ) . $where_status . ' GROUP BY user_id' );
2020-03-15 14:29:06 +01:00
return $points ;
}
/**
2021-10-10 15:48:53 +02:00
* Get users id who have some points .
*
* @ param $user_id
*
2020-03-15 14:29:06 +01:00
* @ return array
*/
public static function get_users ()
{
global $wpdb ;
2021-10-10 15:48:53 +02:00
$users_id = $wpdb -> get_results ( 'SELECT user_id FROM ' . GDK_Points_Database :: points_get_table ( 'users' ) . ' GROUP BY user_id' );
2020-03-15 14:29:06 +01:00
2021-10-10 15:48:53 +02:00
$result = [];
2020-03-15 14:29:06 +01:00
if ( sizeof ( $users_id ) > 0 ) {
foreach ( $users_id as $user_id ) {
$result [] = $user_id -> user_id ;
}
}
2021-10-10 15:48:53 +02:00
2020-03-15 14:29:06 +01:00
return $result ;
}
2021-10-10 15:48:53 +02:00
public static function set_points ( $points , $user_id , $info = [])
2020-03-15 14:29:06 +01:00
{
global $wpdb ;
2021-10-10 15:48:53 +02:00
$values = [ 'points' => $points ];
2020-03-15 14:29:06 +01:00
2021-10-10 15:48:53 +02:00
if ( isset ( $info [ 'datetime' ]) && ( '' !== $info [ 'datetime' ])) {
2020-03-15 14:29:06 +01:00
$values [ 'datetime' ] = $info [ 'datetime' ];
} else {
$values [ 'datetime' ] = date ( 'Y-m-d H:i:s' , time ());
}
if ( isset ( $info [ 'description' ])) {
$values [ 'description' ] = $info [ 'description' ];
}
if ( isset ( $info [ 'status' ])) {
$values [ 'status' ] = $info [ 'status' ];
}
if ( isset ( $info [ 'type' ])) {
$values [ 'type' ] = $info [ 'type' ];
}
if ( isset ( $info [ 'data' ])) {
$values [ 'data' ] = $info [ 'data' ]; // yet serialized
}
if ( isset ( $info [ 'ip' ])) {
$values [ 'ip' ] = $info [ 'ip' ];
}
if ( isset ( $info [ 'ipv6' ])) {
$values [ 'ipv6' ] = $info [ 'ipv6' ];
}
$values [ 'user_id' ] = $user_id ;
2021-10-10 15:48:53 +02:00
$rows_affected = $wpdb -> insert ( GDK_Points_Database :: points_get_table ( 'users' ), $values );
2020-03-15 14:29:06 +01:00
return $rows_affected ;
}
/**
* Get a points list .
2021-10-10 15:48:53 +02:00
*
* @ param int $limit
2020-03-15 14:29:06 +01:00
* @ param string $order_by
* @ param string $order
2021-10-10 15:48:53 +02:00
* @ param mixed $output
*
2020-03-15 14:29:06 +01:00
* @ return Ambigous < mixed , NULL , multitype : , multitype : multitype : , multitype : Ambigous < multitype : , NULL > >
*/
public static function get_points ( $limit = null , $order_by = null , $order = null , $output = OBJECT )
{
global $wpdb ;
$where_str = " WHERE status != 'removed' " ;
2021-10-10 15:48:53 +02:00
$limit_str = '' ;
if ( isset ( $limit ) && ( null !== $limit )) {
$limit_str = ' LIMIT 0 ,' . $limit ;
2020-03-15 14:29:06 +01:00
}
2021-10-10 15:48:53 +02:00
$order_by_str = '' ;
if ( isset ( $order_by ) && ( null !== $order_by )) {
$order_by_str = ' ORDER BY ' . $order_by ;
2020-03-15 14:29:06 +01:00
}
2021-10-10 15:48:53 +02:00
$order_str = '' ;
if ( isset ( $order ) && ( null !== $order )) {
$order_str = ' ' . $order ;
2020-03-15 14:29:06 +01:00
}
2021-10-10 15:48:53 +02:00
$result = $wpdb -> get_results ( 'SELECT * FROM ' . GDK_Points_Database :: points_get_table ( 'users' ) . $where_str . $order_by_str . $order_str . $limit_str , $output );
2020-03-15 14:29:06 +01:00
return $result ;
}
public static function get_point ( $point_id = null )
{
global $wpdb ;
$result = null ;
2021-10-10 15:48:53 +02:00
if ( isset ( $point_id ) && ( null !== $point_id )) {
$points_id_str = ' WHERE point_id = ' . ( int ) $point_id ;
$result = $wpdb -> get_row ( 'SELECT * FROM ' . GDK_Points_Database :: points_get_table ( 'users' ) . $points_id_str );
2020-03-15 14:29:06 +01:00
}
return $result ;
}
public static function remove_points ( $point_id )
{
global $wpdb ;
2021-10-10 15:48:53 +02:00
$values = [];
2020-03-15 14:29:06 +01:00
$values [ 'status' ] = 'removed' ;
2021-10-10 15:48:53 +02:00
$rows_affected = $wpdb -> update ( GDK_Points_Database :: points_get_table ( 'users' ), $values , [ 'point_id' => $point_id ]);
2020-03-15 14:29:06 +01:00
if ( ! $rows_affected ) {
$rows_affected = null ;
}
2021-10-10 15:48:53 +02:00
2020-03-15 14:29:06 +01:00
return $rows_affected ;
}
2021-10-10 15:48:53 +02:00
public static function update_points ( $point_id , $info = [])
2020-03-15 14:29:06 +01:00
{
global $wpdb ;
2021-10-10 15:48:53 +02:00
$values = [];
2020-03-15 14:29:06 +01:00
if ( isset ( $info [ 'user_id' ])) {
$values [ 'user_id' ] = $info [ 'user_id' ];
}
if ( isset ( $info [ 'datetime' ])) {
$values [ 'datetime' ] = $info [ 'datetime' ];
}
if ( isset ( $info [ 'description' ])) {
$values [ 'description' ] = $info [ 'description' ];
}
if ( isset ( $info [ 'status' ])) {
$values [ 'status' ] = $info [ 'status' ];
}
if ( isset ( $info [ 'points' ])) {
$values [ 'points' ] = $info [ 'points' ];
}
if ( isset ( $info [ 'type' ])) {
$values [ 'type' ] = $info [ 'type' ];
}
if ( isset ( $info [ 'data' ])) {
$values [ 'data' ] = $info [ 'data' ]; // yet serialized
}
if ( isset ( $info [ 'ip' ])) {
$values [ 'ip' ] = $info [ 'ip' ];
}
if ( isset ( $info [ 'ipv6' ])) {
$values [ 'ipv6' ] = $info [ 'ipv6' ];
}
2021-10-10 15:48:53 +02:00
$rows_affected = $wpdb -> update ( GDK_Points_Database :: points_get_table ( 'users' ), $values , [ 'point_id' => $point_id ]);
2020-03-15 14:29:06 +01:00
if ( ! $rows_affected ) { // insert
$rows_affected = null ;
}
2021-10-10 15:48:53 +02:00
2020-03-15 14:29:06 +01:00
return $rows_affected ;
}
2020-02-02 04:13:58 +01:00
}