RTMediaModel::get_counts PHP Method

get_counts() public method

public get_counts ( mixed $user_id = false, mixed $where_query = false ) : string
$user_id mixed
$where_query mixed
return string $result
    function get_counts($user_id = false, $where_query = false)
    {
        if (!$user_id && !$where_query) {
            return false;
        }
        global $wpdb, $rtmedia;
        $query = "SELECT {$this->table_name}.privacy, ";
        foreach ($rtmedia->allowed_types as $type) {
            $type['name'] = esc_sql($type['name']);
            $query .= $wpdb->prepare("SUM(CASE WHEN {$this->table_name}.media_type LIKE %s THEN 1 ELSE 0 END) as {$type['name']}, ", $type['name']);
        }
        $query .= "SUM(CASE WHEN {$this->table_name}.media_type LIKE 'album' THEN 1 ELSE 0 END) as album\n\t\tFROM\n\t\t\t{$this->table_name} WHERE 2=2 ";
        if (is_multisite()) {
            $query .= $wpdb->prepare(" AND {$this->table_name}.blog_id = %d ", get_current_blog_id());
        }
        $where_query_sql = '';
        if ($where_query) {
            foreach ($where_query as $colname => $colvalue) {
                $colname = esc_sql($colname);
                if ('meta_query' !== strtolower($colname)) {
                    if (is_array($colvalue)) {
                        if (!isset($colvalue['compare'])) {
                            $compare = 'IN';
                        } else {
                            $compare = $colvalue['compare'];
                        }
                        if (!isset($colvalue['value'])) {
                            $colvalue['value'] = $colvalue;
                        }
                        $compare = esc_sql($compare);
                        $where_query_sql .= " AND {$this->table_name}.{$colname} {$compare} ('" . implode("','", esc_sql($colvalue['value'])) . "')";
                    } else {
                        $where_query_sql .= $wpdb->prepare(" AND {$this->table_name}.{$colname} = %s", $colvalue);
                    }
                }
            }
        }
        $where_query_sql = apply_filters('rtmedia-get-counts-where-query', $where_query_sql);
        $query = $query . $where_query_sql . ' GROUP BY privacy limit 100';
        $result = $wpdb->get_results($query);
        if (!is_array($result)) {
            return false;
        }
        return $result;
    }

Usage Example

Example #1
0
 function refresh_counts($user_id, $where)
 {
     $model = new RTMediaModel();
     $counts = $model->get_counts($user_id, $where);
     $media_count = array();
     foreach ($counts as $count) {
         if (!isset($count->privacy)) {
             $count->privacy = 0;
         }
         if (isset($media_count[strval($count->privacy)])) {
             foreach ($media_count[strval($count->privacy)] as $key => $val) {
                 $media_count[strval($count->privacy)]->{$key} = intval($count->{$key}) + intval($val);
             }
         } else {
             $media_count[strval($count->privacy)] = $count;
         }
         unset($media_count[strval($count->privacy)]->privacy);
     }
     if (isset($where["context"])) {
         if ($where["context"] == "profile") {
             update_user_meta($user_id, 'rtmedia_counts_' . get_current_blog_id(), $media_count);
         } else {
             if ($where["context"] == "group" && function_exists("groups_update_groupmeta")) {
                 groups_update_groupmeta($user_id, 'rtmedia_counts_' . get_current_blog_id(), $media_count);
             }
         }
     }
     return $media_count;
 }