'), 56 ); if (current_user_can($capability)) { $entriesCount = ''; // if (self::countUnreadEntries()) { // $entriesCount = ' ' . self::countUnreadEntries() . ''; // } $submenu['bitform'][] = [__('All Forms', 'bit-form') . $entriesCount, $capability, 'admin.php?page=bitform#/']; $submenu['bitform'][] = [__('Form Templates', 'bit-form') . 'New', $capability, 'admin.php?page=bitform#/form-templates']; $submenu['bitform'][] = [__('App Settings', 'bit-form'), $capability, 'admin.php?page=bitform#/app-settings/general']; $submenu['bitform'][] = [__('Integrations', 'bit-form'), $capability, 'admin.php?page=bitform#/app-settings/integrations']; $submenu['bitform'][] = [__('SMTP', 'bit-form'), $capability, 'admin.php?page=bitform#/app-settings/smtp']; $submenu['bitform'][] = [__('PDF Setting', 'bit-form'), $capability, 'admin.php?page=bitform#/app-settings/pdf']; $submenu['bitform'][] = [__('CPT', 'bit-form'), $capability, 'admin.php?page=bitform#/app-settings/cpt']; $submenu['bitform'][] = [__('Bit Form API', 'bit-form'), $capability, 'admin.php?page=bitform#/app-settings/api']; $submenu['bitform'][] = [__('Payments', 'bit-form'), $capability, 'admin.php?page=bitform#/app-settings/payments']; $submenu['bitform'][] = [__('Doc & Support', 'bit-form'), $capability, 'admin.php?page=bitform#/doc-support']; if (!Utilities::isPro()) { $submenu['bitform'][] = ['' . __('Get 74% OFF', 'bit-form') . '', $capability, 'https://bit-form.com/#pricing', '_blank']; } } } public function AdminTopMenu(WP_Admin_Bar $wp_admin_bar) { if (!(current_user_can('manage_options') || current_user_can('manage_bitform'))) { return; } $indicator = ''; // if (self::countUnreadEntries()) { // $indicator = '
' . self::countUnreadEntries() . '
'; // } $wp_admin_bar->add_node([ 'id' => 'bitform', 'title' => 'Bit Form' . $indicator, 'href' => admin_url('admin.php?page=bitform'), 'meta' => [ 'class' => 'bitform-admin-bar', ], ]); $wp_admin_bar->add_node([ 'id' => 'bitform-all-forms', 'parent' => 'bitform', 'title' => __('All Forms', 'bit-form') . $indicator, 'href' => admin_url('admin.php?page=bitform#/'), ]); $wp_admin_bar->add_node([ 'id' => 'bitform-form-templates', 'parent' => 'bitform', 'title' => __('Form Templates', 'bit-form'), 'href' => admin_url('admin.php?page=bitform#/form-templates'), ]); $wp_admin_bar->add_node([ 'id' => 'bitform-app-settings', 'parent' => 'bitform', 'title' => __('App Settings', 'bit-form'), 'href' => admin_url('admin.php?page=bitform#/app-settings/general'), ]); $wp_admin_bar->add_node([ 'id' => 'bitform-smtp', 'parent' => 'bitform', 'title' => __('SMTP', 'bit-form'), 'href' => admin_url('admin.php?page=bitform#/app-settings/smtp'), ]); $wp_admin_bar->add_node([ 'id' => 'bitform-pdf-setting', 'parent' => 'bitform', 'title' => __('PDF Setting', 'bit-form'), 'href' => admin_url('admin.php?page=bitform#/app-settings/pdf'), ]); $wp_admin_bar->add_node([ 'id' => 'bitform-cpt', 'parent' => 'bitform', 'title' => __('CPT', 'bit-form'), 'href' => admin_url('admin.php?page=bitform#/app-settings/cpt'), ]); $wp_admin_bar->add_node([ 'id' => 'bitform-api', 'parent' => 'bitform', 'title' => __('Bit Form API', 'bit-form'), 'href' => admin_url('admin.php?page=bitform#/app-settings/api'), ]); $wp_admin_bar->add_node([ 'id' => 'bitform-payments', 'parent' => 'bitform', 'title' => __('Payments', 'bit-form'), 'href' => admin_url('admin.php?page=bitform#/app-settings/payments'), ]); } public function getAllPages() { $pages = get_pages(['post_status' => 'publish', 'sort_column' => 'post_date', 'sort_order' => 'desc']); $allPages = []; foreach ($pages as $pageKey => $pageDetails) { $allPages[$pageKey]['title'] = $pageDetails->post_title; $allPages[$pageKey]['url'] = get_page_link($pageDetails->ID); } return $allPages; } /** * Load the asset libraries * * @return void */ public function AdminAssets($current_screen) { if (false === strpos($current_screen, 'bitform')) { return; } $parsed_url = wp_parse_url(get_admin_url()); $site_url = $parsed_url['scheme'] . '://' . $parsed_url['host']; $site_url .= empty($parsed_url['port']) ? null : ':' . $parsed_url['port']; $base_path_admin = str_replace($site_url, '', get_admin_url()); // loading google fonts wp_enqueue_style('googleapis-BITFORM-PRECONNECT', 'https://fonts.googleapis.com', [], BITFORMS_VERSION, false); wp_enqueue_style('gstatic-BITFORM-PRECONNECT-CROSSORIGIN', 'https://fonts.gstatic.com', [], BITFORMS_VERSION, false); foreach (self::$fonts_url as $i => $font_url) { wp_enqueue_style('bf-font-' . $i, $font_url, [], BITFORMS_VERSION); } if (defined('BITAPPS_DEV') && BITAPPS_DEV) { // Vite dev server scripts; null version intentional (dev mode, no cache busting needed). wp_enqueue_script('vite-client-helper-BITFORM-MODULE', BIT_DEV_URL . '/config/devHotModule.js', [], null); wp_enqueue_script('vite-client-BITFORM-MODULE', BIT_DEV_URL . '/@vite/client', [], null); wp_enqueue_script('index-BITFORM-MODULE', BIT_DEV_URL . '/main.jsx', [], null); } if (!defined('BITAPPS_DEV') || (defined('BITAPPS_DEV') && !BITAPPS_DEV)) { $build_hash = file_get_contents(BITFORMS_PLUGIN_DIR_PATH . '/build-hash.txt'); wp_enqueue_script('index-BITFORM-MODULE', BITFORMS_ASSET_URI . "/main-{$build_hash}.js", [], null); wp_enqueue_style('bf-css', BITFORMS_ASSET_URI . "/main-{$build_hash}.css", [], $build_hash); } // if (defined('BITAPPS_DEV') && BITAPPS_DEV) { // wp_enqueue_script( // 'bitforms-vendors', // BITFORMS_ASSET_JS_URI . '/vendors-main.js', // null, // BITFORMS_VERSION, // true // ); // wp_enqueue_script( // 'bitforms-runtime', // BITFORMS_ASSET_JS_URI . '/runtime.js', // null, // BITFORMS_VERSION, // true // ); // wp_enqueue_script( // 'bitforms-file', // BITFORMS_ASSET_JS_URI . '/bitforms-file.js', // ['bitforms-vendors', 'bitforms-runtime'], // BITFORMS_VERSION, // true // ); // } // if (wp_script_is('wp-i18n')) { // error_log('wp_script' . wp_script_is('wp-i18n')); // $deps = ['bitforms-vendors', 'bitforms-runtime', 'bitforms-file', 'wp-i18n']; // } else { // $deps = ['bitforms-vendors', 'bitforms-runtime', 'bitforms-file']; // } // if (!defined('BITAPPS_DEV')) { // wp_enqueue_script( // 'bitforms-admin-script', // BITFORMS_ASSET_JS_URI . '/index.js', // $deps, // BITFORMS_VERSION, // true // ); // } wp_enqueue_script('tinymce_js', includes_url('js/tinymce/') . 'wp-tinymce.php', [], get_bloginfo('version'), true); if (!wp_script_is('media-upload')) { wp_enqueue_media(); } // $plugin_path = BITFORMS_ASSET_URI; echo ""; // if (defined('BITAPPS_DEV') && !BITAPPS_DEV) { // wp_enqueue_style( // 'bitforms-styles', // BITFORMS_ASSET_URI . '/css/bitforms.css', // null, // BITFORMS_VERSION, // 'screen' // ); // wp_enqueue_style( // 'bitforms-components-styles', // BITFORMS_ASSET_URI . '/css/components.css', // null, // BITFORMS_VERSION, // 'screen' // ); // } $formHandler = FormHandler::getInstance(); $all_forms = $formHandler->admin->getAllForm(); $urlQuery = wp_parse_url(FileDownloadProvider::getBaseDownloadURL(), PHP_URL_QUERY); $baseDLURL = FileDownloadProvider::getBaseDownloadURL(); $baseDLURL = empty($urlQuery) ? $baseDLURL . '?' : $baseDLURL . '&'; $ipTool = new IpTool(); $user_details = $ipTool->getUserDetail(); $integrationHandler = new IntegrationHandler(0, $user_details); $allFormIntegrations = $integrationHandler->getAllIntegration('app'); $integraions = Integrations::getInstance(); $connectedIntegrationApps = $integraions->getConnectedIntegrationApp(); $allFormSettings = []; if (!is_wp_error($allFormIntegrations)) { $integCount = []; foreach ($allFormIntegrations as $integration) { $type = $integration->integration_type; if (!is_null($type)) { if (!isset($integCount[$type])) { $integCount[$type] = 1; } else { $integCount[$type] += 1; } } } foreach ($allFormIntegrations as $integration) { $type = $integration->integration_type; if (!is_null($type)) { $integrationDetails = json_decode($integration->integration_details); if (!is_object($integrationDetails) || is_null($integrationDetails)) { $integrationDetails = new \stdClass(); } $integrationDetails->id = $integration->id; if ($integCount[$type] > 1) { if (!isset($allFormSettings[$type])) { $allFormSettings[$type] = []; } array_push($allFormSettings[$type], $integrationDetails); } else { $allFormSettings[$type] = $integrationDetails; } } } } if (!is_wp_error($connectedIntegrationApps)) { $allFormSettings['connectedIntegrationApps'] = $connectedIntegrationApps; } $appSettings = get_option('bitform_app_settings', (object)[]); $bits = [ 'configs' => ['bf_separator' => BITFORMS_BF_SEPARATOR], 'nonce' => wp_create_nonce('bitforms_save'), 'isPro' => false, 'siteURL' => site_url(), 'assetsURL' => BITFORMS_ASSET_URI, 'baseURL' => $base_path_admin . 'admin.php?page=bitform#', 'baseDLURL' => $baseDLURL, 'styleURL' => BITFORMS_UPLOAD_BASE_URL . '/form-styles', 'iconURL' => BITFORMS_UPLOAD_BASE_URL . '/icons', 'ajaxURL' => admin_url('admin-ajax.php'), 'allForms' => is_wp_error($all_forms) ? null : $all_forms, 'allPages' => is_wp_error($this->getAllPages()) ? [] : $this->getAllPages(), 'allFormSettings' => count($allFormSettings) > 0 ? $allFormSettings : (object)[], 'appSettings' => $appSettings, 'dateFormat' => get_option('date_format'), 'timeFormat' => get_option('time_format'), 'timeZone' => DateTimeHelper::wp_timezone_string(), 'googleRedirectURL' => get_rest_url() . 'bitform/v1/google', 'oneDriveRedirectURL' => get_rest_url() . 'bitform/v1/oneDrive', 'zohoRedirectURL' => get_rest_url() . 'bitform/v1/zoho', 'oAuthRedirectURL' => get_rest_url() . 'bitform/v1/oauth-redirect', 'downloadedPdfFonts' => is_array(get_option('bitforms_pdf_fonts')) ? get_option('bitforms_pdf_fonts') : [], 'permission' => empty(get_option('bitforms_allow_tracking')) ? false : true, 'templatePath' => BITFORMS_ROOT_URI . '/static/templates', 'serverInfo' => ['php_version' => phpversion(), 'engine' => isset($_SERVER['SERVER_SOFTWARE']) ? sanitize_text_field(wp_unslash($_SERVER['SERVER_SOFTWARE'])) : '', 'wp_version' => get_bloginfo('version'), 'loaded_extensions' => get_loaded_extensions()], ]; $isMigratingToV2 = get_option('bitforms_migrating_to_v2', false); if ($isMigratingToV2) { $bits['isMigratingToV2'] = $isMigratingToV2; } if (defined('BITFORMS_VERSION')) { $bits['version'] = BITFORMS_VERSION; } $changelogVersion = get_option('bitforms_changelog_version', '0.0.0'); $bits['changelogVersion'] = $changelogVersion; $hideAnnouncementModal = (bool) get_option('bitforms_hide_announcement', false); $bits['hideAnnouncementModal'] = $hideAnnouncementModal; $hideCashbackModal = (bool) get_option('bitforms_hide_cashback', false); $bits['hideCashbackModal'] = $hideCashbackModal; global $wpdb; // Direct query: table name interpolation only (no user input). $wpdb->prepare() cannot parameterize schema-check queries. $hasV1FormTable = $wpdb->get_var("SHOW TABLES LIKE '{$wpdb->prefix}bitforms_form_v1'"); if ($hasV1FormTable) { $bits['canRollbackToV1'] = true; } $bitforms = apply_filters( 'bitforms_localized_script', $bits ); $allowBitFormTranslation = apply_filters('bitforms_filter_allow_translation', true); if ($allowBitFormTranslation && 'en_US' !== get_user_locale() && file_exists(BITFORMS_PLUGIN_DIR_PATH . '/languages/generatedString.php')) { include_once BITFORMS_PLUGIN_DIR_PATH . '/languages/generatedString.php'; $bitforms['translations'] = $bitforms_i18n_strings; // Apply a filter to allow user/custom translations to modify the $bitforms translations $bitforms['translations'] = apply_filters('bitform_filter_translations', $bitforms['translations']); } wp_localize_script('index-BITFORM-MODULE', 'bits', $bitforms); // !BIT_DEV && wp_localize_script('bitforms-admin-script', 'bits', $bitforms); // echo !BIT_DEV ? '' : ""; // if (\function_exists('wp_set_script_translations')) // wp_set_script_translations('bitforms-admin-script', 'bitform', BITFORMS_PLUGIN_DIR_PATH . 'languages'); } public function bitforms_enqueue_admin_styles() { wp_enqueue_style( 'bitforms-admin-styles', BITFORMS_ROOT_URI . '/resources/admin.css', [], BITFORMS_VERSION, 'all' ); } /** * Bitforms apps-root id provider * @return void */ public function RootPage() { require_once BITFORMS_PLUGIN_DIR_PATH . '/views/view-root.php'; } public function AdminNotices() { global $plugin_page; $plugin_page = null === $plugin_page ? '' : $plugin_page; if (false === strpos($plugin_page, 'bitform')) { return; } remove_all_actions('admin_notices'); remove_all_actions('all_admin_notices'); } /** * Modify style tags * * @param string $html link tag * * @return string new link tag */ public function linkTagFilter($html, $handle, $href) { $newTag = $html; if (preg_match('/BITFORM-PRECONNECT/', $handle)) { $newTag = preg_replace('/rel=("|\')stylesheet("|\')/', 'rel="preconnect"', $newTag); } if (preg_match('/BITFORM-PRELOAD/', $handle)) { $newTag = preg_replace('/rel=("|\')stylesheet("|\')/', 'rel="preload"', $newTag); } if (preg_match('/BITFORM-CROSSORIGIN/', $handle)) { $newTag = preg_replace('/get_var("SELECT COUNT(*) FROM {$wpdb->prefix}bitforms_form_entries WHERE status = 1"); return $unreadEntries; } }