array( 'fieldName' => $field, 'stringFilter' => array( 'matchType' => 'EXACT', 'value' => $value, ), ), ); } /** * Matches a dimension against a regular expression, ignoring case. * * @param string $field Dimension name. * @param string $pattern RE2 pattern. * @return array */ public static function regex( $field, $pattern ) { return array( 'filter' => array( 'fieldName' => $field, 'stringFilter' => array( 'matchType' => 'PARTIAL_REGEXP', 'value' => $pattern, 'caseSensitive' => false, ), ), ); } /** * Matches eventName against a list. * * @param string[] $events Event names. * @return array */ public static function events( array $events ) { return array( 'filter' => array( 'fieldName' => 'eventName', 'inListFilter' => array( 'values' => array_values( $events ) ), ), ); } /** * Combines filters with AND, skipping nulls. * * @param array ...$filters Filters. * @return array|null */ public static function all( ...$filters ) { $filters = array_values( array_filter( $filters ) ); if ( ! $filters ) { return null; } return 1 === count( $filters ) ? $filters[0] : array( 'andGroup' => array( 'expressions' => $filters ) ); } /** * Organic Search filter, using the site's chosen channel dimension. * * @param Profile $site Site. * @return array */ public static function organic( Profile $site ) { $field = Profile::BASIS_SESSION === $site->lead_basis ? 'sessionDefaultChannelGroup' : 'firstUserDefaultChannelGroup'; return self::exact( $field, 'Organic Search' ); } }