'intent:' . self::OPENER ); return $handles; } public static function drawn_at_load( $patterns ) { if ( 'vertical' !== self::$printed ) { return $patterns; } $patterns = (array) $patterns; $patterns[] = '/^fibofilters-/'; return $patterns; } public static function products_request() { if ( ! self::is_products_request() || ! class_exists( '\Rooster\Core\More' ) || ! is_callable( array( '\Rooster\Core\Compat\WooCommerce', 'products_part' ) ) || ! self::applies() ) { return; } $_GET[ \Rooster\Core\More::PART_ARG ] = 'products'; } public static function is_products_request() { if ( isset( $_REQUEST['fibofilters-products'] ) || isset( $_POST['fibofilters-products'] ) ) { return true; } if ( 'POST' !== ( $_SERVER['REQUEST_METHOD'] ?? '' ) ) { return false; } $body = (string) file_get_contents( 'php://input', false, null, 0, 1048576 ); if ( 0 !== strpos( $body, '{' ) || false === strpos( $body, 'fibofilters-products' ) ) { return false; } $data = json_decode( $body, true ); return is_array( $data ) && isset( $data['fibofilters-products'] ); } public static function applied_place() { $place = class_exists( 'AIEO_Recognised_Plugins' ) ? AIEO_Recognised_Plugins::choice( self::ID, self::APPLIED ) : self::APPLIED_COLUMN; $place = (string) apply_filters( 'aieo_fibofilters_applied_place', $place ); return self::APPLIED_ABOVE === $place ? self::APPLIED_ABOVE : self::APPLIED_COLUMN; } public static function has_chosen() { $stored = get_option( 'fibofilters_filters', array() ); $filters = is_string( $stored ) ? json_decode( $stored, true ) : $stored; foreach ( is_array( $filters ) ? $filters : array() as $filter ) { $attrs = is_array( $filter ) && isset( $filter['attributes'] ) && is_array( $filter['attributes'] ) ? $filter['attributes'] : ( is_array( $filter ) ? $filter : array() ); $slug = (string) ( $attrs['url_slug'] ?? '' ); if ( '' !== $slug && isset( $_GET[ $slug ] ) && '' !== trim( (string) wp_unslash( $_GET[ $slug ] ) ) ) { return true; } } return false; } public static function theme_pagination( $mode ) { return self::applies() ? 'pages' : $mode; } public static function available() { if ( ! shortcode_exists( 'fibofilters' ) || ! function_exists( 'rooster_device_class' ) || ! function_exists( 'rooster_icon' ) ) { return false; } $no = isset( $_GET['nofibofilters'] ) ? sanitize_key( wp_unslash( $_GET['nofibofilters'] ) ) : ''; return ! in_array( $no, array( '1', '2' ), true ) && ! in_array( (string) apply_filters( 'fibofilters/nofibofilters', '' ), array( '1', '2' ), true ); } public static function switched_on() { return ! class_exists( 'AIEO_Recognised_Plugins' ) || AIEO_Recognised_Plugins::on( self::ID ); } public static function applies( $block = null ) { if ( ! self::available() ) { return false; } return (bool) apply_filters( 'aieo_fibofilters_shop', self::switched_on(), $block ); } public static function filters( $pre, $parsed ) { if ( null !== $pre || ! is_array( $parsed ) || self::BLOCK !== ( $parsed['blockName'] ?? '' ) ) { return $pre; } if ( false === strpos( (string) ( $parsed['attrs']['className'] ?? '' ), self::FILTERS ) || ! self::applies( $parsed ) ) { return $pre; } $html = self::markup(); if ( '' === $html ) { return $pre; } $device = self::device(); self::$printed = '' === $device ? 'both' : ( 'mobile' === $device ? 'mobile' : 'vertical' ); self::assets(); $block = new WP_Block( $parsed ); return (string) apply_filters( 'render_block_' . self::BLOCK, $html, $parsed, $block ); } public static function markup() { $device = rooster_device_class(); $known = '' !== self::device(); $parts = array(); if ( ! $known || 'mobile' !== $device ) { $vertical = self::shortcode( 'vertical', $known ? 1 : self::WIDE, 99999 ); if ( '' !== $vertical ) { self::$marking = true; $applied = self::APPLIED_COLUMN === self::applied_place() && shortcode_exists( 'fibofilters_applied_filters' ) ? do_shortcode( '[fibofilters_applied_filters]' ) : ''; self::$marking = false; $parts[] = '
'; } } if ( ! $known || 'mobile' === $device ) { $mobile = self::shortcode( 'mobile', 1, $known ? 99999 : self::WIDE - 1 ); if ( '' !== $mobile ) { $parts[] = self::opener() . $mobile; } } if ( array() === $parts ) { return ''; } $layout = ! $known ? 'both' : ( 'mobile' === $device ? 'mobile' : 'vertical' ); $heading = '