[ 'name' => 'Notification Attachment', 'slug' => 'notification-attachment', 'desc' => esc_html__('Automatically attach pre-added file to Gravity Forms notification.', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-attachment', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'extension', 'version' => '1.0.1', ], 'tooltips' => [ 'name' => 'Tooltips', 'slug' => 'tooltips', 'desc' => esc_html__('Display helpful tooltip hints for Gravity form fields', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-tooltips', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'extension', ], 'limit-checkbox' => [ 'name' => 'Limit Checkboxes', 'slug' => 'limit-checkbox', 'desc' => esc_html__('Control how many options can be selected in a checkbox field.', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-checkboxes', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'extension', ], 'preview-submission' => [ 'name' => 'Preview Submission', 'slug' => 'preview-submission', 'desc' => esc_html__('Allow users to preview their submission before final submission.', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-preview-submission', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'extension', ], 'star-rating' => [ 'name' => 'Star Rating Field', 'slug' => 'star-rating', 'desc' => esc_html__('Add multiple Star Rating fields to forms with flexible design options.', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-star-rating', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'field', ], 'disable-entry' => [ 'name' => 'Disable Entry Creation', 'slug' => 'disable-entry', 'desc' => esc_html__('Prevent entries from being created when the form is submitted.', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-disabled', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'extension', ], 'custom-css-js' => [ 'name' => 'Custom CSS & JS', 'slug' => 'custom-css-js', 'desc' => esc_html__('Enables per-form custom CSS and JS without affecting other forms.', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-css-js', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'extension', 'version' => '1.0.1' ], 'klaviyo' => [ 'name' => 'Klaviyo', 'slug' => 'klaviyo', 'desc' => esc_html__('Send form data to Klaviyo for email marketing and automation', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-klaviyo', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'integration', ], 'cloudflare-turnstile' => [ 'name' => 'Cloudflare Turnstile', 'slug' => 'cloudflare-turnstile', 'desc' => esc_html__('Add Cloudflare Turnstile to prevent spam submissions.', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-turnstile', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'field', ], 'hcaptcha' => [ 'name' => 'hCaptcha', 'slug' => 'hcaptcha', 'desc' => esc_html__('Add hCaptcha to prevent automated spam submissions.', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-hcaptcha', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'field', ], 'google-calendar' => [ 'name' => 'Google Calendar', 'slug' => 'google-calendar', 'desc' => esc_html__('Add events to Google Calendar from Gravity Forms submissions.', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-google-calendar', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'integration', ], 'google-sheet' => [ 'name' => 'Google Sheet', 'slug' => 'google-sheet', 'desc' => esc_html__('Add form data to Google sheet from Gravity Forms submissions.', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-excel', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'integration', ], 'math-captcha' => [ 'name' => 'Math Captcha', 'slug' => 'math-captcha', 'desc' => esc_html__('Add math captcha to prevent spam submissions.', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-math-captcha', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'field', ], 'read-only' => [ 'name' => 'Read Only', 'slug' => 'read-only', 'desc' => esc_html__('Add read only fields to Gravity forms', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-readonly', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'extension', ], 'styles' => [ 'name' => 'Styles', 'slug' => 'styles', 'desc' => esc_html__('Add custom styles to Gravity forms', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-form-styles', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'extension', ], 'autostep' => [ 'name' => 'Auto Next Step', 'slug' => 'autostep', 'desc' => esc_html__('Automatically go to the next page when a choice is selected', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-autostep', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'extension', ], 'unique-id' => [ 'name' => 'Unique ID', 'slug' => 'unique-id', 'desc' => esc_html__('Generate unique alphanumeric, numeric or sequential IDs for each entry.', 'alpha-addons-for-gravity-forms'), 'icon' => 'icon-clipboard', 'status' => 'free', 'doc_link' => '', 'demo_link' => '', 'type' => 'field', ] ] ); } public static function get_build_addons() { return apply_filters( 'alphagf_build_addons', [ 'notification-attachment' => [ 'name' => 'Notification Attachment', 'slug' => 'notification-attachment', 'class' => 'ALPHAGF_Notification_Attachment', 'path' => '' ], 'tooltips' => [ 'name' => 'Tooltips', 'slug' => 'tooltips', 'class' => 'ALPHAGF_Tooltips', 'path' => '' ], 'limit-checkbox' => [ 'name' => 'Limit Checkbox', 'slug' => 'limit-checkbox', 'class' => 'ALPHAGF_Limit_Checkbox', 'path' => '' ], 'preview-submission' => [ 'name' => 'Preview Submission', 'slug' => 'preview-submission', 'class' => 'ALPHAGF_Preview_Submission', 'path' => '' ], 'star-rating' => [ 'name' => 'Star Rating Field', 'slug' => 'star-rating', 'class' => 'ALPHAGF_Star_Rating', 'path' => '' ], 'disable-entry' => [ 'name' => 'Disable Entry Creation', 'slug' => 'disable-entry', 'class' => 'ALPHAGF_Disable_Entry_Creation', 'path' => '' ], 'custom-css-js' => [ 'name' => 'Custom CSS & JS', 'slug' => 'custom-css-js', 'class' => 'ALPHAGF_Custom_CSS_JS', 'path' => '' ], 'klaviyo' => [ 'name' => 'Klaviyo', 'slug' => 'klaviyo', 'class' => 'ALPHAGF_Klaviyo', 'path' => '' ], 'hcaptcha' => [ 'name' => 'hCaptcha', 'slug' => 'hcaptcha', 'class' => 'ALPHAGF_hCaptcha', 'path' => '' ], 'cloudflare-turnstile' => [ 'name' => 'Cloudflare Turnstile', 'slug' => 'cloudflare-turnstile', 'class' => 'ALPHAGF_Cloudflare_Turnstile', 'path' => '' ], 'google-calendar' => [ 'name' => 'Google Calendar', 'slug' => 'google-calendar', 'class' => 'ALPHAGF_Google_Calendar', 'path' => '' ], 'google-sheet' => [ 'name' => 'Google Sheet', 'slug' => 'google-sheet', 'class' => 'ALPHAGF_Google_Sheet', 'path' => '' ], 'math-captcha' => [ 'name' => 'Math Captcha', 'slug' => 'math-captcha', 'class' => 'ALPHAGF_Math_Captcha', 'path' => '' ], 'read-only' => [ 'name' => 'Read Only', 'slug' => 'read-only', 'class' => 'ALPHAGF_Read_Only', 'path' => '' ], 'styles' => [ 'name' => 'Styles', 'slug' => 'styles', 'class' => 'ALPHAGF_Styles', 'path' => '' ], 'autostep' => [ 'name' => 'Auto Next Step', 'slug' => 'autostep', 'class' => 'ALPHAGF_Autostep', 'path' => '' ], 'unique-id' => [ 'name' => 'Unique ID', 'slug' => 'unique-id', 'class' => 'ALPHAGF_Unique_ID', 'path' => '' ] ] ); } public static function get_addon_type_count($field_type = '') { $addons = self::get_dashboard_addons(); // If no type provided → return total addons count if (empty($field_type)) { return count($addons); } $count = 0; foreach ($addons as $addon) { if (($addon['type'] ?? '') === $field_type) { $count++; } } return $count; } public static function dynamic_search_post_type_keys() { return apply_filters( 'alphagf_dynamic_search_post_type_keys', [ 'post' => [ 'post_title' => 'Title', 'post_id' => 'ID', 'post_slug' => 'Slug', 'post_author_id' => 'Author ID', 'post_author' => 'Author Name' ], 'page' => [ 'page_title' => 'Title', 'page_id' => 'ID', 'page_slug' => 'Slug', 'page_author_id' => 'Author ID', 'page_author' => 'Author Name' ], 'user' => [ 'user_id' => 'ID', 'user_display_name' => 'Display Name', 'user_email' => 'Email', 'user_role' => 'Role', 'meta_data' => 'Custom Meta' ] ] ); } public static function instance() { if (is_null(self::$instance)) { self::$instance = new self(); } return self::$instance; } }