# Global Functions FluentCRM provides global helper functions defined in `app/Functions/helpers.php`. These are available anywhere after the plugin loads. ## FluentCrmApi() The main entry point for FluentCRM's PHP API. Returns an API class instance for the given key. ```php $api = FluentCrmApi($key); ``` **Available keys:** | Key | Class | Documentation | |-----|-------|---------------| | `contacts` | `FluentCrm\App\Api\Classes\Contacts` | [Contact API](/global-functions/contact-api-function) | | `companies` | `FluentCrm\App\Api\Classes\Companies` | [Company API](/global-functions/company-api-function) | | `tags` | `FluentCrm\App\Api\Classes\Tags` | [Tag API](/global-functions/tag-api-function) | | `lists` | `FluentCrm\App\Api\Classes\Lists` | [List API](/global-functions/list-api-function) | | `extender` | `FluentCrm\App\Api\Classes\Extender` | [Extender API](/global-functions/extender-api-function) | | `event_tracker` | `FluentCrm\App\Api\Classes\Tracker` | [Event Tracker API](/global-functions/tracker-api-function) | ```php // Examples $contact = FluentCrmApi('contacts')->getContact('john@example.com'); $company = FluentCrmApi('companies')->getCompany(15); FluentCrmApi('event_tracker')->track([ 'email' => 'john@example.com', 'event_key' => 'page_visited', 'title' => 'Pricing Page Visit', ]); ``` --- ## Options FluentCRM stores its own options in the `fc_meta` table (not `wp_options`). These functions mirror WordPress's `get_option()` / `update_option()` / `delete_option()`. ### fluentcrm_get_option() ```php $value = fluentcrm_get_option($optionName, $default = ''); ``` **Parameters** - `$optionName` `string` — Option key - `$default` `mixed` — Value to return if option doesn't exist **Returns** `mixed` --- ### fluentcrm_update_option() ```php $id = fluentcrm_update_option($optionName, $value); ``` **Parameters** - `$optionName` `string` — Option key - `$value` `mixed` — Value to store **Returns** `int` — Meta entry ID --- ### fluentcrm_delete_option() ```php $deleted = fluentcrm_delete_option($optionName); ``` **Parameters** - `$optionName` `string` — Option key **Returns** `bool` --- ## Meta CRUD All meta is stored in the `fc_meta` table with different `object_type` discriminators. FluentCRM provides typed helpers for each entity, plus a generic set. ### Generic Meta ```php // Get meta entry — returns Meta model or null $meta = fluentcrm_get_meta($objectId, $objectType, $key); // Create or update meta — returns Meta model $meta = fluentcrm_update_meta($objectId, $objectType, $key, $value); // Delete meta — if $key is empty, deletes all meta for that object $deleted = fluentcrm_delete_meta($objectId, $objectType, $key = ''); ``` ### Campaign Meta ```php // Get — if $returnValue is true, returns the value directly (or false). Otherwise returns Meta model. $meta = fluentcrm_get_campaign_meta($campaignId, $key, $returnValue = false); // Create or update — returns Meta model $meta = fluentcrm_update_campaign_meta($campaignId, $key, $value); // Delete — if $key is empty, deletes all meta for that campaign $deleted = fluentcrm_delete_campaign_meta($campaignId, $key = ''); ``` ### Subscriber (Contact) Meta ```php // Get — returns the unserialized value, or $default $value = fluentcrm_get_subscriber_meta($subscriberId, $key, $default = ''); // Create or update — returns SubscriberMeta model $meta = fluentcrm_update_subscriber_meta($subscriberId, $key, $value); // Delete $deleted = fluentcrm_delete_subscriber_meta($subscriberId, $key); ``` ### SMS Campaign Meta ```php $meta = fluentcrm_get_sms_campaign_meta($campaignId, $key, $returnValue = false); $meta = fluentcrm_update_sms_campaign_meta($campaignId, $key, $value); $deleted = fluentcrm_delete_sms_campaign_meta($campaignId, $key = ''); ``` ### Template Meta ```php $meta = fluentcrm_get_template_meta($templateId, $key); $meta = fluentcrm_update_template_meta($templateId, $key, $value); $deleted = fluentcrm_delete_template_meta($templateId, $key); ``` ### List Meta ```php $meta = fluentcrm_get_list_meta($listId, $key); $meta = fluentcrm_update_list_meta($listId, $key, $value); $deleted = fluentcrm_delete_list_meta($listId, $key); ``` --- ## Contact Statuses & Types ### fluentcrm_subscriber_statuses() Get all valid contact subscription statuses. ```php $statuses = fluentcrm_subscriber_statuses($isOptions = false); ``` **Parameters** - `$isOptions` `bool` — If `true`, returns formatted array with `id`, `slug`, `title` keys **Returns** `array` ```php fluentcrm_subscriber_statuses(); // ['subscribed', 'pending', 'unsubscribed', 'transactional', 'bounced', 'complained', 'spammed'] fluentcrm_subscriber_statuses(true); // [['id' => 'subscribed', 'slug' => 'subscribed', 'title' => 'Subscribed'], ...] ``` **Filter:** [`fluent_crm/contact_statuses`](/hooks/filters/contacts#fluent-crm-contact-statuses) --- ### fluentcrm_subscriber_editable_statuses() Same as `fluentcrm_subscriber_statuses()` but excludes `bounced`, `complained`, and `spammed`. ```php $statuses = fluentcrm_subscriber_editable_statuses($isOptions = false); ``` **Filter:** [`fluent_crm/contact_editable_statuses`](/hooks/filters/contacts#fluent-crm-contact-editable-statuses) --- ### fluentcrm_subscriber_sms_statuses() Get SMS subscription statuses. ```php $statuses = fluentcrm_subscriber_sms_statuses($isOptions = false); // ['sms_subscribed', 'sms_pending', 'sms_unsubscribed', 'sms_bounced'] ``` --- ### fluentcrm_contact_types() Get contact type definitions. ```php $types = fluentcrm_contact_types($isOptions = false); // ['lead' => 'Lead', 'customer' => 'Customer'] ``` **Filter:** [`fluent_crm/contact_types`](/hooks/filters/contacts#fluent-crm-contact-types) --- ### fluentcrm_activity_types() Get contact note/activity type labels. ```php $types = fluentcrm_activity_types(); // ['note' => 'Note', 'call' => 'Call', 'email' => 'Email', 'meeting' => 'Meeting', ...] ``` **Filter:** [`fluent_crm/contact_activity_types`](/hooks/filters/contacts#fluent-crm-contact-activity-types) --- ### fluentcrm_strict_statues() Get statuses that block sending (contacts in these statuses won't receive emails). ```php $statuses = fluentcrm_strict_statues(); // ['unsubscribed', 'bounced', 'complained', 'spammed'] ``` --- ### fluentCrmEmailSendableStatuses() Get statuses eligible to receive campaign emails. ```php $statuses = fluentCrmEmailSendableStatuses(); // ['subscribed', 'transactional'] ``` **Filter:** [`fluent_crm/email_sendable_statuses`](/hooks/filters/contacts#fluent-crm-email-sendable-statuses) --- ## Current Contact ### fluentcrm_get_current_contact() Get the current contact based on logged-in user ID or secure cookie. ```php $contact = fluentcrm_get_current_contact(); // Returns false|\FluentCrm\App\Models\Subscriber ``` Shorthand for `FluentCrmApi('contacts')->getCurrentContact(true, true)`. --- ## Custom Fields ### fluentcrm_get_custom_contact_fields() Get the custom field schema for contacts (cached). ```php $fields = fluentcrm_get_custom_contact_fields(); ``` **Returns** `array` — Field definitions from the `contact_custom_fields` option. --- ### fluentcrm_get_custom_company_fields() Get the custom field schema for companies (cached). ```php $fields = fluentcrm_get_custom_company_fields(); ``` **Returns** `array` — Field definitions from the `company_custom_fields` option. --- ## Secure Hashes ### fluentCrmGetContactSecureHash() Get or create a long-lived secure hash for a contact. Used for identifying contacts in email links. ```php $hash = fluentCrmGetContactSecureHash($contactId); // Returns string hash or false ``` --- ### fluentCrmGetContactManagedHash() Get or create a managed secure hash that auto-rotates every 30 days. ```php $hash = fluentCrmGetContactManagedHash($contactId); // Returns string hash ``` --- ## Profile Widget ### fluentcrm_get_crm_profile_html() Get the HTML for a contact's CRM profile widget (photo, name, status, tags, lists, stats). ```php $html = fluentcrm_get_crm_profile_html($userIdOrEmail, $checkPermission = true, $withCss = true); ``` **Parameters** - `$userIdOrEmail` `int|string` — WordPress user ID or email address - `$checkPermission` `bool` — Whether to verify current user has permission to view - `$withCss` `bool` — Whether to include CSS styles **Returns** `string` — Profile widget HTML, or empty string on failure. --- ## Tracking Settings ### fluentcrmTrackClicking() Check if click tracking is enabled. ```php $tracking = fluentcrmTrackClicking(); // Returns true, false, or 'anonymous' ``` --- ### fluentcrmTrackEmailOpen() Check if open tracking is enabled. ```php $tracking = fluentcrmTrackEmailOpen(); // Returns true, false, or 'anonymous' ``` --- ### fluentCrmWillTrackIp() Check if IP address tracking is enabled. ```php $willTrack = fluentCrmWillTrackIp(); // Returns bool ``` --- ### fluentCrmWillAnonymizeIp() Check if IP addresses should be anonymized per compliance settings. ```php $anonymize = fluentCrmWillAnonymizeIp(); // Returns bool ``` --- ## Database Access ### fluentCrmDb() Get a raw database connection instance for direct queries. ```php $db = fluentCrmDb(); // Returns \FluentCrm\Framework\Database\Query\WPDBConnection ``` --- ## Background Processing ### fluentcrm_queue_on_background() Fire a non-blocking background HTTP request to process a task asynchronously via `admin-ajax.php`. ```php fluentcrm_queue_on_background($callbackName, $payload); ``` **Parameters** - `$callbackName` `string` — The callback function name - `$payload` `mixed` — Data to pass to the callback **Returns** `true` --- ## Caching ### fluentCrmGetFromCache() Get a value from WP object cache, or compute and store it. ```php $value = fluentCrmGetFromCache($key, $callback = false, $expire = 600); ``` **Parameters** - `$key` `string` — Cache key - `$callback` `callable|false` — If cache miss and callable provided, calls it and caches the result - `$expire` `int` — Cache TTL in seconds (default 600) --- ### fluentCrmSetCache() Set a value in WP object cache. ```php fluentCrmSetCache($key, $value, $expire = 600); ``` --- ### fluentCrmRunTimeCache() Static in-memory key-value store. Persists only for the current PHP request. ```php // Set a value fluentCrmRunTimeCache('my_key', $value); // Get a value $value = fluentCrmRunTimeCache('my_key'); ``` --- ### fluentCrmPersistentCache() Database-persisted cache using `fc_meta` table with `persistent_cache` object type. ```php $value = fluentCrmPersistentCache($key, $callback = false, $expire = 600); ``` --- ## RTL ### fluentcrm_is_rtl() Check if email templates should render in RTL direction. ```php $isRtl = fluentcrm_is_rtl(); // Returns bool ``` **Filter:** [`fluent_crm/is_rtl`](/hooks/filters/emails-and-sending#fluent-crm-is-rtl) --- ## Memory & Timing ### fluentCrmIsMemoryExceeded() Check if PHP memory usage exceeds a given percentage of the limit. ```php $exceeded = fluentCrmIsMemoryExceeded($percent = 75); // Returns bool ``` --- ### fluentCrmMaxRunTime() Get the maximum safe execution time in seconds (capped at 55, minus 3 for safety). ```php $seconds = fluentCrmMaxRunTime(); // Returns int ``` --- ### fluentCrmIsTimeOut() Check if execution time has exceeded the given limit since `FLUENT_CRM_STARTING_TIME`. ```php $timedOut = fluentCrmIsTimeOut($maxSeconds = 30); // Returns bool ``` --- ## Menu URLs ### fluentcrm_menu_url_base() Get the admin URL for FluentCRM's classic UI. ```php $url = fluentcrm_menu_url_base($ext = ''); // e.g., 'admin.php?page=fluentcrm-admin#/' ``` --- ### fluent_crm_menu_url_base_new() Get the admin URL for FluentCRM's v3 UI. ```php $url = fluent_crm_menu_url_base_new($ext = ''); // e.g., 'admin.php?page=fluent-crm-v3#/' ``` --- ## Global Settings ### fluentcrmGetGlobalSettings() Get a value from FluentCRM's global settings (stored in the `fluentcrm-global-settings` WP option). ```php $value = fluentcrmGetGlobalSettings($key, $default = false); ``` --- ## Gravatar ### fluentcrmGravatar() Get a contact's Gravatar URL, respecting FluentCRM's compliance settings. ```php $url = fluentcrmGravatar($email, $name = ''); ``` Falls back to the default avatar URL when Gravatar is disabled. **Source:** `app/Functions/helpers.php`