Skip to content
View as Markdown

Core Helper Class ​

FluentCrm\App\Services\Helper

The Helper class is the main utility class in FluentCRM. It provides 50+ static methods for working with contacts, email settings, SmartCodes, templates, compliance, and more.

php
use FluentCrm\App\Services\Helper;

Contact Management ​

getWPMapUserInfo($user) ​

Maps a WordPress user to a FluentCRM contact data array. Automatically pulls WooCommerce billing fields if available.

  • Parameters: int|WP_User $user — User ID or WP_User object
  • Returns: array — Contact field array (user_id, first_name, last_name, email, address fields, phone)
  • Filter: fluentcrm_user_map_data
php
$contactData = Helper::getWPMapUserInfo($userId);
// ['user_id' => 5, 'first_name' => 'John', 'email' => '[email protected]', ...]

deleteContacts($contactIds) ​

Deletes contacts by their IDs. Fires fluentcrm_before_subscribers_deleted and fluentcrm_after_subscribers_deleted hooks.

  • Parameters: int|array $contactIds
  • Returns: bool
php
Helper::deleteContacts([1, 2, 3]);

sendDoubleOptin($contactIds) ​

Sends double opt-in confirmation emails to contacts with pending status.

  • Parameters: int|array $contactIds
  • Returns: bool
php
Helper::sendDoubleOptin([10, 11, 12]);

createNewTags($tagsArray) ​

Creates tags by title if they don't already exist. Returns an array of tag IDs (existing or newly created).

  • Parameters: array $tagsArray — Array of tag title strings
  • Returns: array — Array of tag IDs
php
$tagIds = Helper::createNewTags(['VIP', 'Newsletter']);
// [5, 12]

createNewLists($listsArray) ​

Creates lists by title if they don't already exist. Returns an array of list IDs.

  • Parameters: array $listsArray — Array of list title strings
  • Returns: array — Array of list IDs
php
$listIds = Helper::createNewLists(['Weekly Digest', 'Product Updates']);

searchWPUsers($searchQuery, $limit = 20) ​

Searches WordPress users by login, email, and nicename. Excludes Administrators.

  • Parameters: string $searchQuery, int $limit (default: 20)
  • Returns: array — Array of WP_User objects
php
$users = Helper::searchWPUsers('john', 10);

getContactPrefixes($withKeyed = false) ​

Returns available contact name prefixes (Mr, Mrs, Ms, etc.).

  • Parameters: bool $withKeyed — If true, returns associative array ['Mr' => 'Mr', ...]
  • Returns: array
  • Filter: fluent_crm/contact_name_prefixes

latestListIdOfSubscriber($contactId) ​

Returns the most recently assigned list ID for a contact.

  • Parameters: int $contactId
  • Returns: int|null

SmartCodes & Templates ​

getGlobalSmartCodes() ​

Returns all available SmartCode groups for the template editor — contact fields, custom fields, and general codes.

  • Returns: array — Array of SmartCode group arrays, each with key, title, and shortcodes
  • Filter: fluent_crm/smartcode_groups

Returns an array of SmartCode group arrays. Each group has key, title, and shortcodes keys. The shortcodes key contains an associative array mapping SmartCode placeholders to their human-readable labels (e.g., contact fields, custom fields, general/CRM codes).

getExtendedSmartCodes() ​

Returns Pro and third-party extended SmartCode groups registered via the fluent_crm/extended_smart_codes filter.

  • Returns: array

hasComplianceText($text) ​

Checks whether an email body contains unsubscribe/manage-subscription SmartCodes (used for compliance validation before sending).

  • Parameters: string $text
  • Returns: bool
  • Filter: fluent_crm/disable_check_compliance_string
php
if (!Helper::hasComplianceText($emailBody)) {
    // Warn: email is missing unsubscribe link
}

hasConditionOnString($string) ​

Returns true if a string contains conditional content SmartCode markers.

  • Parameters: string $string
  • Returns: bool

Email Settings & Design ​

getGlobalEmailSettings() ​

