static function getNameParts($id, $name = null) { if (!$name) { $name = EntityTable::getName($id); } //get base parts of org name to filter donations $parts = preg_split('#[ \\\\/]#', OrgTable::stripNamePunctuation($name)); $parts = self::filterNameParts($parts); if (count($parts) == 0 || count($parts) == 1 && $parts[0] == strtoupper($parts[0])) { $moreParts = array(); $aliases = AliasTable::getByEntityId($id, false); foreach ($aliases as $alias) { $aliasParts = preg_split('#[ \\-\\\\/]#', OrgTable::stripNamePunctuation($alias)); $aliasParts = self::filterNameParts($aliasParts); foreach ($aliasParts as $aliasPart) { $moreParts[] = $aliasPart; if (count($moreParts) > 1) { break 2; } } } // trick for finding unique values of merged $parts + $moreParts without changing the order: $parts = array_keys(array_count_values(array_merge($parts, $moreParts))); } $parts = count($parts) ? array_slice($parts, 0, 2) : array($name); return $parts; }