function pay_form::form_submit in Pay 7
Same name and namespace in other branches
- 6 includes/handlers/pay_form.inc \pay_form::form_submit()
Overrides pay::form_submit
File
- includes/
handlers/ pay_form.inc, line 384 - The base class for payment activities. All payment form classes should extend this.
Class
- pay_form
- @file The base class for payment activities. All payment form classes should extend this.
Code
function form_submit($form, &$form_state) {
global $user;
parent::form_submit($form, $form_state);
$values = $this
->form_values($form_state);
if ($this
->user_register()) {
// Copy & overwrite form values so it looks like a user_registration form.
$register_state = $form_state;
$register_state['values'] = $values['register'];
// Execute all of the user_registration form's submit handlers.
$register = $form[$this
->handler()]['register'];
form_execute_handlers('submit', $register, $register_state);
// Copy any new $register_state values into $form_state.
$form_state = array_merge($register_state, $form_state);
// Did the new user get logged in? If not, we need to temporarily log her
// in so that the transaction/actions/etc are associated with the account.
if (!$user->uid && isset($form_state['user'])) {
$user_anonymous = $user;
$user = $form_state['user'];
}
}
// Add a new transaction for this form with status as default of 'pending'.
$transaction = $this
->set_transaction($values);
// Run payment activities for the 1 or more selected payment methods.
$selected = $values['pay_method']['selected'];
if (!is_array($selected)) {
$selected = array(
$selected => 1,
);
}
foreach ($selected as $pmid => $status) {
if (!$status) {
continue;
}
$method_values = $values['pay_method'][$pmid];
$method_values['pmid'] = $pmid;
$pay_method = pay_method_load($method_values);
$transaction
->save($method_values);
$activity = $transaction
->add_activity($pay_method);
$activity
->do_activity($pay_method->pay_form_action, $method_values);
// Add this activity to form_state for other modules to use.
$form_state['pay_activity'][] = $activity;
}
// Trigger a special hook if there's a goal amount and we have reached it.
if ($this
->total_goal() && $this
->total_paid() >= $this
->total_goal()) {
$this
->drupal_invoke('pay_form_goal', $form_state);
}
// Leave the user object the way we found it.
if (isset($user_anonymous)) {
$user = $user_anonymous;
}
unset($form_state['rebuild'], $form_state['storage']);
}