# disco/1.3.2/app/Features/UserLimit.php

Discount Rules for WooCommerce – Disco | Dynamic Pricing, Conditions, Bulk, Bundle, BOGO, version 1.3.2. 134 lines.

- Page: https://pluginprobe.com/plugins/disco/1.3.2/code/app/Features/UserLimit.php
- Raw: https://pluginprobe.com/plugins/disco/1.3.2/raw/app/Features/UserLimit.php
- Modified: 2025-08-21T04:30:56+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/disco/1.3.2/code/app/Features/UserLimit.php#L10-L20`.

```php
<?php
/**
 * UserLimit Feature
 *
 * @package    Disco
 * @subpackage App\Utility
 * @since      1.0.0
 * @category   Utility
 */

namespace Disco\App\Features;

/**
 * Class DiscountLimit
 *
 * @package    Disco
 * @subpackage App\Feature
 * @author     Ohidul Islam <wahid0003@gmail.com>
 * @link       https://webappick.com
 * @license    https://opensource.org/licenses/gpl-license.php GNU Public License
 * @category   Utility
 */
class UserLimit {

	/**
     * Disco start session function.
     * Set campaign in WC session as an array.
     *
     * @param int $campaign_id Campaign ID.
     * @return void
     */
	public function disco_start_session_on_checkout( $campaign_id ) {
		if ( ! is_checkout() ) {
			return;
		}

		// Retrieve the current associative array from the session
		$disco_campaign = WC()->session->get( 'disco_campaign', array() );

		if ( !is_array( $disco_campaign ) ) {
			$disco_campaign = (array) $disco_campaign;
		}

		// Check if the key (campaign ID) already exists
		if ( in_array( $campaign_id, $disco_campaign, true ) ) {
			return;
		}

		// Add the new data using the campaign ID as the key
		$disco_campaign[] = $campaign_id;

		// Save the updated associative array back to the session
		WC()->session->set( 'disco_campaign', $disco_campaign );
	}

    /**
     * Retrieve total applied campaign by campaign id.
     *
     * @param int $campaign_id Campaign ID.
     * @return int
     */
	public function disco_get_total_applied_campaign( $campaign_id ) { // phpcs:disable
		global $wpdb;

		// Filter the order statuses
		$status = apply_filters(
			'disco_campaign_user_limit_order_statuses',
			array(
				'wc-processing',
				'wc-on-hold',
				'wc-completed',
			),
			$campaign_id
		);

		// Default query for posts table
		$placeholders = implode( ',', array_fill( 0, count( $status ), '%s' ) );

		$sql = "
		SELECT COUNT(p.ID)
		FROM {$wpdb->posts} AS p
		INNER JOIN {$wpdb->postmeta} AS pm ON p.ID = pm.post_id
		WHERE p.post_type = 'shop_order'
		AND p.post_status IN ($placeholders)
		AND pm.meta_key = %s
		AND pm.meta_value = %d
	";

		$count = $wpdb->get_var(
			$wpdb->prepare(
				$sql,
				...array_merge( $status, array( 'disco_campaign', $campaign_id ) )
			)
		);

		// HPOS query
		if ( $this->disco_is_hpos_enabled() ) {
			$placeholders = implode( ',', array_fill( 0, count( $status ), '%s' ) );

			$sql = "
			SELECT COUNT(DISTINCT o.id)
			FROM {$wpdb->prefix}wc_orders AS o
			INNER JOIN {$wpdb->prefix}wc_orders_meta AS om ON o.id = om.order_id
			WHERE o.status IN ($placeholders)
			AND om.meta_key = %s
			AND om.meta_value = %d
		";

			$count = $wpdb->get_var(
				$wpdb->prepare(
					$sql,
					...array_merge( $status, array( 'disco_campaign', $campaign_id ) )
				)
			);
		}

		return (int) $count;
	}

	/**
	 * Check WooCommerce HPOS is enabled or not.
	 *
	 * @return bool
	 */
	private function disco_is_hpos_enabled() {
		if ( class_exists( \Automattic\WooCommerce\Utilities\OrderUtil::class ) ) {
			return \Automattic\WooCommerce\Utilities\OrderUtil::custom_orders_table_usage_is_enabled();
		}

		return false;
	}

}

```
