ActivityUpdates.php
1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
namespace ACA\BP\Search\User;
use ACP\Search\Comparison;
use ACP\Search\Operators;
use ACP\Search\Query\Bindings;
use ACP\Search\Value;
class ActivityUpdates extends Comparison {
/** @var string */
private $activity;
public function __construct( $activity ) {
$this->activity = $activity;
$operators = new Operators( [
Operators::BETWEEN,
Operators::GT,
Operators::LT,
] );
parent::__construct( $operators );
}
/**
* @inheritDoc
*/
protected function create_query_bindings( $operator, Value $value ) {
global $wpdb, $bp;
$bindings = new Bindings();
$q_value = $value->get_value();
$having = '';
$where = '';
switch ( $operator ) {
case Operators::GT:
$having = $wpdb->prepare( ' AND activities > %d', $q_value[0] );
break;
case Operators::LT:
$having = $wpdb->prepare( ' AND activities < %d', $q_value[0] );
break;
case Operators::BETWEEN:
$having = $wpdb->prepare( ' AND activities BETWEEN %d AND %d', $q_value[0], $q_value[1] );
break;
}
if ( $this->activity ) {
$where = $wpdb->prepare( 'WHERE type = %s', $this->activity );
}
$sub_query = "
(SELECT user_id, COUNT(user_id) as activities
FROM {$bp->activity->table_name}
{$where}
GROUP BY user_id
HAVING activities != '' {$having}
ORDER BY activities)";
$bindings->join( "INNER JOIN {$sub_query} as ac_AU ON {$wpdb->users}.id = ac_AU.user_id" );
return $bindings;
}
}