find(); while ($bp->fetch()) { self::$_patterns[$bp->bounce_type_id][] = $bp->pattern; } foreach (self::$_patterns as $type => $patterns) { if (count($patterns) == 1) { self::$_patterns[$type] = '{(' . $patterns[0] . ')}im'; } else { self::$_patterns[$type] = '{(' . implode(')|(', $patterns) . ')}im'; } } } /** * Try to match the string to a bounce type. * * @param string $message * The message to be matched. * * @return array * Tuple (bounce_type, bounce_reason) */ public static function &match(&$message) { // clean up $message and replace all white space by a single space, CRM-4767 $message = preg_replace('/\s+/', ' ', $message); if (self::$_patterns == NULL) { self::buildPatterns(); } foreach (self::$_patterns as $type => $re) { if (preg_match($re, $message, $matches)) { $bounce = array( 'bounce_type_id' => $type, 'bounce_reason' => $message, ); return $bounce; } } $bounce = array( 'bounce_type_id' => NULL, 'bounce_reason' => $message, ); return $bounce; } }