Title: missing class within the plugin?
Last modified: June 17, 2025

---

# missing class within the plugin?

 *  Resolved [Pieter Sand](https://wordpress.org/support/users/beachholiday/)
 * (@beachholiday)
 * [11 months, 3 weeks ago](https://wordpress.org/support/topic/missing-class-within-the-plugin/)
 * Dear Support,
   Our site is experiencing an issue with the fluent forms plugin 
   and the issue came up last evening without us making any changes to the site.
 * Specifically, WordPress detected a fatal error in the admin area caused by a 
   missing class within the plugin.
 * The website is loading fine on the front end and the issue seems to be limited
   to certain backend functionality (like editing forms or handling form validation).
 * Below I include two things:
    1. what we see when we go to [https://site.com/wp-admin](https://site.com/wp-admin)
    2. the systems error email we received.
 * Many thanks for looking into this.
 * Kind regards,
   Piet
 * **WP-Admin**
 * yles’, ‘Use fluentform/numeric_styles instead of fluentform_numeric_styles.’ );
   return apply_filters(‘fluentform/numeric_styles’, $data); } public static function
   getNumericValue($input, $formatterName) { $formatters = static::getNumericFormatters();
   if (empty($formatters[$formatterName][‘settings’])) { return $input; } $settings
   = $formatters[$formatterName][‘settings’]; $number = floatval(str_replace($settings[‘
   decimal’], ‘.’, preg_replace(‘/[^-?\d’ . preg_quote($settings[‘decimal’]) . ‘]/’,”,
   $input))); return number_format($number, $settings[‘precision’], ‘.’, ”); } public
   static function getNumericFormatted($input, $formatterName) { if (!is_numeric(
   $input)) { return $input; } $formatters = static::getNumericFormatters(); if (
   empty($formatters[$formatterName][‘settings’])) { return $input; } $settings 
   = $formatters[$formatterName][‘settings’]; return number_format($input, $settings[‘
   precision’], $settings[‘decimal’], $settings[‘separator’]); } public static function
   getDuplicateFieldNames($fields) { $fields = json_decode($fields, true); $items
   = $fields[‘fields’]; $inputNames = static::getFieldNamesStatuses($items); $uniqueNames
   = array_unique($inputNames); if (count($inputNames) == count($uniqueNames)) {
   return []; } return array_diff_assoc($inputNames, $uniqueNames); } protected 
   static function getFieldNamesStatuses($fields) { $names = []; foreach ($fields
   as $field) { if (‘container’ == ArrayHelper::get($field, ‘element’)) { $columns
   = ArrayHelper::get($field, ‘columns’, []); foreach ($columns as $column) { $columnInputs
   = static::getFieldNamesStatuses(ArrayHelper::get($column, ‘fields’, [])); $names
   = array_merge($names, $columnInputs); } } else { if ($name = ArrayHelper::get(
   $field, ‘attributes.name’)) { $names[] = $name; } } } return $names; } public
   static function isConversionForm($formId) { static $cache = []; if (isset($cache[
   $formId])) { return $cache[$formId]; } $cache[$formId] = ‘yes’ == static::getFormMeta(
   $formId, ‘is_conversion_form’); return $cache[$formId]; } public static function
   getPreviewUrl($formId, $type = ”) { if (‘conversational’ == $type) { return static::
   getConversionUrl($formId); } elseif (‘classic’ == $type) { return site_url(‘?
   fluent_forms_pages=1&design_mode=1&preview_id=’ . $formId) . ‘#ff_preview’; }
   else { if (static::isConversionForm($formId)) { return static::getConversionUrl(
   $formId); } } return site_url(‘?fluent_forms_pages=1&design_mode=1&preview_id
   =’ . $formId) . ‘#ff_preview’; } public static function getFormAdminPermalink(
   $route, $form) { $baseUrl = admin_url(‘admin.php?page=fluent_forms’); return 
   $baseUrl . ‘&route=’ . $route . ‘&form_id=’ . $form->id; } public static function
   getFormSettingsUrl($form) { $baseUrl = admin_url(‘admin.php?page=fluent_forms’);
   return $baseUrl . ‘&form_id=’ . $form->id . ‘&route=settings&sub_route=form_settings#
   basic_settings’; } private static function getConversionUrl($formId) { $meta 
   = static::getFormMeta($formId, ‘ffc_form_settings_meta’, []); $key = ArrayHelper::
   get($meta, ‘share_key’, ”); $slug = apply_filters_deprecated( ‘fluentform_conversational_url_slug’,[‘
   fluent-form’ ], FLUENTFORM_FRAMEWORK_UPGRADE, ‘fluentform/conversational_url_slug’,‘
   Use fluentform/conversational_url_slug instead of fluentform_conversational_url_slug.’);
   $paramKey = apply_filters(‘fluentform/conversational_url_slug’, $slug); if (‘
   form’ == $paramKey) { $paramKey = ‘fluent-form’; } if ($key) { return static::
   getFrontendFacingUrl(‘?’ . $paramKey . ‘=’ . $formId . ‘&form=’ . $key); } return
   static::getFrontendFacingUrl(‘?’ . $paramKey . ‘=’ . $formId); } public static
   function fileUploadLocations() { $locations = [ [ ‘value’ => ‘default’, ‘label’
   => **(‘Fluent Forms Default’, ‘fluentform’), ], [ ‘value’ => ‘wp_media’, ‘label’
   => **(‘Media Library’, ‘fluentform’), ], ]; $locations = apply_filters_deprecated(‘
   fluentform_file_upload_options’, [ $locations ], FLUENTFORM_FRAMEWORK_UPGRADE,‘
   fluentform/file_upload_options’, ‘Use fluentform/file_upload_options instead 
   of fluentform_file_upload_options’ ); return apply_filters(‘fluentform/file_upload_options’,
   $locations); } public static function unreadCount($formId) { return Submission::
   where(‘status’, ‘unread’) ->where(‘form_id’, $formId) ->count(); } public static
   function getForms() { $ff_list = Form::select([‘id’, ‘title’])->orderBy(‘id’,‘
   DESC’)->get(); $forms = []; if ($ff_list) { $forms[0] = esc_html__(‘Select a 
   Fluent Forms’, ‘fluentform’); foreach ($ff_list as $form) { $forms[$form->id]
   = esc_html($form->title) . ‘ (‘ . $form->id . ‘)’; } } else { $forms[0] = esc_html__(‘
   Create a Form First’, ‘fluentform’); } return $forms; } public static function
   replaceBrTag($content, $with = ”) { if (is_array($content)) { foreach ($content
   as $key => $value) { $content[$key] = static::replaceBrTag($value, $with); } }
   elseif (static::hasBrTag($content)) { $content = str_replace(‘
   ‘, $with, $content);}
   return $content; } public static function hasBrTag($content) { return is_string(
   $content) && false !== strpos($content, ‘‘); } public static function sanitizeForCSV(
   $content) { $formulas = [‘=’, ‘-‘, ‘+’, ‘@’, “\t”, “\r”]; $formulas = apply_filters(‘
   fluentform/csv_sanitize_formulas’, $formulas); if (Str::startsWith($content, 
   $formulas)) { $content = “‘” . $content; } return $content; } public static function
   sanitizeOrderValue($orderType = ”) { $orderBys = [‘ASC’, ‘DESC’]; $orderType 
   = trim(strtoupper($orderType)); return in_array($orderType, $orderBys) ? $orderType:‘
   DESC’; } public static function getForm($id) { return Form::where(‘id’, $id)-
   >first(); } public static function shouldHidePassword($formId) { $isTruncate 
   = apply_filters_deprecated( ‘fluentform_truncate_password_values’, [ true, $formId],
   FLUENTFORM_FRAMEWORK_UPGRADE, ‘fluentform/truncate_password_values’, ‘Use fluentform/
   truncate_password_values instead of fluentform_truncate_password_values.’ ); 
   return apply_filters(‘fluentform/truncate_password_values’, $isTruncate, $formId)&&((
   defined(‘FLUENTFORM_RENDERING_ENTRIES’) && FLUENTFORM_RENDERING_ENTRIES) || (
   defined(‘FLUENTFORM_RENDERING_ENTRY’) && FLUENTFORM_RENDERING_ENTRY) || (defined(‘
   FLUENTFORM_EXPORTING_ENTRIES’) && FLUENTFORM_EXPORTING_ENTRIES) ); } // make 
   tabular-grid value markdown format public static function getTabularGridFormatValue(
   $girdData, $field, $rowJoiner = ‘‘, $colJoiner = ‘, ‘, $type = ” ) { if (!$girdData
   || !$field) { return ”; } $girdRows = ArrayHelper::get($field, ‘raw.settings.
   grid_rows’, ”); $girdCols = ArrayHelper::get($field, ‘raw.settings.grid_columns’,”);
   $value = ”; $lastRow = key(array_slice($girdData, -1, 1, true)); foreach ($girdData
   as $row => $column) { $_row = $row; if ($girdRows && isset($girdRows[$row])) {
   $row = $girdRows[$row]; } if (‘markdown’ === $type) { $value .= ‘- _‘ . $row .‘_:‘;}
   else { $value .= $row . ‘: ‘; } if (is_array($column)) { foreach ($column as 
   $index => $item) { $_colJoiner = $colJoiner; if ($girdCols && isset($girdCols[
   $item])) { $item = $girdCols[$item]; } if ($index == (count($column) – 1)) { 
   $_colJoiner = ”; } $value .= $item . $_colJoiner; } } else { if ($girdCols &&
   isset($girdCols[$column])) { $column = $girdCols[$column]; } $value .= $column;}
   if ($_row != $lastRow) { $value .= $rowJoiner; } } return $value; } public static
   function getInputNameFromShortCode($value) { preg_match(‘/{+(._?)}/’, $value,
   $matches); if ($matches && false !== strpos($matches[1], ‘inputs.’)) { return
   substr($matches[1], strlen(‘inputs.’)); } return ”; } public static function 
   getRestInfo() { $config = wpFluentForm(‘config’); $namespace = $config->get(‘
   app.rest\_namespace’); $version = $config->get(‘app.rest\_version’); $restUrl
   = rest\_url($namespace . ‘/’ . $version); $restUrl = rtrim($restUrl, ‘/\’); return[‘
   base\_url’ => esc\_url\_raw(rest\_url()), ‘url’ => $restUrl, ‘nonce’ => wp\_create\
   _nonce(‘wp\_rest’), ‘namespace’ => $namespace, ‘version’ => $version, ]; } public
   static function getLogInitiator($action, $type = ‘log’) { if (‘log’ === $type){
   $title = ucwords(implode(‘ ‘, preg\_split(‘/(?=[A-Z])/’, $action))); } else {
   $title = ucwords( str\_replace( [‘fluentform/integration\_notify\_’, ‘fluentform\_’,‘
   notification\_feed’, ”], [”, ”, ”, ‘ ‘], $action ) ); } return $title; } public
   static function getIpinfo() { return ArrayHelper::get(get\_option(‘fluentform\
   _global\_form\_settings’), ‘misc.geo\_provider\_token’); } public static function
   isAutoloadCaptchaEnabled() { return ArrayHelper::get(get\_option(‘\_fluentform\
   _global\_form\_settings’), ‘misc.autoload\_captcha’); } public static function
   maybeDecryptUrl($url) { $uploadDir = str\_replace(‘/’, ‘\/’, FLUENTFORM\_UPLOAD\
   _DIR . ‘/temp’); $pattern = “/(?<={$uploadDir}\/).$/”; preg\_match($pattern, 
   $url, $match); if (!empty($match)) { $url = str\_replace($match[0], Protector::
   decrypt($match[0]), $url); } return $url; } public static function arrayFilterRecursive(
   $arrayItems) { foreach ($arrayItems as $key => $item) { is\_array($item) && $
   arrayItems[$key] = self::arrayFilterRecursive($item); if (empty($arrayItems[$
   key])) { unset($arrayItems[$key]); } } return $arrayItems; } public static function
   isBlockEditor() { return defined(‘REST\_REQUEST’) && REST\_REQUEST && !empty(
   $\_REQUEST[‘context’]) && $\_REQUEST[‘context’] === ‘edit’; } public static function
   resolveValidationRulesGlobalOption(&$field) { if (isset($field[‘fields’]) && 
   is\_array($field[‘fields’])) { foreach ($field[‘fields’] as &$subField) { static::
   resolveValidationRulesGlobalOption($subField); } } else { if (ArrayHelper::get(
   $field, ‘settings.validation\_rules’)) { foreach ($field[‘settings’][‘validation\
   _rules’] as $key => &$rule) { if (!isset($rule[‘global’])) { $rule[‘global’] 
   = false; } $rule[‘global\_message’] = static::getGlobalDefaultMessage($key); }}}}/***
   Validate form input value against database values * * [@param](https://wordpress.org/support/users/param/)
   $field array Form Field * [@param](https://wordpress.org/support/users/param/)
   $formData array From Data * [@param](https://wordpress.org/support/users/param/)
   $form object From * [@param](https://wordpress.org/support/users/param/) $fieldName
   string optional * [@param](https://wordpress.org/support/users/param/) $inputValue
   mixed optional * * [@return](https://wordpress.org/support/users/return/) string*
   Return Error message on fail. Otherwise, return empty string / public static 
   function validateInput($field, $formData, $form, $fieldName = ”, $inputValue 
   = []) { $error = ”; if (!$fieldName) { $fieldName = ArrayHelper::get($field, ‘
   name’); } if (!$fieldName) { return $error; } if (!$inputValue) { $inputValue
   = ArrayHelper::get($formData, $fieldName); } if ($inputValue) { $rawField = ArrayHelper::
   get($field, ‘raw’); if (!$rawField) { $rawField = $field; } $fieldType = ArrayHelper::
   get($rawField, ‘element’); $rawField = apply\_filters(‘fluentform/rendering\_field\
   _data’ . $fieldType, $rawField, $form); $options = []; if (“net\_promoter\_score”
   === $fieldType) { $options = array\_flip(ArrayHelper::get($rawField, ‘options’,[]));}
   elseif (‘ratings’ == $fieldType) { $options = array\_keys(ArrayHelper::get($rawField,‘
   options’, [])); } elseif (‘gdpr\_agreement’ == $fieldType || ‘terms\_and\_condition’
   == $fieldType) { $options = [‘on’]; } elseif (in\_array($fieldType, [‘input\_radio’,‘
   select’, ‘input\_checkbox’])) { if (ArrayHelper::isTrue($rawField, ‘attributes.
   multiple’)) { $fieldType = ‘multi\_select’; } $options = array\_column( ArrayHelper::
   get($rawField, ‘settings.advanced\_options’, []), ‘value’ ); } elseif (“dynamic\
   _field” == $fieldType) { $dynamicFetchValue = ‘yes’ == ArrayHelper::get($rawField,‘
   settings.dynamic\_fetch’); if ($dynamicFetchValue) { $rawField = apply\_filters(‘
   fluentform/dynamic\_field\_re\_fetch\_result\_and\_resolve\_value’, $rawField);}
   $dfElementType = ArrayHelper::get($rawField, ‘attributes.type’); if (in\_array(
   $dfElementType, [‘radio’, ‘select’, ‘checkbox’])) { $fieldType = ‘dynamic\_field\
   _options’; $options = array\_column( ArrayHelper::get($rawField, ‘settings.advanced\
   _options’, []), ‘value’ ); } } if ($options) { $options = array\_map(‘sanitize\
   _text\_field’, $options); } $isValid = true; switch ($fieldType) { case ‘input\
   _radio’: case ‘select’: case ‘net\_promoter\_score’: case ‘ratings’: case ‘gdpr\
   _agreement’: case ‘terms\_and\_condition’: case ‘input\_checkbox’: case ‘multi\
   _select’: case ‘dynamic\_field\_options’: $skipValidationInputsWithOptions = 
   apply\_filters(‘fluentform/skip\_validation\_inputs\_with\_options’, false, $
   fieldType, $form, $formData); if ($skipValidationInputsWithOptions) { break; }
   if (is\_array($inputValue)) { $isValid = array\_diff($inputValue, $options); 
   $isValid = empty($isValid); } else { $isValid = in\_array($inputValue, $options);}
   break; case ‘input\_number’: if (is\_array($inputValue)) { $hasNonNumricValue
   = in\_array(false, array\_map(‘is\_numeric’, $inputValue)); if ($hasNonNumricValue){
   $isValid = false; } } else { $isValid = is\_numeric($inputValue); } break; case‘
   select\_country’: $fieldData = ArrayHelper::get($field, ‘raw’); $data = (new 
   SelectCountry())->loadCountries($fieldData); $validCountries = ArrayHelper::get(
   $fieldData, ‘settings.country\_list.priority\_based’, []); $validCountries = 
   array\_merge($validCountries, array\_keys(ArrayHelper::get($data, ‘options’)));
   $isValid = in\_array($inputValue, $validCountries); break; case ‘repeater\_field’:
   case ‘repeater\_container’: foreach (ArrayHelper::get($rawField, ‘fields’, [])
   as $index => $repeaterField) { $repeaterFieldValue = array\_filter(array\_column(
   $inputValue, $index)); if ($repeaterFieldValue && $error = static::validateInput(
   $repeaterField, $formData, $form, $fieldName, $repeaterFieldValue)) { $isValid
   = false; break; } } break; case ‘tabular\_grid’: $rows = array\_keys(ArrayHelper::
   get($rawField, ‘settings.grid\_rows’, [])); $rows = array\_map(‘trim’, $rows);
   $submittedRows = array\_keys(ArrayHelper::get($formData, $fieldName, [])); $submittedRows
   = array\_map(‘trim’, $submittedRows); $rowDiff = array\_diff($submittedRows, 
   $rows); $isValid = empty($rowDiff); if ($isValid) { $columns = array\_keys(ArrayHelper::
   get($rawField, ‘settings.grid\_columns’, [])); $columns = array\_map(‘trim’, 
   $columns); $submittedCols = ArrayHelper::flatten(ArrayHelper::get($formData, 
   $fieldName, [])); $submittedCols = array\_map(‘trim’, $submittedCols); $colDiff
   = array\_diff($submittedCols, $columns); $isValid = empty($colDiff); } break;
   default: break; } if (!$isValid) { $error = \_(‘The given data was invalid’, ‘
   fluentform’); } } return $error; } public static function getWhiteListedFields(
   $formId) { $whiteListedFields = [ ‘\_\_fluent\_form\_embded\_post\_id’, ‘\_fluentform’.
   $formId . ‘\_fluentformnonce’, ‘\_wp\_http\_referer’, ‘g-recaptcha-response’,‘
   h-captcha-response’, ‘cf-turnstile-response’, ‘\_\_stripe\_payment\_method\_id’,‘\_\
   _ff\_all\_applied\_coupons’, ‘\_\_entry\_intermediate\_hash’, ‘\_\_square\_payment\
   _method\_id’, ‘\_\_square\_verify\_buyer\_id’, ‘ct\_bot\_detector\_event\_token’,‘
   ff\_ct\_form\_load\_time’ ]; return apply\_filters(‘fluentform/white\_listed\
   _fields’, $whiteListedFields, $formId); } /_* * Shortcode parse on validation
   message * [@param](https://wordpress.org/support/users/param/) string $message*
   [@param](https://wordpress.org/support/users/param/) object $form * [@param](https://wordpress.org/support/users/param/)
   string $fieldName * [@return](https://wordpress.org/support/users/return/) string_/
   public static function shortCodeParseOnValidationMessage($message, $form, $fieldName){//
   For validation message there is no entry & form data // Add ‘current\_field’ 
   name as data array to resolve {labels.current\_field} shortcode if it has return
   ShortCodeParser::parse( $message, (object)[‘response’ => “”, ‘form\_id’ => $form-
   >id], [‘current\_field’ => $fieldName], $form ); } public static function getAjaxUrl(){
   return apply\_filters(‘fluentform/ajax\_url’, admin\_url(‘admin-ajax.php’)); }
   public static function getDefaultDateTimeFormatForMoment() { $phpFormat = get\
   _option(‘date\_format’) . ‘ ‘ . get\_option(‘time\_format’); $replacements = [‘
   A’ => ‘A’, // for the sake of escaping below ‘a’ => ‘a’, // for the sake of escaping
   below ‘B’ => ”, // Swatch internet time (.beats), no equivalent ‘c’ => ‘YYYY-
   MM-DD[T]HH:mm:ssZ’, // ISO 8601 ‘D’ => ‘ddd’, ‘d’ => ‘DD’, ‘e’ => ‘zz’, // deprecated
   since version 1.6.0 of moment.js ‘F’ => ‘MMMM’, ‘G’ => ‘H’, ‘g’ => ‘h’, ‘H’ =
   > ‘HH’, ‘h’ => ‘hh’, ‘I’ => ”, // Daylight Saving Time? => moment().isDST(); ‘
   i’ => ‘mm’, ‘j’ => ‘D’, ‘L’ => ”, // Leap year? => moment().isLeapYear(); ‘l’
   => ‘dddd’, ‘M’ => ‘MMM’, ‘m’ => ‘MM’, ‘N’ => ‘E’, ‘n’ => ‘M’, ‘O’ => ‘ZZ’, ‘o’
   => ‘YYYY’, ‘P’ => ‘Z’, ‘r’ => ‘ddd, DD MMM YYYY HH:mm:ss ZZ’, // RFC 2822 ‘S’
   => ‘o’, ‘s’ => ‘ss’, ‘T’ => ‘z’, // deprecated since version 1.6.0 of moment.
   js ‘t’ => ”, // days in the month => moment().daysInMonth(); ‘U’ => ‘X’, ‘u’ 
   => ‘SSSSSS’, // microseconds ‘v’ => ‘SSS’, // milliseconds (from PHP 7.0.0) ‘
   W’ => ‘W’, // for the sake of escaping below ‘w’ => ‘e’, ‘Y’ => ‘YYYY’, ‘y’ =
   > ‘YY’, ‘Z’ => ”, // time zone offset in minutes => moment().zone(); ‘z’ => ‘
   DDD’, ]; // Converts escaped characters. foreach ($replacements as $from => $
   to) { $replacements[‘\’ . $from] = ‘[‘ . $from . ‘]’; } $format = strtr($phpFormat,
   $replacements); return apply\_filters(‘fluentform/moment\_date\_time\_format’,
   $format); } public static function isDefaultWPDateEnabled() { $globalSettings
   = get\_option(‘\_fluentform\_global\_form\_settings’); return ‘wp\_default’ =
   == ArrayHelper::get($globalSettings, ‘misc.default\_admin\_date\_time’); } public
   static function isPaymentCompatible() { if (!self::hasPro()) { return true; }
   else { return version\_compare(FLUENTFORMPRO\_VERSION, FLUENTFORM\_MINIMUM\_PRO\
   _VERSION, ‘>=’) ; } } /_* * Determine pro payment script is compatible or not*
   Script is compatible if pro version is greater than or equal to 6.0.4 * * [@return](https://wordpress.org/support/users/return/)
   bool */ public static function isProPaymentScriptCompatible() { if (self::hasPro()){
   return version_compare(FLUENTFORMPRO_VERSION, ‘6.0.4’, ‘>=’) ; } return false;}
   public static function hasPro() { return defined(‘FLUENTFORMPRO’); } public static
   function getLandingPageEnabledForms() { if (class_exists(\FluentFormPro\classes\
   SharePage\SharePage::class)) { if (method_exists(\FluentFormPro\classes\SharePage\
   SharePage::class, ‘getLandingPageFormIds’)) { $sharePage = new \FluentFormPro\
   classes\SharePage\SharePage(); return $sharePage->getLandingPageFormIds(); } }
   return []; } public static function sanitizeArrayKeysAndValues($values) { if (
   is_array($values)) { $sanitized = []; foreach ($values as $key => $value) { $
   trimmedKey = sanitize_text_field(trim($key)); $trimmedValue = sanitize_text_field(
   trim($value)); $sanitized[$trimmedKey] = $trimmedValue; } return $sanitized; }
   return sanitize_text_field(trim($values)); } public static function getFrontendFacingUrl(
   $args = ”) { return home_url($args); } }There has been a critical error on this
   website. Please check your site admin email inbox for instructions. If you continue
   to have problems, please try the support forums.
 * Learn more about troubleshooting WordPress.
 * **Systems Error eMail**
 * Hii!
 * WordPress has a built-in feature that detects when a plugin or theme causes a
   fatal error on your site, and notifies you with this automated email.
 * In this case, WordPress caught an error with one of your plugins, Fluent Forms.
 * First, visit your website ([https://www.site.com/](https://www.site.com/)) and
   check for any visible issues. Next, visit the page where the error was caught(
   [https://www.site.com/wp-admin/](https://www.site.com/wp-admin/)) and check for
   any visible issues.
 * Please contact your host for assistance with investigating this issue further.
 * If your site appears broken and you can’t access your dashboard normally, WordPress
   now has a special “recovery mode”. This lets you safely login to your dashboard
   and investigate further.
 * [https://www.site.com/wp-login.php?action=enter_recovery_mode&rm_token=oAZYkp9e3tgMmgwqMjZa38&rm_key=nPdi1JJxfcVau8Q4eCicJi](https://www.site.com/wp-login.php?action=enter_recovery_mode&rm_token=oAZYkp9e3tgMmgwqMjZa38&rm_key=nPdi1JJxfcVau8Q4eCicJi)
 * To keep your site safe, this link will expire in 1 day. Don’t worry about that,
   though: a new link will be emailed to you if the error occurs again after it 
   expires.
 * When seeking help with this issue, you may be asked for some of the following
   information:
   WordPress version 6.8.1Active theme: GeneratePress Child (version
   0.1) Current plugin: Fluent Forms (version 6.0.4) PHP version 8.1.32
 * Error Details
   An error of type E_ERROR was caused in line 771 of the file /home/
   site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/framework/src/
   WPFluent/Foundation/Container.php. Error message: Uncaught ReflectionException:
   Class “\FluentForm\App\Helpers\Helper” does not exist in /home/site/public_html/
   wp-content/plugins/fluentform/vendor/wpfluent/framework/src/WPFluent/Foundation/
   Container.php:771Stack trace:
 * 0 /home/site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/framework/
   src/WPFluent/Foundation/Container.php(771): ReflectionClass->__construct(‘\FluentForm\
   App…’)
   1 /home/site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/
   framework/src/WPFluent/Foundation/Container.php(663): FluentForm\Framework\Foundation\
   Container->build(‘\FluentForm\App…’, Array)2 /home/site/public_html/wp-content/
   plugins/fluentform/vendor/wpfluent/framework/src/WPFluent/Foundation/FoundationTrait.
   php(191): FluentForm\Framework\Foundation\Container->make(‘\FluentForm\App…’)
   3 /home/site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/framework/
   src/WPFluent/Foundation/FoundationTrait.php(160): FluentForm\Framework\Foundation\
   Application->makeInstance(‘\FluentForm\App…’)4 /home/site/public_html/wp-content/
   plugins/fluentform/vendor/wpfluent/framework/src/WPFluent/Foundation/FoundationTrait.
   php(106): FluentForm\Framework\Foundation\Application->parseHookHandler(Array)
   5 /home/site/public_html/wp-content/plugins/fluentform/app/Hooks/filters.php(
   317): FluentForm\Framework\Foundation\Application->addFilter(‘fluentform/vali…’,
   Array, 10, 5)6 /home/site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/
   framework/src/WPFluent/Foundation/Application.php(147): require_once(‘/home/site/…’)
   7 /home/site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/framework/
   src/WPFluent/Foundation/Application.php(76): FluentForm\Framework\Foundation\
   Application->requireCommonFiles(Object(FluentForm\Framework\Foundation\Application))
   8 /home/site/public_html/wp-content/plugins/fluentform/vendor/wpfluent/framework/
   src/WPFluent/Foundation/Application.php(30): FluentForm\Framework\Foundation\
   Application->bootstrapApplication()9 /home/site/public_html/wp-content/plugins/
   fluentform/boot/app.php(32): FluentForm\Framework\Foundation\Application->__construct(‘/
   home/site/…’)10 /home/site/public_html/wp-content/plugins/fluentform/fluentform.
   php(29): {closure}(‘/home/site/…’)11 /home/site/public_html/wp-content/plugins/
   fluentform/fluentform.php(30): {closure}(Object(Closure))12 /home/site/public_html/
   wp-settings.php(545): include_once(‘/home/site/…’)13 /home/site/public_html/wp-
   config.php(93): require_once(‘/home/site/…’)14 /home/site/public_html/wp-load.
   php(50): require_once(‘/home/site/…’)15 /home/site/public_html/wp-admin/admin.
   php(35): require_once(‘/home/site/…’)16 /home/site/public_html/wp-admin/index.
   php(10): require_once(‘/home/site/…’)17 thrown

Viewing 6 replies - 1 through 6 (of 6 total)

 *  Thread Starter [Pieter Sand](https://wordpress.org/support/users/beachholiday/)
 * (@beachholiday)
 * [11 months, 3 weeks ago](https://wordpress.org/support/topic/missing-class-within-the-plugin/#post-18515868)
 * Sorry, I forgot to mention the FluentForm plugin version: 
   Version 6.0.4
 * What I also noticed is that I can’t log into the site via the following urls:
   
   site.com/wp-adminsite.com/wp-login.php
 * However, I can login into the backend of the site using the following url:
   site.
   com/wp-login.php?redirect_to=https%3A%2F%2Fwww.site.com%2Fwp-admin%2F&reauth=
   1
 * Many thanks for your help with this issue.
 * Kind regards,
 * Piet
    -  This reply was modified 11 months, 3 weeks ago by [Pieter Sand](https://wordpress.org/support/users/beachholiday/).
 *  Plugin Support [Amimul Ihsan](https://wordpress.org/support/users/amimulihsanmahdi/)
 * (@amimulihsanmahdi)
 * [11 months, 3 weeks ago](https://wordpress.org/support/topic/missing-class-within-the-plugin/#post-18516056)
 * Hello [@beachholiday](https://wordpress.org/support/users/beachholiday/),
 * It looks like a **core file** for Fluent Forms might be missing or corrupted.
   This often happens after an interrupted update or an incomplete installation.
 * To resolve this, please follow these steps:Troubleshooting Steps
    1. **Deactivate and Delete Fluent Forms (and Pro, if applicable):**
    2.  - Go to **Plugins** > **Installed Plugins** in your WordPress dashboard.
        - Find **Fluent Forms** (and **Fluent Forms Pro**, if you have it).
        - **Deactivate** both plugins first.
        - Then, **delete** both plugins.
        - _**Don’t worry:**_ Your form data and entries are stored in your website’s
          database, so deleting the plugins themselves will **not** erase any of your
          saved information.
    3. **Reinstall Fluent Forms (and Pro, if applicable):**
    4.  - Download the latest versions of **Fluent Forms** (from the WordPress plugin
          repository) and **Fluent Forms Pro** (from your WPManageNinja account dashboard).
        - Go to **Plugins** > **Add New**.
        - Click **Upload Plugin** at the top.
        - Choose the downloaded Fluent Forms `.zip` file and install it.
        - Repeat the process for the Fluent Forms Pro `.zip` file.
        - Once both are installed, **activate** them.
 * This process will ensure that all the plugin’s core files are reinstalled correctly,
   which should resolve the “Class does not exist” error.
 * Let me know if you encounter any issues during this process!
 * Thank you
 *  Thread Starter [Pieter Sand](https://wordpress.org/support/users/beachholiday/)
 * (@beachholiday)
 * [11 months, 3 weeks ago](https://wordpress.org/support/topic/missing-class-within-the-plugin/#post-18516353)
 * Dear [@amimulihsanmahdi](https://wordpress.org/support/users/amimulihsanmahdi/)
 * Many thanks for the quick response. I really appreciate it 🙂
 * We have followed your troubleshooting steps above and all seems to be working
   again.
 * Thank you so much for your excellent & fast help.
 * Piet
 *  Plugin Support [Amimul Ihsan](https://wordpress.org/support/users/amimulihsanmahdi/)
 * (@amimulihsanmahdi)
 * [11 months, 3 weeks ago](https://wordpress.org/support/topic/missing-class-within-the-plugin/#post-18517074)
 * Thank you for letting us know that the issue has been resolved. Feel free reach
   us anytime if you have any questions or concerns. We are here to assist you.
 *  Thread Starter [Pieter Sand](https://wordpress.org/support/users/beachholiday/)
 * (@beachholiday)
 * [11 months, 3 weeks ago](https://wordpress.org/support/topic/missing-class-within-the-plugin/#post-18517625)
 * Dear [@amimulihsanmahdi](https://wordpress.org/support/users/amimulihsanmahdi/)
 * Unfortunately, the issue is back today which is very disappointing.
 * We can’t log into our site via the following urls:
   – site.com/wp-admin– site.
   com/wp-login.php
 * However, we can login into the backend of the site using the following url:
   –
   site.com/wp-login.php?redirect_to=https%3A%2F%2Fwww.site.com%2Fwp-admin%2F&reauth
   =1– site.com/my-account/Once logged-in like this, the site works perfectly at
   the back-end.
 * At the front-end, it is also working perfectly.
 * Below, I paste again what we see when we try to log-in via /wp-admin/ or /wp-
   login.php
 * Thank you for your help with this.
 * Piet
 * **Screen Shot**
 * yles’, ‘Use fluentform/numeric_styles instead of fluentform_numeric_styles.’ );
   return apply_filters(‘fluentform/numeric_styles’, $data); } public static function
   getNumericValue($input, $formatterName) { $formatters = static::getNumericFormatters();
   if (empty($formatters[$formatterName][‘settings’])) { return $input; } $settings
   = $formatters[$formatterName][‘settings’]; $number = floatval(str_replace($settings[‘
   decimal’], ‘.’, preg_replace(‘/[^-?\d’ . preg_quote($settings[‘decimal’]) . ‘]/’,”,
   $input))); return number_format($number, $settings[‘precision’], ‘.’, ”); } public
   static function getNumericFormatted($input, $formatterName) { if (!is_numeric(
   $input)) { return $input; } $formatters = static::getNumericFormatters(); if (
   empty($formatters[$formatterName][‘settings’])) { return $input; } $settings 
   = $formatters[$formatterName][‘settings’]; return number_format($input, $settings[‘
   precision’], $settings[‘decimal’], $settings[‘separator’]); } public static function
   getDuplicateFieldNames($fields) { $fields = json_decode($fields, true); $items
   = $fields[‘fields’]; $inputNames = static::getFieldNamesStatuses($items); $uniqueNames
   = array_unique($inputNames); if (count($inputNames) == count($uniqueNames)) {
   return []; } return array_diff_assoc($inputNames, $uniqueNames); } protected 
   static function getFieldNamesStatuses($fields) { $names = []; foreach ($fields
   as $field) { if (‘container’ == ArrayHelper::get($field, ‘element’)) { $columns
   = ArrayHelper::get($field, ‘columns’, []); foreach ($columns as $column) { $columnInputs
   = static::getFieldNamesStatuses(ArrayHelper::get($column, ‘fields’, [])); $names
   = array_merge($names, $columnInputs); } } else { if ($name = ArrayHelper::get(
   $field, ‘attributes.name’)) { $names[] = $name; } } } return $names; } public
   static function isConversionForm($formId) { static $cache = []; if (isset($cache[
   $formId])) { return $cache[$formId]; } $cache[$formId] = ‘yes’ == static::getFormMeta(
   $formId, ‘is_conversion_form’); return $cache[$formId]; } public static function
   getPreviewUrl($formId, $type = ”) { if (‘conversational’ == $type) { return static::
   getConversionUrl($formId); } elseif (‘classic’ == $type) { return site_url(‘?
   fluent_forms_pages=1&design_mode=1&preview_id=’ . $formId) . ‘#ff_preview’; }
   else { if (static::isConversionForm($formId)) { return static::getConversionUrl(
   $formId); } } return site_url(‘?fluent_forms_pages=1&design_mode=1&preview_id
   =’ . $formId) . ‘#ff_preview’; } public static function getFormAdminPermalink(
   $route, $form) { $baseUrl = admin_url(‘admin.php?page=fluent_forms’); return 
   $baseUrl . ‘&route=’ . $route . ‘&form_id=’ . $form->id; } public static function
   getFormSettingsUrl($form) { $baseUrl = admin_url(‘admin.php?page=fluent_forms’);
   return $baseUrl . ‘&form_id=’ . $form->id . ‘&route=settings&sub_route=form_settings#
   basic_settings’; } private static function getConversionUrl($formId) { $meta 
   = static::getFormMeta($formId, ‘ffc_form_settings_meta’, []); $key = ArrayHelper::
   get($meta, ‘share_key’, ”); $slug = apply_filters_deprecated( ‘fluentform_conversational_url_slug’,[‘
   fluent-form’ ], FLUENTFORM_FRAMEWORK_UPGRADE, ‘fluentform/conversational_url_slug’,‘
   Use fluentform/conversational_url_slug instead of fluentform_conversational_url_slug.’);
   $paramKey = apply_filters(‘fluentform/conversational_url_slug’, $slug); if (‘
   form’ == $paramKey) { $paramKey = ‘fluent-form’; } if ($key) { return static::
   getFrontendFacingUrl(‘?’ . $paramKey . ‘=’ . $formId . ‘&form=’ . $key); } return
   static::getFrontendFacingUrl(‘?’ . $paramKey . ‘=’ . $formId); } public static
   function fileUploadLocations() { $locations = [ [ ‘value’ => ‘default’, ‘label’
   => **(‘Fluent Forms Default’, ‘fluentform’), ], [ ‘value’ => ‘wp_media’, ‘label’
   => **(‘Media Library’, ‘fluentform’), ], ]; $locations = apply_filters_deprecated(‘
   fluentform_file_upload_options’, [ $locations ], FLUENTFORM_FRAMEWORK_UPGRADE,‘
   fluentform/file_upload_options’, ‘Use fluentform/file_upload_options instead 
   of fluentform_file_upload_options’ ); return apply_filters(‘fluentform/file_upload_options’,
   $locations); } public static function unreadCount($formId) { return Submission::
   where(‘status’, ‘unread’) ->where(‘form_id’, $formId) ->count(); } public static
   function getForms() { $ff_list = Form::select([‘id’, ‘title’])->orderBy(‘id’,‘
   DESC’)->get(); $forms = []; if ($ff_list) { $forms[0] = esc_html__(‘Select a 
   Fluent Forms’, ‘fluentform’); foreach ($ff_list as $form) { $forms[$form->id]
   = esc_html($form->title) . ‘ (‘ . $form->id . ‘)’; } } else { $forms[0] = esc_html__(‘
   Create a Form First’, ‘fluentform’); } return $forms; } public static function
   replaceBrTag($content, $with = ”) { if (is_array($content)) { foreach ($content
   as $key => $value) { $content[$key] = static::replaceBrTag($value, $with); } }
   elseif (static::hasBrTag($content)) { $content = str_replace(‘
   ‘, $with, $content);}
   return $content; } public static function hasBrTag($content) { return is_string(
   $content) && false !== strpos($content, ‘‘); } public static function sanitizeForCSV(
   $content) { $formulas = [‘=’, ‘-‘, ‘+’, ‘@’, “\t”, “\r”]; $formulas = apply_filters(‘
   fluentform/csv_sanitize_formulas’, $formulas); if (Str::startsWith($content, 
   $formulas)) { $content = “‘” . $content; } return $content; } public static function
   sanitizeOrderValue($orderType = ”) { $orderBys = [‘ASC’, ‘DESC’]; $orderType 
   = trim(strtoupper($orderType)); return in_array($orderType, $orderBys) ? $orderType:‘
   DESC’; } public static function getForm($id) { return Form::where(‘id’, $id)-
   >first(); } public static function shouldHidePassword($formId) { $isTruncate 
   = apply_filters_deprecated( ‘fluentform_truncate_password_values’, [ true, $formId],
   FLUENTFORM_FRAMEWORK_UPGRADE, ‘fluentform/truncate_password_values’, ‘Use fluentform/
   truncate_password_values instead of fluentform_truncate_password_values.’ ); 
   return apply_filters(‘fluentform/truncate_password_values’, $isTruncate, $formId)&&((
   defined(‘FLUENTFORM_RENDERING_ENTRIES’) && FLUENTFORM_RENDERING_ENTRIES) || (
   defined(‘FLUENTFORM_RENDERING_ENTRY’) && FLUENTFORM_RENDERING_ENTRY) || (defined(‘
   FLUENTFORM_EXPORTING_ENTRIES’) && FLUENTFORM_EXPORTING_ENTRIES) ); } // make 
   tabular-grid value markdown format public static function getTabularGridFormatValue(
   $girdData, $field, $rowJoiner = ‘‘, $colJoiner = ‘, ‘, $type = ” ) { if (!$girdData
   || !$field) { return ”; } $girdRows = ArrayHelper::get($field, ‘raw.settings.
   grid_rows’, ”); $girdCols = ArrayHelper::get($field, ‘raw.settings.grid_columns’,”);
   $value = ”; $lastRow = key(array_slice($girdData, -1, 1, true)); foreach ($girdData
   as $row => $column) { $_row = $row; if ($girdRows && isset($girdRows[$row])) {
   $row = $girdRows[$row]; } if (‘markdown’ === $type) { $value .= ‘- _‘ . $row .‘_:‘;}
   else { $value .= $row . ‘: ‘; } if (is_array($column)) { foreach ($column as 
   $index => $item) { $_colJoiner = $colJoiner; if ($girdCols && isset($girdCols[
   $item])) { $item = $girdCols[$item]; } if ($index == (count($column) – 1)) { 
   $_colJoiner = ”; } $value .= $item . $_colJoiner; } } else { if ($girdCols &&
   isset($girdCols[$column])) { $column = $girdCols[$column]; } $value .= $column;}
   if ($_row != $lastRow) { $value .= $rowJoiner; } } return $value; } public static
   function getInputNameFromShortCode($value) { preg_match(‘/{+(._?)}/’, $value,
   $matches); if ($matches && false !== strpos($matches[1], ‘inputs.’)) { return
   substr($matches[1], strlen(‘inputs.’)); } return ”; } public static function 
   getRestInfo() { $config = wpFluentForm(‘config’); $namespace = $config->get(‘
   app.rest\_namespace’); $version = $config->get(‘app.rest\_version’); $restUrl
   = rest\_url($namespace . ‘/’ . $version); $restUrl = rtrim($restUrl, ‘/\’); return[‘
   base\_url’ => esc\_url\_raw(rest\_url()), ‘url’ => $restUrl, ‘nonce’ => wp\_create\
   _nonce(‘wp\_rest’), ‘namespace’ => $namespace, ‘version’ => $version, ]; } public
   static function getLogInitiator($action, $type = ‘log’) { if (‘log’ === $type){
   $title = ucwords(implode(‘ ‘, preg\_split(‘/(?=[A-Z])/’, $action))); } else {
   $title = ucwords( str\_replace( [‘fluentform/integration\_notify\_’, ‘fluentform\_’,‘
   notification\_feed’, ”], [”, ”, ”, ‘ ‘], $action ) ); } return $title; } public
   static function getIpinfo() { return ArrayHelper::get(get\_option(‘fluentform\
   _global\_form\_settings’), ‘misc.geo\_provider\_token’); } public static function
   isAutoloadCaptchaEnabled() { return ArrayHelper::get(get\_option(‘\_fluentform\
   _global\_form\_settings’), ‘misc.autoload\_captcha’); } public static function
   maybeDecryptUrl($url) { $uploadDir = str\_replace(‘/’, ‘\/’, FLUENTFORM\_UPLOAD\
   _DIR . ‘/temp’); $pattern = “/(?<={$uploadDir}\/).$/”; preg\_match($pattern, 
   $url, $match); if (!empty($match)) { $url = str\_replace($match[0], Protector::
   decrypt($match[0]), $url); } return $url; } public static function arrayFilterRecursive(
   $arrayItems) { foreach ($arrayItems as $key => $item) { is\_array($item) && $
   arrayItems[$key] = self::arrayFilterRecursive($item); if (empty($arrayItems[$
   key])) { unset($arrayItems[$key]); } } return $arrayItems; } public static function
   isBlockEditor() { return defined(‘REST\_REQUEST’) && REST\_REQUEST && !empty(
   $\_REQUEST[‘context’]) && $\_REQUEST[‘context’] === ‘edit’; } public static function
   resolveValidationRulesGlobalOption(&$field) { if (isset($field[‘fields’]) && 
   is\_array($field[‘fields’])) { foreach ($field[‘fields’] as &$subField) { static::
   resolveValidationRulesGlobalOption($subField); } } else { if (ArrayHelper::get(
   $field, ‘settings.validation\_rules’)) { foreach ($field[‘settings’][‘validation\
   _rules’] as $key => &$rule) { if (!isset($rule[‘global’])) { $rule[‘global’] 
   = false; } $rule[‘global\_message’] = static::getGlobalDefaultMessage($key); }}}}/***
   Validate form input value against database values * * [@param](https://wordpress.org/support/users/param/)
   $field array Form Field * [@param](https://wordpress.org/support/users/param/)
   $formData array From Data * [@param](https://wordpress.org/support/users/param/)
   $form object From * [@param](https://wordpress.org/support/users/param/) $fieldName
   string optional * [@param](https://wordpress.org/support/users/param/) $inputValue
   mixed optional * * [@return](https://wordpress.org/support/users/return/) string*
   Return Error message on fail. Otherwise, return empty string / public static 
   function validateInput($field, $formData, $form, $fieldName = ”, $inputValue 
   = []) { $error = ”; if (!$fieldName) { $fieldName = ArrayHelper::get($field, ‘
   name’); } if (!$fieldName) { return $error; } if (!$inputValue) { $inputValue
   = ArrayHelper::get($formData, $fieldName); } if ($inputValue) { $rawField = ArrayHelper::
   get($field, ‘raw’); if (!$rawField) { $rawField = $field; } $fieldType = ArrayHelper::
   get($rawField, ‘element’); $rawField = apply\_filters(‘fluentform/rendering\_field\
   _data’ . $fieldType, $rawField, $form); $options = []; if (“net\_promoter\_score”
   === $fieldType) { $options = array\_flip(ArrayHelper::get($rawField, ‘options’,[]));}
   elseif (‘ratings’ == $fieldType) { $options = array\_keys(ArrayHelper::get($rawField,‘
   options’, [])); } elseif (‘gdpr\_agreement’ == $fieldType || ‘terms\_and\_condition’
   == $fieldType) { $options = [‘on’]; } elseif (in\_array($fieldType, [‘input\_radio’,‘
   select’, ‘input\_checkbox’])) { if (ArrayHelper::isTrue($rawField, ‘attributes.
   multiple’)) { $fieldType = ‘multi\_select’; } $options = array\_column( ArrayHelper::
   get($rawField, ‘settings.advanced\_options’, []), ‘value’ ); } elseif (“dynamic\
   _field” == $fieldType) { $dynamicFetchValue = ‘yes’ == ArrayHelper::get($rawField,‘
   settings.dynamic\_fetch’); if ($dynamicFetchValue) { $rawField = apply\_filters(‘
   fluentform/dynamic\_field\_re\_fetch\_result\_and\_resolve\_value’, $rawField);}
   $dfElementType = ArrayHelper::get($rawField, ‘attributes.type’); if (in\_array(
   $dfElementType, [‘radio’, ‘select’, ‘checkbox’])) { $fieldType = ‘dynamic\_field\
   _options’; $options = array\_column( ArrayHelper::get($rawField, ‘settings.advanced\
   _options’, []), ‘value’ ); } } if ($options) { $options = array\_map(‘sanitize\
   _text\_field’, $options); } $isValid = true; switch ($fieldType) { case ‘input\
   _radio’: case ‘select’: case ‘net\_promoter\_score’: case ‘ratings’: case ‘gdpr\
   _agreement’: case ‘terms\_and\_condition’: case ‘input\_checkbox’: case ‘multi\
   _select’: case ‘dynamic\_field\_options’: $skipValidationInputsWithOptions = 
   apply\_filters(‘fluentform/skip\_validation\_inputs\_with\_options’, false, $
   fieldType, $form, $formData); if ($skipValidationInputsWithOptions) { break; }
   if (is\_array($inputValue)) { $isValid = array\_diff($inputValue, $options); 
   $isValid = empty($isValid); } else { $isValid = in\_array($inputValue, $options);}
   break; case ‘input\_number’: if (is\_array($inputValue)) { $hasNonNumricValue
   = in\_array(false, array\_map(‘is\_numeric’, $inputValue)); if ($hasNonNumricValue){
   $isValid = false; } } else { $isValid = is\_numeric($inputValue); } break; case‘
   select\_country’: $fieldData = ArrayHelper::get($field, ‘raw’); $data = (new 
   SelectCountry())->loadCountries($fieldData); $validCountries = ArrayHelper::get(
   $fieldData, ‘settings.country\_list.priority\_based’, []); $validCountries = 
   array\_merge($validCountries, array\_keys(ArrayHelper::get($data, ‘options’)));
   $isValid = in\_array($inputValue, $validCountries); break; case ‘repeater\_field’:
   case ‘repeater\_container’: foreach (ArrayHelper::get($rawField, ‘fields’, [])
   as $index => $repeaterField) { $repeaterFieldValue = array\_filter(array\_column(
   $inputValue, $index)); if ($repeaterFieldValue && $error = static::validateInput(
   $repeaterField, $formData, $form, $fieldName, $repeaterFieldValue)) { $isValid
   = false; break; } } break; case ‘tabular\_grid’: $rows = array\_keys(ArrayHelper::
   get($rawField, ‘settings.grid\_rows’, [])); $rows = array\_map(‘trim’, $rows);
   $submittedRows = array\_keys(ArrayHelper::get($formData, $fieldName, [])); $submittedRows
   = array\_map(‘trim’, $submittedRows); $rowDiff = array\_diff($submittedRows, 
   $rows); $isValid = empty($rowDiff); if ($isValid) { $columns = array\_keys(ArrayHelper::
   get($rawField, ‘settings.grid\_columns’, [])); $columns = array\_map(‘trim’, 
   $columns); $submittedCols = ArrayHelper::flatten(ArrayHelper::get($formData, 
   $fieldName, [])); $submittedCols = array\_map(‘trim’, $submittedCols); $colDiff
   = array\_diff($submittedCols, $columns); $isValid = empty($colDiff); } break;
   default: break; } if (!$isValid) { $error = \_(‘The given data was invalid’, ‘
   fluentform’); } } return $error; } public static function getWhiteListedFields(
   $formId) { $whiteListedFields = [ ‘\_\_fluent\_form\_embded\_post\_id’, ‘\_fluentform’.
   $formId . ‘\_fluentformnonce’, ‘\_wp\_http\_referer’, ‘g-recaptcha-response’,‘
   h-captcha-response’, ‘cf-turnstile-response’, ‘\_\_stripe\_payment\_method\_id’,‘\_\
   _ff\_all\_applied\_coupons’, ‘\_\_entry\_intermediate\_hash’, ‘\_\_square\_payment\
   _method\_id’, ‘\_\_square\_verify\_buyer\_id’, ‘ct\_bot\_detector\_event\_token’,‘
   ff\_ct\_form\_load\_time’ ]; return apply\_filters(‘fluentform/white\_listed\
   _fields’, $whiteListedFields, $formId); } /_* * Shortcode parse on validation
   message * [@param](https://wordpress.org/support/users/param/) string $message*
   [@param](https://wordpress.org/support/users/param/) object $form * [@param](https://wordpress.org/support/users/param/)
   string $fieldName * [@return](https://wordpress.org/support/users/return/) string_/
   public static function shortCodeParseOnValidationMessage($message, $form, $fieldName){//
   For validation message there is no entry & form data // Add ‘current\_field’ 
   name as data array to resolve {labels.current\_field} shortcode if it has return
   ShortCodeParser::parse( $message, (object)[‘response’ => “”, ‘form\_id’ => $form-
   >id], [‘current\_field’ => $fieldName], $form ); } public static function getAjaxUrl(){
   return apply\_filters(‘fluentform/ajax\_url’, admin\_url(‘admin-ajax.php’)); }
   public static function getDefaultDateTimeFormatForMoment() { $phpFormat = get\
   _option(‘date\_format’) . ‘ ‘ . get\_option(‘time\_format’); $replacements = [‘
   A’ => ‘A’, // for the sake of escaping below ‘a’ => ‘a’, // for the sake of escaping
   below ‘B’ => ”, // Swatch internet time (.beats), no equivalent ‘c’ => ‘YYYY-
   MM-DD[T]HH:mm:ssZ’, // ISO 8601 ‘D’ => ‘ddd’, ‘d’ => ‘DD’, ‘e’ => ‘zz’, // deprecated
   since version 1.6.0 of moment.js ‘F’ => ‘MMMM’, ‘G’ => ‘H’, ‘g’ => ‘h’, ‘H’ =
   > ‘HH’, ‘h’ => ‘hh’, ‘I’ => ”, // Daylight Saving Time? => moment().isDST(); ‘
   i’ => ‘mm’, ‘j’ => ‘D’, ‘L’ => ”, // Leap year? => moment().isLeapYear(); ‘l’
   => ‘dddd’, ‘M’ => ‘MMM’, ‘m’ => ‘MM’, ‘N’ => ‘E’, ‘n’ => ‘M’, ‘O’ => ‘ZZ’, ‘o’
   => ‘YYYY’, ‘P’ => ‘Z’, ‘r’ => ‘ddd, DD MMM YYYY HH:mm:ss ZZ’, // RFC 2822 ‘S’
   => ‘o’, ‘s’ => ‘ss’, ‘T’ => ‘z’, // deprecated since version 1.6.0 of moment.
   js ‘t’ => ”, // days in the month => moment().daysInMonth(); ‘U’ => ‘X’, ‘u’ 
   => ‘SSSSSS’, // microseconds ‘v’ => ‘SSS’, // milliseconds (from PHP 7.0.0) ‘
   W’ => ‘W’, // for the sake of escaping below ‘w’ => ‘e’, ‘Y’ => ‘YYYY’, ‘y’ =
   > ‘YY’, ‘Z’ => ”, // time zone offset in minutes => moment().zone(); ‘z’ => ‘
   DDD’, ]; // Converts escaped characters. foreach ($replacements as $from => $
   to) { $replacements[‘\’ . $from] = ‘[‘ . $from . ‘]’; } $format = strtr($phpFormat,
   $replacements); return apply\_filters(‘fluentform/moment\_date\_time\_format’,
   $format); } public static function isDefaultWPDateEnabled() { $globalSettings
   = get\_option(‘\_fluentform\_global\_form\_settings’); return ‘wp\_default’ =
   == ArrayHelper::get($globalSettings, ‘misc.default\_admin\_date\_time’); } public
   static function isPaymentCompatible() { if (!self::hasPro()) { return true; }
   else { return version\_compare(FLUENTFORMPRO\_VERSION, FLUENTFORM\_MINIMUM\_PRO\
   _VERSION, ‘>=’) ; } } /_* * Determine pro payment script is compatible or not*
   Script is compatible if pro version is greater than or equal to 6.0.4 * * [@return](https://wordpress.org/support/users/return/)
   bool */ public static function isProPaymentScriptCompatible() { if (self::hasPro()){
   return version_compare(FLUENTFORMPRO_VERSION, ‘6.0.4’, ‘>=’) ; } return false;}
   public static function hasPro() { return defined(‘FLUENTFORMPRO’); } public static
   function getLandingPageEnabledForms() { if (class_exists(\FluentFormPro\classes\
   SharePage\SharePage::class)) { if (method_exists(\FluentFormPro\classes\SharePage\
   SharePage::class, ‘getLandingPageFormIds’)) { $sharePage = new \FluentFormPro\
   classes\SharePage\SharePage(); return $sharePage->getLandingPageFormIds(); } }
   return []; } public static function sanitizeArrayKeysAndValues($values) { if (
   is_array($values)) { $sanitized = []; foreach ($values as $key => $value) { $
   trimmedKey = sanitize_text_field(trim($key)); $trimmedValue = sanitize_text_field(
   trim($value)); $sanitized[$trimmedKey] = $trimmedValue; } return $sanitized; }
   return sanitize_text_field(trim($values)); } public static function getFrontendFacingUrl(
   $args = ”) { return home_url($args); } }
 * There has been a critical error on this website. Please check your site admin
   email inbox for instructions. If you continue to have problems, please try the
   support forums.
 * Learn more about troubleshooting WordPress.
 *  Plugin Support [Amimul Ihsan](https://wordpress.org/support/users/amimulihsanmahdi/)
 * (@amimulihsanmahdi)
 * [11 months, 3 weeks ago](https://wordpress.org/support/topic/missing-class-within-the-plugin/#post-18518845)
 * Hello again,
 * Could you please try the debugging steps I shared earlier to see if they help
   resolve the issue? Additionally, we need to investigate why this is happening
   in the first place. Do you happen to have any security plugins or firewalls active
   on your website? In some cases, these can interfere with or even remove core 
   plugin files.
 * It would also be helpful if you could reach out to [our team here](https://wpmanageninja.com/support-tickets/#/),
   so we can take a closer look and assist you further.
 * Thank you

Viewing 6 replies - 1 through 6 (of 6 total)

The topic ‘missing class within the plugin?’ is closed to new replies.

 * ![](https://ps.w.org/fluentform/assets/icon-256x256.png?rev=3354580)
 * [Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder](https://wordpress.org/plugins/fluentform/)
 * [Frequently Asked Questions](https://wordpress.org/plugins/fluentform/#faq)
 * [Support Threads](https://wordpress.org/support/plugin/fluentform/)
 * [Active Topics](https://wordpress.org/support/plugin/fluentform/active/)
 * [Unresolved Topics](https://wordpress.org/support/plugin/fluentform/unresolved/)
 * [Reviews](https://wordpress.org/support/plugin/fluentform/reviews/)

 * 6 replies
 * 2 participants
 * Last reply from: [Amimul Ihsan](https://wordpress.org/support/users/amimulihsanmahdi/)
 * Last activity: [11 months, 3 weeks ago](https://wordpress.org/support/topic/missing-class-within-the-plugin/#post-18518845)
 * Status: resolved