$shopid, 'status' => 1, 'isUninstall' => 0, 'timestamp' => time(), 'name' => get_bloginfo( 'name' ), 'email' => get_option( 'admin_email' ), 'domain' => get_bloginfo( 'url' ), // Keep the exact payload shape from the old working UI plugin. 'wordpress_version' => $plugin_version, ]; } /** * Short Description. (use period) * * Long Description. * * @since 1.0.0 */ public static function activate() { // 1. Set redirect flag for post-activation redirect update_option('accessibility_do_redirect', true); // 2. Plugin version (from main plugin file, not this activator file) if (! function_exists('get_plugin_data')) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } // Path to main plugin file (adjust filename if needed) $main_plugin_file = plugin_dir_path(dirname(__FILE__)) . 'accessibility-assistant.php'; $plugin_data = get_plugin_data($main_plugin_file); $plugin_version = isset($plugin_data['Version']) ? $plugin_data['Version'] : ''; // 3. Mark not-installed yet update_option('accessibility_install', 0); delete_option( 'accessibility_install_error' ); // 4. Generate or reuse shop id / token $rand = time() * wp_rand(); $shopid = $rand . gmdate('m', time()) . substr(gmdate('Y', time()), 2); $token = ''; if (get_option('accessibility_shopid') && get_option('accessibility_tokken')) { $shopid = get_option('accessibility_shopid'); $token = get_option('accessibility_tokken'); } // Always persist the local shop id immediately so the plugin can operate // even if the remote install handshake fails on this environment. update_option( 'accessibility_shopid', $shopid ); if ( ! empty( $token ) ) { update_option( 'accessibility_tokken', $token ); } $init_data = self::build_install_payload( $shopid, $plugin_version ); error_log('[Accessibility Plugin] Sending install data: ' . wp_json_encode($init_data)); require_once plugin_dir_path(__FILE__) . 'class-accessibility-assistant-api.php'; $api = new Accessibility_Assistant_API( 'accessibility-assistant', $plugin_version ); $body = $api->call('/install', $init_data, 'post'); error_log('[Accessibility Plugin] API response: ' . wp_json_encode($body)); if ( is_array( $body ) && isset( $body['status'] ) && (int) $body['status'] === 200 && ! empty( $body['data'] ) && is_array( $body['data'] ) ) { $response = $body['data']; if ( ! empty( $response['shopid'] ) && ! empty( $response['token'] ) && ! empty( $response['id'] ) ) { update_option( 'accessibility_shopid', sanitize_text_field( $response['shopid'] ) ); update_option( 'accessibility_tokken', sanitize_text_field( $response['token'] ) ); update_option( 'accessibility_primaryid', sanitize_text_field( $response['id'] ) ); update_option( 'accessibility_install', 1 ); delete_option( 'accessibility_install_error' ); } else { update_option( 'accessibility_install', 0 ); update_option( 'accessibility_install_error', 'Install API returned success but missing required fields (shopid/token/id).' ); } } else { // Store a human-readable last error for debugging, but do NOT block the // plugin from working locally as long as we have a shopid. $err = 'Unable to connect to Accessibility Assistant service.'; if ( is_array( $body ) ) { if ( ! empty( $body['error'] ) && is_string( $body['error'] ) ) { $err = $body['error']; } elseif ( isset( $body['status'] ) ) { $err = 'Install API call failed (status ' . (string) $body['status'] . ').'; } } update_option( 'accessibility_install', 1 ); update_option( 'accessibility_install_error', $err ); } // 5. Set default language on activation (using i18n class) if (get_option('my_plugin_selected_language') === false) { // Make sure i18n class is available during activation require_once plugin_dir_path(__FILE__) . 'class-accessibility-assistant-i18n.php'; $i18n = new Accessibility_Assistant_i18n(); $lang_map = $i18n->get_language_map(); $site_lang = get_locale(); if (isset($lang_map[$site_lang])) { $normalized = $lang_map[$site_lang]; } elseif (isset($lang_map[substr($site_lang, 0, 2)])) { $normalized = $lang_map[substr($site_lang, 0, 2)]; } else { $normalized = $site_lang; } update_option('my_plugin_selected_language', $normalized); } } }