From d2b4d667a0cf1a8defe68d5de516a801d012e9c8 Mon Sep 17 00:00:00 2001 From: zhangjialiang Date: Thu, 14 Aug 2025 17:00:20 +0800 Subject: [PATCH] * [task#147913,doing,2.5h] Transfer buried points to Misc module, SN cache uses cookies. --- config/filter.php | 7 ++++ config/zentaopms.php | 2 +- module/admin/config/form.php | 5 +-- module/admin/control.php | 15 +------- module/admin/js/register.ui.js | 2 +- module/admin/model.php | 34 ------------------- .../admin/test/lib/admin.unittest.class.php | 15 -------- module/admin/test/model/sendinstallevent.php | 23 ------------- module/install/control.php | 4 +++ module/install/js/common.ui.js | 2 +- module/misc/config.php | 1 + module/misc/control.php | 15 ++++++++ module/misc/model.php | 32 +++++++++++++++++ module/misc/test/model/sendinstallevent.php | 21 ++++++++++++ module/setting/model.php | 27 ++++++++------- 15 files changed, 99 insertions(+), 106 deletions(-) delete mode 100644 module/admin/test/model/sendinstallevent.php create mode 100644 module/misc/test/model/sendinstallevent.php diff --git a/config/filter.php b/config/filter.php index 9571c43b3d..4b184a8553 100755 --- a/config/filter.php +++ b/config/filter.php @@ -80,6 +80,7 @@ $filter->kanban = new stdclass(); $filter->group = new stdclass(); $filter->convert = new stdclass(); $filter->admin = new stdclass(); +$filter->install = new stdclass(); $filter->index->index = new stdclass(); $filter->block->default = new stdclass(); @@ -112,6 +113,7 @@ $filter->api->edit = new stdClass(); $filter->mail->ztcloud = new stdclass(); $filter->mail->batchdelete = new stdclass(); $filter->misc->checkupdate = new stdclass(); +$filter->misc->installevent = new stdclass(); $filter->file->download = new stdclass(); $filter->product->browse = new stdclass(); $filter->product->all = new stdclass(); @@ -210,6 +212,7 @@ $filter->admin->register = new stdclass(); $filter->admin->getcaptcha = new stdclass(); $filter->admin->sendcode = new stdclass(); $filter->admin->giftpackage = new stdclass(); +$filter->install->step5 = new stdclass(); $filter->index->index->get['open'] = 'reg::base64'; @@ -453,6 +456,10 @@ $filter->mail->batchdelete->get['idList'] = 'reg::idList'; $filter->misc->checkupdate->get['browser'] = 'code'; $filter->misc->checkupdate->get['note'] = 'reg::base64'; +$filter->misc->installevent->cookie['sn'] = 'string'; + +$filter->install->step5->cookie['sn'] = 'string'; + $filter->sso->getbindusers->get['hash'] = 'reg::md5'; $filter->sso->gettodolist->get['hash'] = 'reg::md5'; $filter->sso->getuserpairs->get['hash'] = 'reg::md5'; diff --git a/config/zentaopms.php b/config/zentaopms.php index 0b4fa09f22..7b1d22fc84 100644 --- a/config/zentaopms.php +++ b/config/zentaopms.php @@ -210,6 +210,7 @@ $config->openMethods[] = 'api.getsessionid'; $config->openMethods[] = 'misc.captcha'; $config->openMethods[] = 'misc.checkupdate'; $config->openMethods[] = 'misc.ajaxsendevent'; +$config->openMethods[] = 'misc.installevent'; $config->openMethods[] = 'sso.bind'; $config->openMethods[] = 'sso.feishuauthen'; $config->openMethods[] = 'sso.feishulogin'; @@ -227,7 +228,6 @@ $config->openMethods[] = 'admin.register'; $config->openMethods[] = 'admin.getcaptcha'; $config->openMethods[] = 'admin.sendcode'; $config->openMethods[] = 'admin.planmodal'; -$config->openMethods[] = 'admin.installevent'; /* 登录用户可以使用的方法。The methods that can be used by the logged users. */ $config->logonMethods = array(); diff --git a/module/admin/config/form.php b/module/admin/config/form.php index 7d856d0e91..062e399533 100644 --- a/module/admin/config/form.php +++ b/module/admin/config/form.php @@ -33,7 +33,4 @@ $config->admin->form->register['fingerprint'] = array('type' => 'string', 'requi $config->admin->form->giftPackage['nickname'] = array('type' => 'string', 'required' => true); $config->admin->form->giftPackage['position'] = array('type' => 'string', 'required' => true); $config->admin->form->giftPackage['company'] = array('type' => 'string', 'required' => true); -$config->admin->form->giftPackage['solvedProblems'] = array('type' => 'array', 'required' => true); - -$config->admin->form->installEvent['location'] = array('type' => 'string', 'required' => true); -$config->admin->form->installEvent['fingerprint'] = array('type' => 'string', 'required' => true); \ No newline at end of file +$config->admin->form->giftPackage['solvedProblems'] = array('type' => 'array', 'required' => true); \ No newline at end of file diff --git a/module/admin/control.php b/module/admin/control.php index 252d5f484f..3eac85a59c 100755 --- a/module/admin/control.php +++ b/module/admin/control.php @@ -582,7 +582,7 @@ class admin extends control $eventData = new stdClass(); $eventData->fingerprint = $data->fingerprint; $eventData->location = 'join-community'; - $this->admin->sendInstallEvent($eventData); + $this->loadModel('misc')->sendInstallEvent($eventData); $callBack = $this->loadModel('user')->isLogon() ? 'loadToRegister()' : 'loadToIndex()'; @@ -724,17 +724,4 @@ class admin extends control $this->view->company = $company->name; $this->display(); } - - /** - * 安装过程的事件埋点。 - * Event burial points during installation process. - * - * @access public - * @return void - */ - public function installEvent() - { - $data = form::data($this->config->admin->form->installEvent)->get(); - $this->admin->sendInstallEvent($data); - } } diff --git a/module/admin/js/register.ui.js b/module/admin/js/register.ui.js index 1fc0cdfae9..7945a4a706 100644 --- a/module/admin/js/register.ui.js +++ b/module/admin/js/register.ui.js @@ -119,6 +119,6 @@ window.ajaxInstallEvent = function(location = '') const agent = typeof(FingerprintJS) !== 'undefined' ? await FingerprintJS.load() : ''; let fingerprint = agent ? await agent.get() : ''; fingerprint = fingerprint ? fingerprint.visitorId : ''; - $.ajax({url: $.createLink('admin', 'installEvent'), type: "post", data: {fingerprint, location}, timeout: 2000}); + $.ajax({url: $.createLink('misc', 'installEvent'), type: "post", data: {fingerprint, location}, timeout: 2000}); }); } diff --git a/module/admin/model.php b/module/admin/model.php index 00a82a130e..7bb1999af4 100755 --- a/module/admin/model.php +++ b/module/admin/model.php @@ -466,38 +466,4 @@ class adminModel extends model $this->lang->switcherMenu = $output; } - - /** - * 发送安装过程埋点。 - * Sending installation process buried points. - * - * @param object $data - * @access public - * @return bool - */ - public function sendInstallEvent($data) - { - $apiRoot = $this->config->admin->register->apiRoot; - $apiURL = $apiRoot . "/zentaoevent-install.json"; - - $sn = $this->config->global->sn; - if(empty($sn)) $sn = $this->loadModel('setting')->setSN(); - - $httpData['sn'] = $sn; - $httpData['location'] = $data->location; - $httpData['fingerprint'] = $data->fingerprint; - $httpData['edition'] = $this->config->edition; - $httpData['version'] = $this->config->version; - $httpData['phpVersion'] = phpversion(); - $httpData['os'] = PHP_OS . ' ' . php_uname('m'); - $httpData['isDocker'] = file_exists('/.dockerenv'); - $httpData['installType'] = ''; - $httpData['ip'] = helper::getRemoteIP(); - - $this->loadModel('common'); - $response = common::http($apiURL, $httpData); - $response = json_decode($response); - if($response && $response->code == 200) return true; - return false; - } } diff --git a/module/admin/test/lib/admin.unittest.class.php b/module/admin/test/lib/admin.unittest.class.php index 317e34d78b..4e4828675a 100644 --- a/module/admin/test/lib/admin.unittest.class.php +++ b/module/admin/test/lib/admin.unittest.class.php @@ -80,19 +80,4 @@ class adminTest } return $link; } - - /** - * 测试发送安装过程埋点。 - * Test send install event. - * - * @param object $data - * @access public - * @return string - */ - public function sendInstallEventTest($data): string - { - $objects = $this->objectModel->sendInstallEvent($data); - if(!$objects) return 'Fail'; - return 'Success'; - } } diff --git a/module/admin/test/model/sendinstallevent.php b/module/admin/test/model/sendinstallevent.php deleted file mode 100644 index 4888415b37..0000000000 --- a/module/admin/test/model/sendinstallevent.php +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env php -sendInstallEvent(); -timeout=0 -cid=1 - -- 发送安装过程埋点 @Success - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/admin.unittest.class.php'; - -zenData('user')->gen(5); -su('admin'); - -$admin = new adminTest(); -$data = new stdClass(); -$data->fingerprint = 'ba237c362b6aad54d17e7613eac23ec1'; -$data->location = 'join-community'; -r($admin->sendInstallEvent($data)) && p() && e('Success'); //测试发送安装过程埋点是否成功 diff --git a/module/install/control.php b/module/install/control.php index 4419a8fb5c..7ad5219553 100644 --- a/module/install/control.php +++ b/module/install/control.php @@ -388,6 +388,10 @@ class install extends control $this->install->enableCache(); + /* 保存sn到数据库。*/ + /* Save SN to database. */ + $this->loadModel('setting')->setSN(); + return $this->send(array('result' => 'success', 'load' => inlink('step6'))); } diff --git a/module/install/js/common.ui.js b/module/install/js/common.ui.js index 3c4cfc3571..22633cb4f5 100644 --- a/module/install/js/common.ui.js +++ b/module/install/js/common.ui.js @@ -5,6 +5,6 @@ window.ajaxInstallEvent = function(location = '') const agent = typeof(FingerprintJS) !== 'undefined' ? await FingerprintJS.load() : ''; let fingerprint = agent ? await agent.get() : ''; fingerprint = fingerprint ? fingerprint.visitorId : ''; - $.ajax({url: $.createLink('admin', 'installEvent'), type: "post", data: {fingerprint, location}, timeout: 2000}); + $.ajax({url: $.createLink('misc', 'installEvent'), type: "post", data: {fingerprint, location}, timeout: 2000}); }); } diff --git a/module/misc/config.php b/module/misc/config.php index 455ed36153..b06585fd2a 100644 --- a/module/misc/config.php +++ b/module/misc/config.php @@ -3,4 +3,5 @@ $config->misc->api = 'https://api.zentao.net'; $config->misc->sendEventAPI = 'https://www.zentao.net/misc-event-install.html'; $config->misc->enApi = 'https://api.zentao.pm'; $config->misc->qucheng = 'https://www.qucheng.com'; +$config->misc->zentaonet = 'https://www.zentao.net'; $config->misc->featureLimit = '2024-06-14'; diff --git a/module/misc/control.php b/module/misc/control.php index 9879e8ecfd..34249c91c8 100644 --- a/module/misc/control.php +++ b/module/misc/control.php @@ -348,4 +348,19 @@ class misc extends control $api = $this->config->misc->sendEventAPI . '?action=' . $step . '&version=' . $this->config->version; commonModel::http($api, null, array(), array(), 'data', 'GET', $timeout = 2); } + + /** + * 安装过程的事件埋点。 + * Event burial points during installation process. + * + * @access public + * @return void + */ + public function installEvent() + { + $data = new stdClass(); + $data->location = $this->post->location; + $data->fingerprint = $this->post->fingerprint; + $this->misc->sendInstallEvent($data); + } } diff --git a/module/misc/model.php b/module/misc/model.php index c53949147c..679c1d0540 100644 --- a/module/misc/model.php +++ b/module/misc/model.php @@ -346,4 +346,36 @@ class miscModel extends model $this->loadModel('setting')->updateItem('system.misc.statistics', json_encode(array('date' => date('Y-m-d'), 'data' => $data))); return $data; } + + /** + * 发送安装过程埋点。 + * Sending installation process buried points. + * + * @param object $data + * @access public + * @return bool + */ + public function sendInstallEvent($data) + { + $apiRoot = $this->config->misc->zentaonet; + $apiURL = $apiRoot . "/zentaoevent-install.json"; + $sn = $this->loadModel('setting')->setSN(); + + $httpData['sn'] = $sn; + $httpData['location'] = $data->location; + $httpData['fingerprint'] = $data->fingerprint; + $httpData['edition'] = $this->config->edition; + $httpData['version'] = $this->config->version; + $httpData['phpVersion'] = phpversion(); + $httpData['os'] = PHP_OS . ' ' . php_uname('m'); + $httpData['isDocker'] = file_exists('/.dockerenv'); + $httpData['installType'] = ''; + $httpData['ip'] = helper::getRemoteIP(); + + $this->loadModel('common'); + $response = common::http($apiURL, $httpData); + $response = json_decode($response); + if($response && $response->result == 'success') return true; + return false; + } } diff --git a/module/misc/test/model/sendinstallevent.php b/module/misc/test/model/sendinstallevent.php new file mode 100644 index 0000000000..399a3644a7 --- /dev/null +++ b/module/misc/test/model/sendinstallevent.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +sendInstallEvent(); +timeout=0 +cid=1 + +- 发送安装过程埋点 @Success + +*/ + +global $tester; +$miscModel = $tester->loadModel('misc'); + +$data = new stdClass(); +$data->fingerprint = 'ba237c362b6aad54d17e7613eac23ec1'; +$data->location = 'join-community'; +r($miscModel->sendInstallEvent($data)) && p() && e('Success'); //测试发送安装过程埋点是否成功 diff --git a/module/setting/model.php b/module/setting/model.php index 5757260a4f..976b945996 100644 --- a/module/setting/model.php +++ b/module/setting/model.php @@ -324,31 +324,32 @@ class settingModel extends model */ public function setSN() { - $file = dirname(dirname(dirname(__FILE__))) . '/tmp/sn'; - $fileSn = file_get_contents($file); - if($fileSn) + $sn = $_COOKIE['sn']; + if(!isset($this->config->installed) || !$this->config->installed) { - $sn = $fileSn; + if(!$sn) $sn = ''; + if($this->snNeededUpdate($sn)) + { + $sn = $this->computeSN(); + setCookie('sn', $sn); + } + } else { - if(isset($this->config->global->sn)) + if(!$sn) { $sn = $this->getItem('owner=system&module=common§ion=global&key=sn'); if($this->snNeededUpdate($sn)) { $sn = $this->computeSN(); - $this->setItem('system.common.global.sn', $sn); } } - else - { - $sn = $this->computeSN(); - } + $this->setItem('system.common.global.sn', $sn); + if(!isset($this->config->global)) $this->config->global = new stdclass(); + $this->config->global->sn = $sn; + setCookie('sn', $sn); } - if(!isset($this->config->global)) $this->config->global = new stdclass(); - $this->config->global->sn = $sn; - file_put_contents($file, $sn); return $sn; }