Sindbad~EG File Manager
<?php
namespace FluentForm\App\Services\Form;
use FluentForm\App\Helpers\Helper;
use FluentForm\App\Models\Form;
use FluentForm\App\Models\FormMeta;
use FluentForm\App\Models\Submission;
use FluentForm\App\Modules\Form\FormFieldsParser;
use FluentForm\App\Services\Browser\Browser;
use FluentForm\App\Services\FormBuilder\ShortCodeParser;
use FluentForm\App\Services\Submission\SubmissionService;
use FluentForm\Database\Migrations\SubmissionDetails;
use FluentForm\Framework\Foundation\App;
use FluentForm\Framework\Helpers\ArrayHelper as Arr;
use FluentForm\Framework\Validator\ValidationException;
class SubmissionHandlerService
{
protected $app;
protected $form;
protected $fields;
protected $formData;
protected $validationService;
protected $submissionService;
public function __construct()
{
$this->app = App::getInstance();
$this->validationService = new FormValidationService();
$this->submissionService = new SubmissionService();
}
/**
* Form Submission
* @param $formDataRaw
* @param $formId
* @return array
* @throws \FluentForm\Framework\Validator\ValidationException
*/
public function handleSubmission($formDataRaw, $formId)
{
$this->prepareHandler($formId, $formDataRaw);
$insertData = $this->handleValidation();
$insertId = $this->insertSubmission($insertData, $formDataRaw, $formId);
return $this->processSubmissionData($insertId, $this->formData, $this->form);
}
/**
* @throws ValidationException
*/
protected function prepareHandler($formId, $formDataRaw)
{
$this->form = Form::find($formId);
if (!$this->form) {
throw new ValidationException('', 422, null, ['errors' => 'Sorry, No corresponding form found']);
}
// Parse the form and get the flat inputs with validations.
$this->fields = FormFieldsParser::getInputs($this->form, ['rules', 'raw']);
$this->formData = fluentFormSanitizer($formDataRaw, null, $this->fields);
}
/**
* Prepare the data to be inserted to the database.
* @param boolean $formData
* @return array
*/
public function prepareInsertData($formData = false)
{
$formId = $this->form->id;
if (!$formData) {
$formData = $this->formData;
}
$previousItem = Submission::where('form_id', $formId)->orderBy('id', 'DESC')->first();
$serialNumber = 1;
if ($previousItem) {
$serialNumber = $previousItem->serial_number + 1;
}
$browser = new Browser();
$inputConfigs = FormFieldsParser::getEntryInputs($this->form, ['admin_label', 'raw']);
$formData = apply_filters_deprecated(
'fluentform_insert_response_data',
[
$formData,
$formId,
$inputConfigs
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/insert_response_data',
'Use fluentform/insert_response_data instead of fluentform_insert_response_data.'
);
$this->formData = apply_filters('fluentform/insert_response_data', $formData, $formId, $inputConfigs);
$ipAddress = $this->app->request->getIp();
$disableIpLog = apply_filters_deprecated(
'fluentform_disable_ip_logging',
[
false,
$formId
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/disable_ip_logging',
'Use fluentform/disable_ip_logging instead of fluentform_disable_ip_logging.'
);
if ((defined('FLUENTFROM_DISABLE_IP_LOGGING') && FLUENTFROM_DISABLE_IP_LOGGING) || apply_filters('fluentform/disable_ip_logging',
$disableIpLog, $formId)) {
$ipAddress = false;
}
$response = [
'form_id' => $formId,
'serial_number' => $serialNumber,
'response' => json_encode($this->formData, JSON_UNESCAPED_UNICODE),
'source_url' => site_url(Arr::get($formData, '_wp_http_referer')),
'user_id' => get_current_user_id(),
'browser' => $browser->getBrowser(),
'device' => $browser->getPlatform(),
'ip' => $ipAddress,
'created_at' => current_time('mysql'),
'updated_at' => current_time('mysql'),
];
$response = apply_filters_deprecated(
'fluentform_filter_insert_data',
[
$response
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/filter_insert_data',
'Use fluentform/filter_insert_data instead of fluentform_filter_insert_data.'
);
return apply_filters('fluentform/filter_insert_data', $response);
}
public function processSubmissionData($insertId, $formData, $form)
{
$form = isset($this->form) ? $this->form : $form;
do_action_deprecated(
'fluentform_before_form_actions_processing',
[
$insertId,
$this->formData,
$form
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/before_form_actions_processing',
'Use fluentform/before_form_actions_processing instead of fluentform_before_form_actions_processing.'
);
do_action('fluentform/before_form_actions_processing', $insertId, $this->formData, $form);
if ($insertId) {
ob_start();
$this->submissionService->recordEntryDetails($insertId, $form->id, $formData);
$isError = ob_get_clean();
if ($isError) {
SubmissionDetails::migrate();
}
}
$returnData = $this->getReturnData($insertId, $form, $formData);
$error = '';
try {
do_action('fluentform_submission_inserted', $insertId, $formData, $form);
do_action(
'fluentform/submission_inserted',
$insertId,
$formData,
$form
);
Helper::setSubmissionMeta($insertId, 'is_form_action_fired', 'yes');
do_action_deprecated(
'fluentform_submission_inserted_' . $form->type . '_form',
[
$insertId,
$formData,
$form
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/submission_inserted_' . $form->type . '_form',
'Use fluentform/submission_inserted_' . $form->type . '_form instead of fluentform_submission_inserted_' . $form->type . '_form'
);
$this->app->doAction(
'fluentform/submission_inserted_' . $form->type . '_form',
$insertId,
$formData,
$form
);
} catch (\Exception $e) {
if (defined('WP_DEBUG') && WP_DEBUG) {
$error = $e->getMessage();
}
}
do_action_deprecated(
'fluentform_before_submission_confirmation',
[
$insertId,
$formData,
$form
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/before_submission_confirmation',
'Use fluentform/before_submission_confirmation instead of fluentform_before_submission_confirmation.'
);
do_action('fluentform/before_submission_confirmation', $insertId, $formData, $form);
return [
'insert_id' => $insertId,
'result' => $returnData,
'error' => $error,
];
}
/**
* Return Formatted Response Data
* @param $insertId
* @param $form
* @param $formData
* @return mixed
*/
public function getReturnData($insertId, $form, $formData)
{
if (empty($form->settings)) {
$formSettings = FormMeta::retrieve('formSettings', $form->id);
$form->settings = is_array($formSettings) ? $formSettings : [];
}
$confirmation = $form->settings['confirmation'];
$confirmation = apply_filters_deprecated(
'fluentform_form_submission_confirmation',
[
$confirmation,
$formData,
$form
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/form_submission_confirmation',
'Use fluentform/form_submission_confirmation instead of fluentform_form_submission_confirmation.'
);
$confirmation = apply_filters(
'fluentform/form_submission_confirmation',
$confirmation,
$formData,
$form
);
if ('samePage' == Arr::get($confirmation, 'redirectTo')) {
$confirmation['messageToShow'] = apply_filters_deprecated(
'fluentform_submission_message_parse',
[
$confirmation['messageToShow'],
$insertId,
$formData,
$form
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/submission_message_parse',
'Use fluentform/submission_message_parse instead of fluentform_submission_message_parse.'
);
$confirmation['messageToShow'] = apply_filters('fluentform/submission_message_parse',
$confirmation['messageToShow'], $insertId, $formData, $form);
$message = ShortCodeParser::parse(
$confirmation['messageToShow'],
$insertId,
$formData,
$form,
false,
true
);
$message = $message ? $message : __('The form has been successfully submitted.', 'fluentform');
$returnData = [
'message' => do_shortcode($message),
'action' => $confirmation['samePageFormBehavior'],
];
} else {
$redirectUrl = Arr::get($confirmation, 'customUrl');
if ('customPage' == $confirmation['redirectTo']) {
$redirectUrl = get_permalink($confirmation['customPage']);
}
if (
('yes' == Arr::get($confirmation, 'enable_query_string')) &&
Arr::get($confirmation, 'query_strings')
) {
if (strpos($redirectUrl, '?')) {
$redirectUrl .= '&' . Arr::get($confirmation, 'query_strings');
} else {
$redirectUrl .= '?' . Arr::get($confirmation, 'query_strings');
}
}
$parseUrl = apply_filters_deprecated(
'fluentform_will_parse_url_value',
[
true,
$form
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/will_parse_url_value',
'Use fluentform/will_parse_url_value instead of fluentform_will_parse_url_value.'
);
$isUrlParser = apply_filters('fluentform/will_parse_url_value', $parseUrl, $form);
$redirectUrl = ShortCodeParser::parse(
$redirectUrl,
$insertId,
$formData,
$form,
$isUrlParser
);
if ($isUrlParser) {
/*
* For Empty Redirect Value
*/
if (strpos($redirectUrl, '=&') || '=' == substr($redirectUrl, -1)) {
$urlArray = explode('?', $redirectUrl);
$baseUrl = array_shift($urlArray);
$query = wp_parse_url($redirectUrl)['query'];
$queryParams = explode('&', $query);
$params = [];
foreach ($queryParams as $queryParam) {
$paramArray = explode('=', $queryParam);
if (!empty($paramArray[1])) {
$params[$paramArray[0]] = $paramArray[1];
}
}
$redirectUrl = add_query_arg($params, $baseUrl);
}
}
$message = ShortCodeParser::parse(
Arr::get($confirmation, 'redirectMessage', ''),
$insertId,
$formData,
$form,
false,
true
);
$returnData = [
'redirectUrl' => wp_sanitize_redirect(urldecode($redirectUrl)),
'message' => $message,
];
}
$returnData = apply_filters_deprecated(
'fluentform_submission_confirmation',
[
$returnData,
$form,
$confirmation
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/submission_confirmation',
'Use fluentform/submission_confirmation instead of fluentform_submission_confirmation.'
);
return $this->app->applyFilters(
'fluentform/submission_confirmation',
$returnData,
$form,
$confirmation
);
}
/**
* Validates Submission
* @throws ValidationException
*/
private function handleValidation()
{
/* Now validate the data using the previous validations. */
$this->validationService->setForm($this->form);
$this->validationService->setFormData($this->formData);
$this->validationService->validateSubmission($this->fields, $this->formData);
$insertData = $this->prepareInsertData();
if ($this->validationService->isSpam($this->formData, $this->form)) {
$insertData['status'] = 'spam';
$this->validationService->handleSpamError();
}
return $insertData;
}
protected function insertSubmission($insertData, $formDataRaw, $formId)
{
do_action_deprecated(
'fluentform_before_insert_submission',
[
$insertData,
$formDataRaw,
$this->form
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/before_insert_submission',
'Use fluentform/before_insert_submission instead of fluentform_before_insert_submission.'
);
do_action('fluentform/before_insert_submission', $insertData, $formDataRaw, $this->form);
if ($this->form->has_payment) {
do_action_deprecated(
'fluentform_before_insert_payment_form',
[
$insertData,
$formDataRaw,
$this->form
],
FLUENTFORM_FRAMEWORK_UPGRADE,
'fluentform/before_insert_payment_form',
'Use fluentform/before_insert_payment_form instead of fluentform_before_insert_payment_form.'
);
do_action('fluentform/before_insert_payment_form', $insertData, $formDataRaw, $this->form);
}
$insertId = Submission::insertGetId($insertData);
do_action('fluentform/notify_on_form_submit', $insertId, $this->formData, $this->form);
$uidHash = md5(wp_generate_uuid4() . $insertId);
Helper::setSubmissionMeta($insertId, '_entry_uid_hash', $uidHash, $formId);
return $insertId;
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists