protected function getCCFields(array $gateways)
{
$onsiteGateways = array();
$allRequired = array();
foreach ($gateways as $gateway => $title) {
if (!GatewayInfo::isOffsite($gateway)) {
$required = GatewayInfo::requiredFields($gateway);
$onsiteGateways[$gateway] = $required;
$allRequired += $required;
}
}
$allRequired = array_unique($allRequired);
if (empty($onsiteGateways)) {
return null;
}
$factory = new GatewayFieldsFactory(null, array('Card'));
$ccFields = $factory->getCardFields();
// Remove all the credit card fields that aren't required by any gateway
foreach ($ccFields->dataFields() as $name => $field) {
if ($name && !in_array($name, $allRequired)) {
$ccFields->removeByName($name, true);
}
}
$lookupField = LiteralField::create('_CCLookupField', sprintf('<span class="gateway-lookup" data-gateways=\'%s\'></span>', json_encode($onsiteGateways, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP)));
$ccFields->push($lookupField);
return CompositeField::create($ccFields)->setTag('fieldset')->addExtraClass('credit-card');
}