Returns global email settings including sender info, footer, and preference form config.

  • Returns: array with keys: from_name, from_email, emails_per_second, email_footer, pref_list_type, pref_list_items, pref_form, pref_general, pref_custom
php
$settings = Helper::getGlobalEmailSettings();
$fromEmail = $settings['from_email'];
$sendRate = $settings['emails_per_second']; // e.g., 15

getDoubleOptinSettings() ​

Returns double opt-in email settings (subject, body, design template, confirmation page config).

  • Returns: array

getEmailDesignTemplates() ​

Returns all registered email design template definitions.

  • Returns: array — Keyed by template name, each with template_name, label, image, config, use_gutenberg

getTemplateConfig($templateName = '', $withGlobal = true) ​

Returns the configuration array for a named email design template, optionally merged with global style overrides.

  • Parameters: string $templateName (defaults to the default template), bool $withGlobal
  • Returns: array

getDefaultEmailTemplate() ​

Returns the default email design template name (default: 'simple').

  • Returns: string
  • Filter: fluent_crm/default_email_design_template

getMailHeadersFromSettings($emailSettings = []) ​

Builds email headers array (From, Reply-To) from provided or global email settings.

  • Parameters: array $emailSettings (optional — uses global settings if empty)
  • Returns: array

getEmailFooterContent($campaign = null) ​

Returns the effective footer content for a campaign. Falls back to global footer if no custom footer is set.

  • Parameters: Campaign|null $campaign
  • Returns: string

getFooterConfig($campaign = null) ​

Returns footer configuration including font size, color, and whether footer is disabled.

  • Parameters: Campaign|null $campaign
  • Returns: array with keys: disable_footer, custom_footer, footer_content, font_size, font_color

Email Sending & Tracking ​

injectTrackerPixel($emailBody, $hash, $emailId = null) ​

Injects a 1x1 tracking pixel image into email HTML for open tracking. Respects the fluentcrmTrackEmailOpen() setting.

  • Parameters: string $emailBody, string $hash, int|null $emailId
  • Returns: string — Modified HTML

generateEmailHash($insertId) ​

Generates a UUID v4 for use as an email open-tracking hash.

  • Parameters: int $insertId (not used internally, kept for interface compatibility)
  • Returns: string — UUID v4

maybeDisableEmojiOnEmail() ​

Removes WordPress emoji-to-image conversion filters when sending emails. Runs once per request.

  • Returns: void

willMultiThreadEmail($minPendingLimit = 300) ​

Returns true if multi-thread email sending should activate (requires experimental setting enabled + pending email count above threshold).

  • Parameters: int $minPendingLimit (default: 300)
  • Returns: bool

getUpcomingEmailCount() ​

Returns the count of pending/scheduled campaign emails due for sending.

  • Returns: int

URL & Tracking ​

getLinksFromString($string) ​

Extracts all href URLs from anchor tags in an HTML string.

  • Parameters: string $string
  • Returns: array — Array of URL strings
php
$urls = Helper::getLinksFromString($emailHtml);
// ['https://example.com/page1', 'https://example.com/page2']

urlReplaces($string) ​

Builds a map of original href attributes to click-tracking redirect URLs.

  • Parameters: string $string — HTML string
  • Returns: array — ['href="original_url"' => 'tracking_url', ...]

attachUrls($html, $campaignUrls, $insertId, $hash = false) ​

Replaces tracked URL placeholders in email HTML with click-tracked URLs (appends &mid= and &fch= parameters).

  • Parameters: string $html, array $campaignUrls, int $insertId, string|false $hash
  • Returns: string

recordCampaignRevenue($campaignId, $amount, $orderId, $currency = 'USD', $isRefunded = false) ​

Accumulates revenue attribution data for a campaign. Handles both new orders and refunds.

  • Parameters: int $campaignId, float $amount, int $orderId, string $currency, bool $isRefunded
  • Returns: Meta

Profile & UI ​

getProfileSections() ​

