From 4ec2812268bf8915c389678601c894661a33c413 Mon Sep 17 00:00:00 2001 From: alves Date: Thu, 25 Dec 2025 12:10:58 +0800 Subject: [PATCH] feature add Personal Information Cross-Border Transfer Notice --- resources/web/data/text.js | 35 +++++++++++++---------- resources/web/guide/3/3.js | 46 +++++++++++++++++++++++++++++-- resources/web/guide/3/index.html | 13 +++++---- src/libslic3r/AppConfig.cpp | 7 ----- src/slic3r/GUI/GUI_App.cpp | 14 ++++++++-- src/slic3r/GUI/Preferences.cpp | 5 +++- src/slic3r/GUI/WebGuideDialog.cpp | 4 ++- 7 files changed, 90 insertions(+), 34 deletions(-) diff --git a/resources/web/data/text.js b/resources/web/data/text.js index c9cb4f088f..cea146b4fc 100644 --- a/resources/web/data/text.js +++ b/resources/web/data/text.js @@ -5,7 +5,7 @@ var LangText = { t3: "User Agreement", t4: "Disagree", t5: "Agree", - t6: "We kindly request your help to improve everyone's printing.
Come and Join our Customer Experience Improvement Program", + t6: "User Experience Improvement Program", t7: "Join our Customer Experience Improvement Program", t8: "Back", t9: "Next", @@ -49,11 +49,13 @@ var LangText = { t50: "Log out", t52: "Skip", t53: "Join", - t54: "In the 3D Printing community, we learn from each other's successes and failures to adjust our own slicing parameters and settings. Snapmaker Orca follows the same principle and uses machine learning to improve its performance from the successes and failures of the vast number of prints by our users. We are training Snapmaker Orca to be smarter by feeding them the real-world data. If you are willing, this service will access information from your error logs and usage logs, which may include information described in ", - t55: "Privacy Policy", - t56: ". We will not collect any Personal Data by which an individual can be identified directly or indirectly, including without limitation names, addresses, payment information, or phone numbers. By enabling this service, you agree to these terms and the statement about Privacy Policy.", - t57: "", - t58: "", + t54: "Snapmaker Orca will accumulate insights from the print logs (including error logs and usage logs) of a large number of users to enhance printing and software performance. If you consent, we will collect your error logs, usage logs, and other relevant information (details are subject to the description in our ", + t55: "Privacy Policy", + t56: "). After de-identifying such information, we will use it for statistics, analysis, and prediction purposes to improve our products and services, thereby providing you with a better user experience. We will not collect any personally identifiable information (PII)—whether directly or indirectly—including but not limited to names, addresses, payment information, and phone numbers. By enabling this program, you agree to these terms and the statements in our Privacy Policy.
  Certain features of our product utilize services provided by overseas vendors. If you use these features, some of your personal information may be transferred overseas. Please review our ", + t_566: "Personal Information Cross-Border Transfer Notice", + t_567: " carefully, which lists details of the overseas recipients and the measures we take to protect personal information transferred overseas.
  You may modify your participation status at any time in the Preferences settings, where you can opt out of the User Experience Improvement Program.", + t57: " Please read and agree to the User Experience Improvement Program Terms and the ", + t58: "Personal Information Cross-Border Transfer Notice", t59: ".", t60: "Europe", t61: "North America", @@ -107,8 +109,9 @@ var LangText = { t110: "Custom Filaments", t111: "Create New", t112: "Join the Program", - t113: "You may change your choice in preference anytime.", + t113: "", t114: "Device Management", + t115: "Please first check this box to agree to the Personal Information Cross-Border Transfer Notice for the User Experience Improvement Program.", orca1: "Edit Project Info", orca2: "no model information", orca3: "Stealth Mode", @@ -667,7 +670,7 @@ var LangText = { t3: "用户使用协议", t4: "拒绝", t5: "同意", - t6: "帮助提升Snapmaker Orca性能", + t6: "Snapmaker 用户体验改进计划", t7: "允许发送匿名数据", t8: "上一步", t9: "下一步", @@ -711,11 +714,13 @@ var LangText = { t50: "退出登录", t52: "忽略", t53: "同意", - t54: "在3D打印社区,我们从彼此的成功和失败中学习调整自己的切片参数和设置。Snapmaker Orca遵循同样的原则,通过机器学习的方式从大量用户打印的成功和失败中获取经验,从而改善打印性能。我们正在通过向Snapmaker Orca提供真实世界的数据来训练他们变得更聪明。如果您愿意,此服务将访问您的错误日志和使用日志中的信息,其中可能包括", - t55: "隐私政策", - t56: "中描述的信息。我们不会收集任何可以直接或间接识别个人的个人数据,包括但不限于姓名、地址、支付信息或电话号码。启用此服务即表示您同意这些条款和有关隐私政策的声明。", - t57: "", - t58: "", + t54: "Snapmaker Orca 会从大量用户的打印日志(含异常日志、使用日志)中积累经验,提升打印与软件性能。若您同意,我们将获取您的错误日志、使用日志等信息(具体以《", + t55: "隐私政策", + t56: "》描述为准),并在进行去标识化处理后,用于统计、分析和预测用途,以改进我们的产品和服务,为您提供更好的用户体验;我们不会收集任何可直接/间接识别个人的信息(包括但不限于姓名、地址、支付信息、电话号码)。启用本计划即表示您同意本条款及隐私政策声明。
  我们的部分功能使用了境外供应商的服务,如您使用该部分功能,您的部分个人信息可能被传输至境外。请仔细阅读我们的", + t_566: "《个人信息出境告知书》", + t_567: ",其中列举了境外接收方的信息以及我们如何保护被传输至境外的个人信息。
  您可以随时在偏好配置中更改,选择退出用户体验改进计划。", + t57: "请阅读并同意用户体验改进计划的", + t58: "《个人信息出境告知书》", t59: "。", t60: "欧洲", t61: "北美", @@ -769,8 +774,10 @@ var LangText = { t110: "自建材料", t111: "新建", t112: "加入该计划", - t113: "您可以随时更改您的偏好。", + t113: "", t114: "设备管理", + t115: "请先勾选此框,以同意用户体验改进计划的《个人信息出境告知书》", + t116: "", wk1: "快速入门指南", wk2: "本文介绍了Snapmaker Orca的最基本用法。它指导用户配置软件,创建项目,并逐步完成第一个打印任务。", wk3: "基于项目的工作流", diff --git a/resources/web/guide/3/3.js b/resources/web/guide/3/3.js index 379cd39441..6b2c92e16b 100644 --- a/resources/web/guide/3/3.js +++ b/resources/web/guide/3/3.js @@ -40,13 +40,33 @@ function GotoBackPage() function GotoNextPage() { + var checkbox = document.getElementById('agreeCheckbox'); + var errorTip = document.getElementById('errorTip'); + if (!checkbox.checked) { + // 未勾选复选框,显示错误提示 + errorTip.style.display = 'block'; + return; + } + + // 已勾选,隐藏错误提示并继续 + errorTip.style.display = 'none'; SendPrivacyChoice("agree"); - - window.location.href="../21/index.html"; } +function OnCheckboxChange() +{ + var checkbox = document.getElementById('agreeCheckbox'); + var errorTip = document.getElementById('errorTip'); + + // 勾选时隐藏错误提示 + if (checkbox.checked) { + errorTip.style.display = 'none'; + } + // 取消勾选时不显示错误提示(只有点击按钮时才检查) +} + function GotoSkipPage() { @@ -75,7 +95,7 @@ function OpenPrivacyPolicy() var privacyUrl = ""; - if(m_Region === "China") { + if(m_Region === "Chinese Mainland") { privacyUrl = "https://www.snapmaker.cn/privacy-policy.html"; } else { privacyUrl = "https://www.snapmaker.com/privacy-policy"; @@ -90,3 +110,23 @@ function OpenPrivacyPolicy() SendWXMessage( JSON.stringify(tSend) ); } + +function OpenCrossBorderNotice() +{ + var noticeUrl = ""; + + // 个人信息出境告知书链接 + if(m_Region === "Chinese Mainland") { + noticeUrl = "https://www.snapmaker.cn/cross-border-notice"; + } else { + noticeUrl = "https://www.snapmaker.com/cross-border-notice"; + } + + var tSend={}; + tSend['sequence_id']=Math.round(new Date() / 1000); + tSend['command']="common_openurl"; + tSend['url']=noticeUrl; + tSend['local']=m_Region + + SendWXMessage( JSON.stringify(tSend) ); +} \ No newline at end of file diff --git a/resources/web/guide/3/index.html b/resources/web/guide/3/index.html index daef8b263b..383a55a3df 100644 --- a/resources/web/guide/3/index.html +++ b/resources/web/guide/3/index.html @@ -20,12 +20,15 @@
+
+ +
-
Back
diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index a1eaf50ecc..a8d3fa620d 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -89,13 +89,6 @@ bool AppConfig::get_stealth_mode() return true; } - auto isAgree = get("app", "privacy_policy_isagree"); - - if (isAgree.empty()) - { - return true; - } - return get_bool("stealth_mode"); } diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 98ad45f5e8..b92533e3f5 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3764,9 +3764,6 @@ if (res) { } catch (std::exception &) { // wxMessageBox(e.what(), "", MB_OK); } - auto isAgree = wxGetApp().app_config->get("app", "isagree"); - - set_privacy_policy(isAgree == "true"); } void GUI_App::ShowDownNetPluginDlg() { @@ -7293,10 +7290,14 @@ void GUI_App::user_login_notify(const json& res) bool GUI_App::config_wizard_startup() { + auto isAgree = wxGetApp().app_config->get("app", "privacy_policy_isagree"); + set_privacy_policy(isAgree == "true"); + if (!m_app_conf_exists || preset_bundle->printers.only_default_printers()) { BOOST_LOG_TRIVIAL(info) << "run wizard..."; run_wizard(ConfigWizard::RR_DATA_EMPTY); BOOST_LOG_TRIVIAL(info) << "finished run wizard"; + return true; } /*else if (get_app_config()->legacy_datadir()) { // Looks like user has legacy pre-vendorbundle data directory, @@ -7308,6 +7309,13 @@ bool GUI_App::config_wizard_startup() run_wizard(ConfigWizard::RR_DATA_LEGACY); return true; }*/ + + if (isAgree.empty()) + { + run_wizard(ConfigWizard::RR_DATA_EMPTY); // Compatible with older versions + return true; + } + return false; } diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index f8f30cb809..afa96a734e 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -749,7 +749,10 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa app_config->save(); if (param == "privacy_policy_isagree") - set_privacy_policy(checkbox->GetValue()); + { + app_config->set("app", "privacy_policy_isagree", checkbox->GetValue()); + set_privacy_policy(checkbox->GetValue()); + } // if (param == "staff_pick_switch") { // bool pbool = app_config->get("staff_pick_switch") == "true"; // wxGetApp().switch_staff_pick(pbool); diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index 672bd516af..7784c408d4 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -34,6 +34,7 @@ #include #include "CreatePresetsDialog.hpp" #include +#include "bury_cfg/bury_point.hpp" using namespace nlohmann; @@ -521,7 +522,7 @@ void GuideFrame::OnScriptMessage(wxWebViewEvent &evt) std::string url = j["url"]; std::string local = j["local"]; if (!url.empty()) { - wxLaunchDefaultBrowser(url); + wxLaunchDefaultBrowser(url.c_str()); } } else if (strCmd == "network_plugin_install") { @@ -649,6 +650,7 @@ int GuideFrame::SaveProfile() // } else // m_MainPtr->app_config->set(std::string(m_SectionName.mb_str()), "privacyuse", "0"); m_MainPtr->app_config->set("app", "privacy_policy_isagree", PrivacyUse); + set_privacy_policy(PrivacyUse); m_MainPtr->app_config->set("region", m_Region); m_MainPtr->app_config->set_bool("stealth_mode", StealthMode);