Activity::query()
Description #
Prepare and fetch notifications from database.
Source #
File: includes/class/class-activity.php
public function query() {
global $wpdb;
$sql = array(
'fields' => 'a.*',
'where' => array(),
'orderby' => 'a.' . $this->args['orderby'],
'order' => ( 'DESC' === $this->args['order'] ? 'DESC' : 'ASC' ),
);
// Add q_id to where clause.
if ( isset( $this->args['q_id'] ) ) {
$sql['where'][] = $wpdb->prepare( 'AND a.activity_q_id = %d', (int) $this->args['q_id'] );
}
// Add a_id to where clause.
if ( isset( $this->args['a_id'] ) ) {
$sql['where'][] = $wpdb->prepare( 'AND a.activity_a_id = %d', (int) $this->args['a_id'] );
}
// Add c_id to where clause.
if ( isset( $this->args['c_id'] ) ) {
$sql['where'][] = $wpdb->prepare( 'AND a.activity_c_id = %d', (int) $this->args['c_id'] );
}
// Add user_id to where clause.
if ( isset( $this->args['user_id'] ) ) {
$sql['where'][] = $wpdb->prepare( 'AND a.activity_user_id = %d', (int) $this->args['user_id'] );
}
$exclude = '';
// Add user_id to where clause.
if ( ! empty( $this->args['exclude_roles'] ) ) {
$cap_key = $wpdb->prefix . 'capabilities';
$role_like = '';
$total = count( $this->args['exclude_roles'] );
$i = 1;
foreach ( $this->args['exclude_roles'] as $r ) {
$role_like .= $wpdb->prepare( 'um.meta_value NOT LIKE %s', '%' . sanitize_title( $wpdb->esc_like( $r ) ) . '%' );
if ( $total > $i ) {
$role_like .= ' AND ';
}
++$i;
}
if ( ! empty( $role_like ) ) {
$exclude = "LEFT JOIN {$wpdb->usermeta} um ON um.user_id = a.activity_user_id";
$sql['where'][] = "AND ( um.meta_key = '{$cap_key}' AND ( {$role_like} ) )";
}
}
$where = implode( ' ', $sql['where'] );
$query = "SELECT SQL_CALC_FOUND_ROWS {$sql['fields']} FROM {$wpdb->ap_activity} a $exclude WHERE 1=1 {$where} ORDER BY {$sql['orderby']} {$sql['order']} LIMIT {$this->offset},{$this->per_page}";
$this->objects = $wpdb->get_results( $query ); // phpcs:ignore WordPress.DB
$this->total_count( '' );
$activities = array();
foreach ( $this->objects as $activity ) {
$activity = ap_activity_parse( $activity );
$activities[] = $activity;
}
$this->objects = $activities;
$this->prefetch();
parent::query();
}
Expand full source code Collapse full source code View on GitHub: includes/class/class-activity.php:108
Add your comment