*/ public function all(): array { global $wpdb; $stats = array(); $issued = (array) $wpdb->get_results( $wpdb->prepare( "SELECT campaign_id, SUM( email <> '' ) AS issued FROM %i GROUP BY campaign_id", Tables::codes() ) ); foreach ( $issued as $row ) { $stats[ (int) $row->campaign_id ] = self::empty(); $stats[ (int) $row->campaign_id ]['issued'] = (int) $row->issued; } $used = (array) $wpdb->get_results( $wpdb->prepare( 'SELECT campaign_id, COUNT(*) AS redemptions, SUM( discount_amount ) AS saved, SUM( order_total ) AS revenue FROM %i WHERE released_at IS NULL GROUP BY campaign_id', Tables::redemptions() ) ); foreach ( $used as $row ) { $id = (int) $row->campaign_id; $stats[ $id ] = array_merge( $stats[ $id ] ?? self::empty(), array( 'redemptions' => (int) $row->redemptions, 'saved' => round( (float) $row->saved, 2 ), 'revenue' => round( (float) $row->revenue, 2 ), ) ); } return $stats; } /** * @param int $campaign_id Campaign ID. */ public function for_campaign( int $campaign_id ): array { return $this->all()[ $campaign_id ] ?? self::empty(); } public static function empty(): array { return array( 'issued' => 0, 'redemptions' => 0, 'saved' => 0.0, 'revenue' => 0.0, ); } }