Returns the contact profile sub-navigation sections array (Overview, Emails, Notes, etc.). Sections are conditional based on active modules.

  • Returns: array
  • Filter: fluentcrm_profile_sections
php
$sections = Helper::getProfileSections();
/*
[
    'subscriber' => ['name' => 'subscriber', 'title' => 'Overview', 'handler' => 'route'],
    'subscriber_emails' => ['name' => 'subscriber_emails', 'title' => 'Emails', ...],
    ...
]
*/

getActivatedFeatures() ​

Returns an array of feature flags indicating which modules are active.

  • Returns: array with keys: fluentcampaign (bool), company_module (bool), event_tracking (bool), email_open_tracking (bool), email_click_tracking (bool)
php
$features = Helper::getActivatedFeatures();
if ($features['fluentcampaign']) {
    // Pro is active
}

getAdvancedFilterOptions() ​

Returns the full advanced filter field schema used by the contacts filter UI.

  • Returns: array
  • Filter: fluentcrm_advanced_filter_options

getPurchaseHistoryProviders() ​

Returns registered commerce provider options (WooCommerce, FluentCart, EDD, etc.).

  • Returns: array
  • Filter: fluent_crm/purchase_history_providers

Settings & Config ​

getComplianceSettings() ​

Returns GDPR/compliance settings with defaults.

  • Returns: array with keys: anonymize_ip, delete_contact_on_user, personal_data_export, one_click_unsubscribe, enable_gravatar, gravatar_fallback, email_click_tracking, email_open_tracking

isExperimentalEnabled($module) ​

Returns true if a named experimental feature is enabled.

  • Parameters: string $module — e.g., 'company_module', 'event_tracking', 'sms_module'
  • Returns: bool
php
if (Helper::isExperimentalEnabled('event_tracking')) {
    // Event tracking is active
}

isCompanyEnabled() ​

Returns true if the Companies module is active. Shortcut for isExperimentalEnabled('company_module').

  • Returns: bool

isUserSyncEnabled() ​

Returns true if WordPress User to Contact sync is enabled.

  • Returns: bool

isContactDeleteOnUserDeleteEnabled() ​

Returns true if contacts should be deleted when their associated WordPress user is deleted.

  • Returns: bool

Utilities ​

parseArrayOrJson($value, $default = []) ​

Parses a mixed input (array or JSON string) into an array. Handles WordPress slashed strings. Returns $default on failure.

  • Parameters: mixed $value, array $default
  • Returns: array
php
$data = Helper::parseArrayOrJson('{"key": "value"}');
// ['key' => 'value']

$data = Helper::parseArrayOrJson(['already', 'an', 'array']);
// ['already', 'an', 'array']

sanitizeHtml($html) ​

Sanitizes HTML using wp_kses with an extended allowed-tag list that includes <style>, <iframe>, SVG tags, and button onclick.

  • Parameters: string $html
  • Returns: string
  • Filter: fluent_crm/allowed_html_tags

slugify($text, $fallback = '') ​

Converts text to a URL-friendly slug. Handles Latin and non-Latin scripts. Falls back to generateUniqueId() for non-Latin text.

  • Parameters: string $text, string $fallback
  • Returns: string
php
Helper::slugify('Hello World');   // 'hello-world'
Helper::slugify('Über Cool');     // 'uber-cool'
Helper::slugify('مرحبا');          // generates unique ID

generateUniqueId() ​

Generates a unique ~11-character hyphenated ID.

  • Returns: string — e.g., '6f1a2-xyz12'

debugLog($title, $description = '', $type = 'info') ​

Writes a system log entry when debug logging is enabled (via FLUENT_CRM_DEBUG_LOG constant or experimental setting).

  • Parameters: string $title, string|array $description, string $type
  • Returns: SystemLog|null
php
Helper::debugLog('Webhook received', json_encode($payload));

getStatusText($text) ​

Returns a human-readable, translated label for a contact/campaign status slug.

  • Parameters: string $text — e.g., 'subscribed', 'pending', 'bounced'
  • Returns: string — e.g., 'Subscribed', 'Pending', 'Bounced'