public function process($model, $service, $request, $params) { if ($service->is_ip_banned()) { return $this->banned_view(); } global $rm_form_diary; if (count($rm_form_diary) > 0 && !isset($params['force_enable_multiform'])) { return; } if (isset($params['form_id']) && $params['form_id']) { $form_id = $params['form_id']; $fe_form = $this->form_factory->create_form($form_id); $form_name = 'form_' . $fe_form->get_form_id(); } else { return; } $fopts = $fe_form->get_form_options(); if ($fe_form->is_expired() && $fopts->post_expiry_action == 'switch_to_another_form') { $form_id = $fopts->post_expiry_form_id; if ($form_id) { $fe_form = $this->form_factory->create_form($form_id); $form_name = 'form_' . $fe_form->get_form_id(); } else { return; } } if (isset($request->req['rm_pproc'])) { $paypal_service = new RM_Paypal_Service(); ob_start(); $resp = $paypal_service->callback($request->req['rm_pproc'], isset($request->req['rm_pproc_id']) ? $request->req['rm_pproc_id'] : null); $paypal_callback_msg = ob_get_clean(); $x = new stdClass(); $x->form_options = $fe_form->get_form_options(); $x->form_name = $fe_form->get_form_name(); $after_sub_msg = $service->after_submission_proc($x); return $paypal_callback_msg . '<br><br>' . $after_sub_msg; } //Call form specific processing before submission. $form_preproc_response = $fe_form->pre_sub_proc($request->req, $params); if (isset($request->req['stat_id'])) { $stat_id = $request->req['stat_id']; } else { $stat_id = null; } if (isset($request->req['rm_form_sub_no']) && $request->req['rm_form_sub_no']) { $subbed_form_no = $request->req['rm_form_sub_no']; } else { $subbed_form_no = null; } if ($subbed_form_no && $fe_form->get_form_number() == $subbed_form_no && $form_preproc_response && $this->mv_handler->validateForm($form_name . "_" . $subbed_form_no) && !$service->is_browser_reload_duplication($stat_id)) { if ($service->is_off_limit_submission($form_id, $fe_form->get_form_options())) { die(RM_UI_Strings::get("ALERT_SUBMISSIOM_LIMIT")); } $primary_data = $fe_form->get_prepared_data($request->req, 'primary'); $service->update_stat_entry($stat_id); $db_data = $fe_form->get_prepared_data($request->req, 'dbonly'); $sub_detail = $service->save_submission($form_id, $db_data, $primary_data['user_email']->value); $form_options = $fe_form->get_form_options(); if ((int) $form_options->should_export_submissions === 1) { $service->export_to_external_url($form_options->export_submissions_to_url, $db_data); } if ($form_options->form_is_unique_token) { $token = $sub_detail->token; } else { $token = null; } if ($form_options->form_should_send_email) { $parameters = new stdClass(); //This is different then the $params in the argument of this function! $parameters->req = $request->req; $parameters->email = $primary_data['user_email']->value; $parameters->email_content = $form_options->form_email_content; $parameters->email_subject = $form_options->form_email_subject; $email = $service->prepare_email('to_registrar', $token, $parameters); RM_Utilities::send_mail($email); } $submissions = new RM_Submissions(); $submissions->load_from_db($sub_detail->submission_id); $parameters = new stdClass(); $parameters->sub_data = $submissions->get_data(); $parameters->form_name = $fe_form->get_form_name(); $email = $service->prepare_email('to_admin', $token, $parameters); RM_Utilities::send_mail($email); $params['sub_detail'] = $sub_detail; /* * Check for payment */ //also call Form specific method after submission $prevent_redirection = false; if ($fe_form->has_price_field()) { $params['paystate'] = 'pre_payment'; $fe_form->post_sub_proc($request->req, $params, false); $params['is_paid'] = $service->process_payment($fe_form, $request, $params); if ($params['is_paid'] === 'do_not_redirect') { $params['paystate'] = 'post_payment'; $fe_form->post_sub_proc($request->req, $params, false); $this->update_user_profile($primary_data['user_email']->value, $db_data, $service); $prevent_redirection = true; } else { $params['paystate'] = 'post_payment'; $fe_form->post_sub_proc($request->req, $params, $params['is_paid']); $this->update_user_profile($primary_data['user_email']->value, $db_data, $service); } } else { $params['paystate'] = 'na'; $fe_form->post_sub_proc($request->req, $params); $this->update_user_profile($primary_data['user_email']->value, $db_data, $service); } unset($parameters->sub_data); $parameters->form_options = $form_options; if (!$prevent_redirection) { return $service->after_submission_proc($parameters); } //This must be returned as there is no ob_start here at work. } else { $data = new stdClass(); $data->stat_id = $service->create_stat_entry($params); $data->fe_form = $fe_form; $force_multiple_form = isset($params['force_enable_multiform']) ? true : false; $view = $this->mv_handler->setView("user_form_nexgen", true); return $view->read($data, $force_multiple_form); } }