base; } ); return $baseQuery[ 0 ]; } /** * Return a list of all defined queries. * * @since 1.0.0 * @return array */ public static function get(): array { return Core::instance()->getSettingsManager()->getProvider()->get()->queries; } public static function getBySlug( string $slug ): ?QueryDTO { $queries = self::get(); $queries = array_values( array_filter( $queries, function( QueryDTO $q ) use ( $slug ) { return $q->slug === $slug; } ) ); if ( ! empty( $queries ) ) { return $queries[0]; } return null; } /** * Return a list of all defined queries from a set of saved settings. * * @since 1.0.0 * @return array */ public static function getFromSettings( ?array $savedQueries, ?\stdClass $settings = null ): array { $queries = array(); if ( ! $savedQueries || 0 === count( array_filter( $savedQueries, function( $q ) { return isset( $q->base ) && 1 == $q->base; } ) ) ) { $queries[] = QueryDTO::default(); } if ( $savedQueries ) { foreach ( $savedQueries as $query ) { $queries[] = QueryDTO::fromSettings( $query ); } } if ( $settings ) { usort( $queries, function( $a, $b ) use ( $settings ) { if ( 'desktopFirst' === $settings->options->queriesMode ) { return intval( $a->value ) > intval( $b->value ) ? -1 : 1; } else { return intval( $a->value ) > intval( $b->value ) ? 1 : -1; } } ); } foreach ( $queries as $i => &$query ) { if ( 0 === $i ) { $query->base = true; } else { $query->base = false; } if ( $query->base ) { $query->inherit = ''; } else { if ( isset( $queries[ $i - 1 ] ) ) { $query->inherit = $queries[ $i - 1 ]->slug; } } } if ( false === Core::instance()->isPro() ) { $queries = array_slice( $queries, 0, 2 ); } return $queries; } /** * Build the query string. * * @since 1.0.0 * @param string $query The original query string. * @return string */ public static function build( string $query ): string { if ( $query && ! str_starts_with( $query, '@media' ) ) { $query = '@media ' . $query; } return $query; } }