CiviCRM ought to capture the credit card holder name directly (ie, provide a text field for this purpose rather than use 3 name fields).
I have classified this is a major improvement, as there are a number of important cases where the cardholder name doesn't correspond to the contact's name (joint accounts, corporate accounts, maiden name, etc).
CiviCRM should not store the credit card holder name, as it should not store any credit card details.
A number of configuration parameters suggest themselves ...
- The current implementation (3 name fields) suits PayPal. The behaviour of this change should depend on the payment processor being used.
- The current behaviour is well-tested and widely-used. Use of the 3 name fields should be the default behaviour, and a configuration parameter supplied so administrators can select whether the credit-card-holder-name is used instead
- If an administrator chooses to use the credit card holder name, this begs the question of whether the 3 name fields and the address details are mandatory or optional. Cases can be imagined for both: the names are mandatory for an event where tickets are posted to the participant; and are optional for a donation (though perhaps required for a tax deduction). This suggests 3 behaviour modes which can be set globally and overridden for specific events or contributions ...
- PayPal (no credit card holder name field, 3 mandatory name fields, mandatory address fields)
- Credit Card Holder (mandatory credit card holder name field, 3 optional name fields, optional address fields)
- Credit Card Holder plus Billing Details (mandatory credit card holder name field, 3 mandatory name fields, mandatory address fields))
- Note that for PayPal-like payment processors, only 'PayPal' mode is available.
- Apparently PayPal doesn't need the address fields to be mandatory (witness http://forum.civicrm.org/index.php/topic,3577.msg15849.html#msg15849). Though not necessary to this change, perhaps there should be another configuration parameter that decides whether the address fields are mandatory or not.
I have implemented this change (without any of the configuration parameter logic) in my copy of CiviCRM 2.0.3. I'll attach a file showing the changes. The PHP changes basically involve adding 'credit_card_holder' processing wherever 'credit_card_number' is processed, and making the 'billing_*_name' and billing address fields non-mandatory. The TPL changes basically involve adding 'credit_card_holder', and changing labels to indicate the billing name is not the credit card holder name, and is not mandatory.