| Server IP : 52.25.153.185 / Your IP : 216.73.217.131 Web Server : Apache System : Linux ip-172-26-6-158 5.10.0-35-cloud-amd64 #1 SMP Debian 5.10.237-1 (2025-05-19) x86_64 User : daemon ( 1) PHP Version : 8.1.10 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /bitnami/wordpress/wp-content/plugins/fluentformpro/src/classes/ |
Upload File : |
<?php
namespace FluentFormPro\classes;
use FluentForm\App\Helpers\Helper;
use FluentForm\App\Models\FormMeta;
use FluentForm\App\Services\FormBuilder\ShortCodeParser;
use FluentForm\App\Services\Submission\SubmissionService;
use FluentForm\Framework\Helpers\ArrayHelper;
use FluentFormPro\classes\SharePage\SharePage;
if ( ! defined('ABSPATH')) {
exit; // Exit if accessed directly.
}
class FrontEndEntryView
{
protected $metaKey = 'front_end_entry_view';
protected $submissionService;
/**
* Default settings for front-end view
*/
protected $defaultViewSettings = [
'status' => 'no',
'color_schema' => '#4286c4',
'custom_color' => '#4286c4',
'design_style' => 'modern',
'layout' => 'front_end_entry',
'no_index' => 'no',
'for_logged_in_user' => 'no',
'content' => '{all_data}',
'logo' => '',
'title' => '',
'description' => '',
'featured_image' => '',
'background_image' => '',
'media' => '',
'alt_text' => '',
'form_shadow' => [],
];
public function init()
{
$this->submissionService = new SubmissionService();
$this->initHooks();
}
protected function initHooks()
{
add_action('fluentform/after_save_form_settings', [$this, 'saveFormSettings'], 10, 2);
add_filter('fluentform/form_settings_ajax', [$this, 'injectInFormSettings'], 10, 2);
add_filter('fluentform/submission_shortcodes', [$this, 'addEntryUidLinkShortcode'], 10, 2);
if ($this->canHandleFrontendView()) {
add_action('wp', [$this, 'processFrontendView']);
}
}
/**
* Frontend View Methods
*/
protected function canHandleFrontendView()
{
if (is_admin() ||
!ArrayHelper::get($_GET, 'ff_entry') ||
!ArrayHelper::get($_GET, 'hash')) {
return false;
}
return $this->isViewEnabled();
}
public function isViewEnabled()
{
static $status = null;
if ($status !== null) {
return $status;
}
$status = $this->getActiveViewForms()->count() > 0;
return apply_filters('fluentform/front_end_entry_view_status', $status);
}
protected function getActiveViewForms()
{
return FormMeta::where('meta_key', $this->metaKey)
->get()
->filter(function ($meta) {
$value = json_decode($meta->value, true);
return ($value['status'] ?? '') === 'yes';
});
}
public function processFrontendView()
{
$submission = $this->getSubmissionByHash();
if ( ! $submission) {
$this->handleRedirect();
return;
}
$this->renderSubmissionView($submission);
}
protected function getSubmissionByHash()
{
$hash = ArrayHelper::get($_GET, 'hash');
$entryId = ArrayHelper::get($_GET, 'ff_entry');
if ( ! $hash || ! $entryId) {
return null;
}
try {
return $this->submissionService->findByParams(['uidHash' => $hash]);
} catch (\Exception $e) {
return null;
}
}
protected function handleRedirect()
{
wp_redirect(home_url());
exit;
}
protected function handleLoggedInUserRequired()
{
wp_redirect(wp_login_url(get_permalink()));
exit;
}
/**
* Check if the current user can view the submission
*/
protected function canUserViewSubmission($submission)
{
if (current_user_can('manage_options')) {
return true;
}
if ( ! $submission->user_id) {
return true;
}
return get_current_user_id() == (int)$submission->user_id;
}
protected function renderSubmissionView($submission)
{
$settings = $this->getViewSettings($submission->form_id);
if (ArrayHelper::get($settings, 'status') !== 'yes') {
$this->handleRedirect();
return;
}
if (ArrayHelper::get($settings, 'for_logged_in_user') === 'yes') {
if ( ! is_user_logged_in()) {
$this->handleRedirect();
return;
} elseif ( ! $this->canUserViewSubmission($submission)) {
$this->handleRedirect();
return;
}
}
$formData = json_decode($submission->response, true);
$userContent = $settings['content'] ?: '{all_data}';
$content = $this->parseSubmissionContent($submission, $formData, $userContent);
// Calculate background color like SharePage does
$backgroundColor = ArrayHelper::get($settings, 'bg_color');
if ($backgroundColor == '') {
$backgroundColor = ArrayHelper::get($settings, 'color_schema');
}
// Calculate page title
$pageTitle = $submission->form->title;
if ($settings['title']) {
$pageTitle = $settings['title'];
}
$viewData = [
'settings' => $settings,
'title' => $pageTitle,
'form_id' => $submission->form_id,
'form' => $submission->form,
'bg_color' => $backgroundColor,
'landing_content' => $content,
'has_header' => $settings['logo'] || $settings['title'] || $settings['description'],
'isEmbeded' => ! ! ArrayHelper::get($_GET, 'embedded'),
'front_end_entry' => true,
];
$this->addNoIndexMetaTags($settings);
(new SharePage())->loadPublicView($viewData);
}
protected function getViewSettings($formId)
{
$settings = Helper::getFormMeta($formId, $this->metaKey, []);
return wp_parse_args($settings, $this->defaultViewSettings);
}
protected function parseSubmissionContent($submission, $formData, $userContent)
{
$userContent = ShortCodeParser::parse($userContent, $submission->id, $formData);
$template = '<div class="ff_frontend_entry_view_wrapper">' . $userContent . '</div>';
return apply_filters('fluentform/landing_content_wrapper', $template, $submission);
}
protected function addNoIndexMetaTags($settings)
{
if (ArrayHelper::get($settings, 'no_index') !== 'yes') {
return;
}
add_action('wp_head', function () {
echo '<meta name="robots" content="noindex,nofollow" />' . "\n";
});
}
public function injectInFormSettings($settings, $formId)
{
$frontEndSettings = $this->getViewSettings($formId);
if ($frontEndSettings) {
$settings['front_end_entry_view'] = $frontEndSettings;
}
return $settings;
}
/**
* Add entry_uid_link shortcode only when front-end view is enabled
*/
public function addEntryUidLinkShortcode($submissionShortcodes, $form)
{
if ( ! $form) {
return $submissionShortcodes;
}
$frontEndSettings = $this->getViewSettings($form->id);
$isEnabled = ArrayHelper::get($frontEndSettings, 'status') === 'yes';
if ($isEnabled) {
$submissionShortcodes['shortcodes']['{submission.entry_uid_link}'] = __('Entry Frontend View Link',
'fluentformpro');
}
return $submissionShortcodes;
}
public function saveFormSettings($formId, $settings)
{
if (isset($settings['front_end_entry_view']) && $settings['front_end_entry_view'] != false) {
$frontEndSettings = $settings['front_end_entry_view'];
if (Helper::isJson($frontEndSettings)) {
$frontEndSettings = json_decode($frontEndSettings, true);
}
$frontEndSettings['status'] = in_array($frontEndSettings['status'],
['yes', 'no']) ? $frontEndSettings['status'] : 'no';
$frontEndSettings['no_index'] = in_array($frontEndSettings['no_index'],
['yes', 'no']) ? $frontEndSettings['no_index'] : 'no';
$frontEndSettings['for_logged_in_user'] = in_array($frontEndSettings['for_logged_in_user'],
['yes', 'no']) ? $frontEndSettings['for_logged_in_user'] : 'no';
$frontEndSettings['content'] = fluentform_sanitize_html($frontEndSettings['content']);
Helper::setFormMeta($formId, $this->metaKey, $frontEndSettings);
}
}
}