commitb9e9f86d39Author: caoyanyi <caoyanyi@easycorp.ltd> Date: Fri Apr 26 13:35:56 2024 +0800 * Adjust mr actions style. commit1ddb2067b2Author: hufangzhou <hufangzhou@easycorp.ltd> Date: Fri Apr 26 13:24:05 2024 +0800 * Fix bug #48463. commit94528ed5b0Author: xieqiyu <xieqiyu@easycorp.ltd> Date: Fri Apr 26 13:17:29 2024 +0800 * Fix bug#48410. commitd1b38c54f9Author: caoyanyi <caoyanyi@easycorp.ltd> Date: Fri Apr 26 13:13:38 2024 +0800 - Remove mr repos switch block. commitc94da3e17aAuthor: sunhao <sunhao@easycorp.ltd> Date: Fri Apr 26 11:30:43 2024 +0800 * my: optimize UI of manage contacts page. commit2e74f33d22Author: 宋辰轩 <songchenxuan@easycorp.ltd> Date: Fri Apr 26 11:13:16 2024 +0800 * Fix bug #48317. commit45b6beccaeAuthor: liwenrui <liwenrui@easycorp.ltd> Date: Fri Apr 26 11:13:06 2024 +0800 * handle direct client download without selecting os. commit82be78538fAuthor: wangyuting <wangyuting@easycorp.ltd> Date: Fri Apr 26 10:43:42 2024 +0800 * Fix ipd project only one execution bug. commitfaa6c605fcAuthor: liumengyi <liumengyi@easycorp.ltd> Date: Fri Apr 26 10:42:25 2024 +0800 * Fix bug #48499, modify the icon. commit5134736779Author: xieqiyu <xieqiyu@easycorp.ltd> Date: Fri Apr 26 10:41:35 2024 +0800 * Fix bug#48167. commit5ca23cd76fAuthor: liumengyi <liumengyi@easycorp.ltd> Date: Fri Apr 26 10:30:02 2024 +0800 * Fix bug #48453. commit23cde4b38eAuthor: sunhao <sunhao@easycorp.ltd> Date: Fri Apr 26 10:19:28 2024 +0800 * tutorial: fix tutorial start modal style. commit1d710e10bdAuthor: sunhao <sunhao@easycorp.ltd> Date: Fri Apr 26 10:18:40 2024 +0800 * zin: fix batch-form style in old iframe modal. commitc9092603f0Author: liumengyi <liumengyi@easycorp.ltd> Date: Fri Apr 26 10:15:27 2024 +0800 * Fix bug #48495. commitc0aeb9f69dAuthor: sunguangming <sunguangming@easycorp.ltd> Date: Fri Apr 26 10:12:39 2024 +0800 * Fix bug #48431. commit4348fd543aAuthor: 宋辰轩 <songchenxuan@easycorp.ltd> Date: Fri Apr 26 10:11:45 2024 +0800 * Fix bug #48445. commitc9df08b1a1Author: 宋辰轩 <songchenxuan@easycorp.ltd> Date: Fri Apr 26 10:07:01 2024 +0800 * Fix bug for screen browse. commitebc469c0a4Author: wangyuting <wangyuting@easycorp.ltd> Date: Fri Apr 26 09:55:44 2024 +0800 * Adjust recentproject block css. commit9337fa109aAuthor: wangyuting <wangyuting@easycorp.ltd> Date: Fri Apr 26 09:50:34 2024 +0800 * Adjust recentproject block css. commit07903733bfAuthor: 王怡栋 <wangyidong@cnezsoft.com> Date: Fri Apr 26 09:33:39 2024 +0800 * Fix bug #48473. commita347de8354Author: wangyuting <wangyuting@easycorp.ltd> Date: Fri Apr 26 09:34:29 2024 +0800 * Add progress to recentproject block. task #116976. commite6e6c6047eAuthor: xieqiyu <xieqiyu@easycorp.ltd> Date: Fri Apr 26 09:29:12 2024 +0800 * Modify the problem of code review. commita53a577b69Author: sunguangming <sunguangming@easycorp.ltd> Date: Fri Apr 26 09:13:43 2024 +0800 * Finish task #45906. commit774cb4efbcAuthor: wangyuting <wangyuting@easycorp.ltd> Date: Fri Apr 26 09:03:42 2024 +0800 * Adjust review by me data to DAO search. commit976ef156b6Author: tianshujie <tianshujie@easycorp.ltd> Date: Fri Apr 26 09:00:51 2024 +0800 * Add class for copy project button. commit36f2c24a97Author: tianshujie <tianshujie@easycorp.ltd> Date: Fri Apr 26 09:00:39 2024 +0800 * Fix bug #48480. commitae9ef45621Author: xieqiyu <xieqiyu@easycorp.ltd> Date: Thu Apr 25 21:12:27 2024 +0800 * Optimated code. commit20eefb90dcAuthor: sunhao <sunhao@easycorp.ltd> Date: Thu Apr 25 19:42:50 2024 +0800 * zin: optimize UI for loading old pages. commit56006bca4fAuthor: sunhao <sunhao@easycorp.ltd> Date: Thu Apr 25 18:18:24 2024 +0800 * theme: update themes for old pages. commit0dd32057e4Author: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 17:15:25 2024 +0800 * Modify style of productplan desc. commit272cdc4a61Author: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 17:03:07 2024 +0800 * Fix bug #48413, replace executionLang with productplanLang. commit1f0b96aab2Author: tanghucheng <tanghucheng@easycorp.ltd> Date: Thu Apr 25 16:59:05 2024 +0800 * Program in the product lines can be empty. commitfb6bb48ee6Author: 宋辰轩 <songchenxuan@easycorp.ltd> Date: Thu Apr 25 17:02:29 2024 +0800 * Remove update bi guide img file. commit66bcb21455Author: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 16:48:22 2024 +0800 * Fix bug #48464, set icon by project model. commitc5738c4129Author: 宋辰轩 <songchenxuan@easycorp.ltd> Date: Thu Apr 25 16:47:41 2024 +0800 * Fix bug for preview pivot. commitcc0a8aabceAuthor: hufangzhou <hufangzhou@easycorp.ltd> Date: Thu Apr 25 16:39:20 2024 +0800 + Add the or vision image. commit73d70324fdAuthor: hufangzhou <hufangzhou@easycorp.ltd> Date: Thu Apr 25 16:34:31 2024 +0800 * Change lang item. commita54780438aAuthor: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 16:33:11 2024 +0800 * Modify the style of bugSteps. commitff5be095b4Author: tianshujie <tianshujie@easycorp.ltd> Date: Thu Apr 25 16:32:24 2024 +0800 * Fix bug #48453. commit0432554143Author: tianshujie <tianshujie@easycorp.ltd> Date: Thu Apr 25 16:21:52 2024 +0800 + Add comment. commit9155a82131Author: caoyanyi <caoyanyi@easycorp.ltd> Date: Thu Apr 25 16:07:55 2024 +0800 * Adjust jenkins job form style. commitdc272445cfAuthor: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 15:59:31 2024 +0800 * Fix bug if the execution doesn't have the products. commit1fce0df29bAuthor: caoyanyi <caoyanyi@easycorp.ltd> Date: Thu Apr 25 15:48:41 2024 +0800 * Adjust app create tips. commita48e48394eAuthor: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 15:47:09 2024 +0800 * Fix bug #48452. commitc500f9ce58Author: tianshujie <tianshujie@easycorp.ltd> Date: Thu Apr 25 15:27:17 2024 +0800 * Fix bug #48449. commit076b33652cAuthor: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 15:11:57 2024 +0800 * Fix bug #48429, don't append relatedBugs to excludeBugs when linking bugs. commitbf59668dffAuthor: caoyanyi <caoyanyi@easycorp.ltd> Date: Fri Apr 19 11:22:22 2024 +0800 + Add page data for repo code view. commit91e83ce12bAuthor: caoyanyi <caoyanyi@easycorp.ltd> Date: Thu Apr 25 15:10:34 2024 +0800 * Adjust repo branch switch style. commit16147ac595Author: tianshujie <tianshujie@easycorp.ltd> Date: Thu Apr 25 15:09:44 2024 +0800 * Fix bug #48444. commitda77572ec8Author: wangyuting <wangyuting@easycorp.ltd> Date: Thu Apr 25 15:06:20 2024 +0800 * Adjust executionstatistic block burn. task #116977. commit73235c93c8Author: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 15:03:45 2024 +0800 * Fix bug #48436, add ztfRun to the actions in execution::testcase. commit248b65ba6aAuthor: xieqiyu <xieqiyu@easycorp.ltd> Date: Thu Apr 25 15:02:39 2024 +0800 * Fix bug#48420. commit388f54b5ecAuthor: xieqiyu <xieqiyu@easycorp.ltd> Date: Thu Apr 25 15:01:03 2024 +0800 * Fix bug#48427. commit2c4122b084Author: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 14:58:02 2024 +0800 * Fix bug #48441, keep in current tab when changing the stepsType. commitc9b094b3abAuthor: tianshujie <tianshujie@easycorp.ltd> Date: Thu Apr 25 14:58:13 2024 +0800 * Fix bug #48438. commitae10a1c686Author: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 14:54:28 2024 +0800 * Fix bug #48435, replace `$this->session` with `$app->session`. commitc81031dab9Author: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 14:49:42 2024 +0800 * Fix bug #48430, replace `{runID}`. commit0635779f1fAuthor: 王怡栋 <wangyidong@cnezsoft.com> Date: Thu Apr 25 14:48:58 2024 +0800 * Fix bug #48419. commit2b1358fb75Author: zhouxin <zhouxin@easycorp.ltd> Date: Thu Apr 25 14:46:08 2024 +0800 * Fix bug #47408. commitaef64e2c85Author: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 14:45:30 2024 +0800 * Fix bug #48423, replace `<br />` with `<p></p>`. commit392a031495Author: tianshujie <tianshujie@easycorp.ltd> Date: Thu Apr 25 14:41:55 2024 +0800 * Show the product line when the program is not selected. commit1449ea4d06Author: tanghucheng <tanghucheng@easycorp.ltd> Date: Thu Apr 25 14:41:09 2024 +0800 * Fix bug #116431. commit9ce8dfe3eeAuthor: tianshujie <tianshujie@easycorp.ltd> Date: Thu Apr 25 14:31:03 2024 +0800 * Fix bug #48433. commit62a8779806Author: sunguangming <sunguangming@easycorp.ltd> Date: Thu Apr 25 14:28:56 2024 +0800 * Add loadProductModules function. commit8ec4efde62Author: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 14:27:36 2024 +0800 * Add return type. commit035f15b16eAuthor: sunhao <sunhao@easycorp.ltd> Date: Thu Apr 25 14:21:50 2024 +0800 * disable loading effect on loading modal with same url. commit1b7aac3f6fAuthor: zhouxin <zhouxin@easycorp.ltd> Date: Thu Apr 25 14:19:34 2024 +0800 * Fix bug #47654. commit730ab12d86Author: sunhao <sunhao@easycorp.ltd> Date: Thu Apr 25 13:59:51 2024 +0800 * zin: add favicon to base page. commite7051b2d2fAuthor: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 13:58:51 2024 +0800 * Fix bug #48421, removes duplicate projects. commit3089e95041Author: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 13:43:47 2024 +0800 * Fix bug #48176. commit1409059467Author: tianshujie <tianshujie@easycorp.ltd> Date: Thu Apr 25 13:41:20 2024 +0800 * Fix bug #48418. commit6934f36b9eAuthor: zhouxin <zhouxin@easycorp.ltd> Date: Thu Apr 25 13:35:10 2024 +0800 * Remove useless method. commit908f7dd087Author: wangyuting <wangyuting@easycorp.ltd> Date: Thu Apr 25 13:30:56 2024 +0800 * Adjust teamachievement block css. task #116978. commitabb2d04bd0Author: zhouxin <zhouxin@easycorp.ltd> Date: Thu Apr 25 13:25:53 2024 +0800 * Optimize code. commit042726dd6aAuthor: tanghucheng <tanghucheng@easycorp.ltd> Date: Thu Apr 25 11:16:45 2024 +0800 * Fix bug #48143, Add $config->story->dtable->fieldList['roadmap']['width']. commitb3b3a4884bAuthor: tanghucheng <tanghucheng@easycorp.ltd> Date: Thu Apr 25 11:00:11 2024 +0800 * Fix bug #48415. commitb2878c8644Author: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 10:59:32 2024 +0800 - Remove `var_dump`. commitb8e22a5446Author: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 10:59:02 2024 +0800 * Optimize code for uploading files. commit328cf2c605Author: tianshujie <tianshujie@easycorp.ltd> Date: Thu Apr 25 10:57:27 2024 +0800 - Remove unused style. commit98f501ad66Author: sunhao <sunhao@easycorp.ltd> Date: Thu Apr 25 10:57:18 2024 +0800 * zui: update zui3 lib. commit138ae9b7bbAuthor: caoyanyi <caoyanyi@easycorp.ltd> Date: Thu Apr 25 10:55:12 2024 +0800 * Adjust repo page language. commit2a4abbde8dAuthor: 宋辰轩 <songchenxuan@easycorp.ltd> Date: Thu Apr 25 10:24:32 2024 +0800 * Fix bug #48350. commitc2c122b678Author: wangyuting <wangyuting@easycorp.ltd> Date: Thu Apr 25 10:22:08 2024 +0800 * Adjust welcome block css. task #116979. commit1cba83c80fAuthor: sunhao <sunhao@easycorp.ltd> Date: Thu Apr 25 10:21:24 2024 +0800 * kanban: optimize label style. commita92ca103b9Author: tianshujie <tianshujie@easycorp.ltd> Date: Thu Apr 25 10:18:16 2024 +0800 * Fix bug #48402. commitdecae20945Author: tianshujie <tianshujie@easycorp.ltd> Date: Thu Apr 25 10:11:24 2024 +0800 * Adjust select execution title style. commit8fc680ecc9Author: 宋辰轩 <songchenxuan@easycorp.ltd> Date: Thu Apr 25 10:03:04 2024 +0800 * Add delete file. commit0c08073647Author: tianshujie <tianshujie@easycorp.ltd> Date: Thu Apr 25 09:39:41 2024 +0800 * The date field was not validated when fixing the bug import task. commitb6aa30da6fAuthor: liyang <liyang@easycorp.ltd> Date: Thu Apr 25 09:41:02 2024 +0800 Add delete btn in import repo page. commit188bdfff90Author: liyang <liyang@easycorp.ltd> Date: Thu Apr 25 09:30:58 2024 +0800 Hide the hidden function of the imported code library page commit22e899b21fAuthor: sunguangming <sunguangming@easycorp.ltd> Date: Thu Apr 25 09:26:39 2024 +0800 * Fix bug #48372. commitdea8d5785aAuthor: tianshujie <tianshujie@easycorp.ltd> Date: Thu Apr 25 09:25:57 2024 +0800 * Remove the box when it is out of focus. commit94117eac4aAuthor: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 09:21:31 2024 +0800 * Modify testtask's order in qastatistic block. commit16558b955dAuthor: 宋辰轩 <songchenxuan@easycorp.ltd> Date: Thu Apr 25 09:18:46 2024 +0800 * Use ajaxGetOldDropMenu commiteb7f606fe5Author: hufangzhou <hufangzhou@easycorp.ltd> Date: Thu Apr 25 09:07:24 2024 +0800 * Add todo-calendar privilege to or interface. commit119fef4faeAuthor: wangyuting <wangyuting@easycorp.ltd> Date: Thu Apr 25 09:06:33 2024 +0800 * Adjust closedSetting to closeSetting. commit1179f36595Author: tanghucheng <tanghucheng@easycorp.ltd> Date: Thu Apr 25 08:58:31 2024 +0800 * Fix bug #47758, unset percent when disabled. commitb143356a55Author: sunguangming <sunguangming@easycorp.ltd> Date: Thu Apr 25 08:56:35 2024 +0800 * Fix bug #48379. commite1ec138058Author: liumengyi <liumengyi@easycorp.ltd> Date: Thu Apr 25 08:52:51 2024 +0800 * Optimize code for bug #48271. commit8ca008736aAuthor: liwenrui <liwenrui@easycorp.ltd> Date: Thu Apr 25 08:49:31 2024 +0800 * tweak again, actually only wanted to add padding to the top. commit388006b340Author: liwenrui <liwenrui@easycorp.ltd> Date: Thu Apr 25 08:49:05 2024 +0800 * tweak zeneditor to add some padding back. commit0e0121b201Author: liwenrui <liwenrui@easycorp.ltd> Date: Thu Apr 25 08:27:23 2024 +0800 * update zeneditor and remove paragraph margin within. commit5e3b42a9f3Author: sunhao <sunhao@easycorp.ltd> Date: Wed Apr 24 17:32:20 2024 +0800 * zui: update zui3 lib. commit3e543c1403Author: wangyuting <wangyuting@easycorp.ltd> Date: Wed Apr 24 17:30:35 2024 +0800 * Optimize code. commitce8e34849dAuthor: wangyuting <wangyuting@easycorp.ltd> Date: Wed Apr 24 17:29:17 2024 +0800 * Fix project menu bug. bug #48121. commitbff8da8abaAuthor: sunhao <sunhao@easycorp.ltd> Date: Wed Apr 24 17:20:38 2024 +0800 * zin: sort fields after reload form. commit01e15f6635Author: liumengyi <liumengyi@easycorp.ltd> Date: Wed Apr 24 16:53:10 2024 +0800 * Fix bug #46381. commitb89caabfceAuthor: hufangzhou <hufangzhou@easycorp.ltd> Date: Wed Apr 24 16:53:21 2024 +0800 * Adjust the default filename for export execution. commit17d5d65a17Author: liumengyi <liumengyi@easycorp.ltd> Date: Wed Apr 24 16:47:28 2024 +0800 * Fix bug #48367, get linked bugs. commit3ee2f3ea5cAuthor: 宋辰轩 <songchenxuan@easycorp.ltd> Date: Wed Apr 24 16:45:43 2024 +0800 * Fix bug for preview pivot menu. commit2c00f9a657Author: xieqiyu <xieqiyu@easycorp.ltd> Date: Wed Apr 24 16:29:25 2024 +0800 * Fix bug#48334. commit484e24fd9dAuthor: liumengyi <liumengyi@easycorp.ltd> Date: Wed Apr 24 16:24:24 2024 +0800 * Fix bug #48343. commit1aa110645cAuthor: liwenrui <liwenrui@easycorp.ltd> Date: Wed Apr 24 16:01:19 2024 +0800 * fix ai prompt menu injected multiple times, bug #48358. commita2333979b5Author: zhouxin <zhouxin@easycorp.ltd> Date: Wed Apr 24 15:59:09 2024 +0800 * Fix height of project deviation pivot. commit7a3b20222fAuthor: liumengyi <liumengyi@easycorp.ltd> Date: Wed Apr 24 15:54:16 2024 +0800 * Replace runID in testcase::browse. commitab05d56301Author: tianshujie <tianshujie@easycorp.ltd> Date: Wed Apr 24 15:45:01 2024 +0800 * No iterative project hides execution column. commitdffcd9e5c7Author: sunguangming <sunguangming@easycorp.ltd> Date: Wed Apr 24 15:46:18 2024 +0800 * Fix sql error. commit22d89bb361Author: xieqiyu <xieqiyu@easycorp.ltd> Date: Wed Apr 24 15:43:11 2024 +0800 * Fix bug#48349. commit603195b1e1Author: tianshujie <tianshujie@easycorp.ltd> Date: Wed Apr 24 15:41:27 2024 +0800 * Adjust execution column style of the build list. commit989f2b8ca5Author: liumengyi <liumengyi@easycorp.ltd> Date: Wed Apr 24 15:27:01 2024 +0800 * Fix bug #48344, set runID. commit2db2a7f9dcAuthor: caoyanyi <caoyanyi@easycorp.ltd> Date: Wed Apr 24 15:25:54 2024 +0800 - Remove gitfox for 20.0. commit3a1f824210Author: xieqiyu <xieqiyu@easycorp.ltd> Date: Wed Apr 24 15:24:46 2024 +0800 * Fix bug#48351. commitaf0b038283Author: tianshujie <tianshujie@easycorp.ltd> Date: Wed Apr 24 15:14:43 2024 +0800 * Fix bug #48348. commitd4dc98d604Author: tanghucheng <tanghucheng@easycorp.ltd> Date: Wed Apr 24 15:13:00 2024 +0800 * Fix bug #48140, Enabled child stage for ipd project. commit08e0f83941Author: tianshujie <tianshujie@easycorp.ltd> Date: Wed Apr 24 15:07:36 2024 +0800 * Adjust height of the batchcreate stakeholder page. commit8e1dfa7634Author: tianshujie <tianshujie@easycorp.ltd> Date: Wed Apr 24 14:58:29 2024 +0800 * Fix bug #48345. commit0562ebb542Author: sunguangming <sunguangming@easycorp.ltd> Date: Wed Apr 24 14:55:42 2024 +0800 * Add story pairs to search form. commit2c062163a5Author: tanghucheng <tanghucheng@easycorp.ltd> Date: Wed Apr 24 14:40:10 2024 +0800 * Fix bug #48314. commitb812069307Author: qixinzhi <qixinzhi@easycorp.ltd> Date: Wed Apr 24 06:38:51 2024 +0000 * Auto column width with cell max value length. commitf9c1a3e850Author: qixinzhi <qixinzhi@easycorp.ltd> Date: Wed Apr 24 06:38:04 2024 +0000 * Delete screen 3 scheme. commit3ffa92734fAuthor: hufangzhou <hufangzhou@easycorp.ltd> Date: Wed Apr 24 14:35:14 2024 +0800 * Fix bug #48239. commit99e1864ca8Author: liumengyi <liumengyi@easycorp.ltd> Date: Wed Apr 24 14:30:08 2024 +0800 * Fix bug #46381. commit81c3ebaa0aAuthor: caoyanyi <caoyanyi@easycorp.ltd> Date: Wed Apr 24 14:28:26 2024 +0800 + Add time fliter for commit search. commit14d5bf7cf0Author: caoyanyi <caoyanyi@easycorp.ltd> Date: Wed Apr 24 09:34:53 2024 +0800 * Adjust repo create page linkage. commit6880ef70afAuthor: liumengyi <liumengyi@easycorp.ltd> Date: Wed Apr 24 14:22:28 2024 +0800 * Replace `->size` with `set::width` and `set::height` in echarts. commitb4ea64832aAuthor: caoyanyi <caoyanyi@easycorp.ltd> Date: Wed Apr 24 14:15:13 2024 +0800 * Adjust job view repo name. commit8168c98ba8Author: tianshujie <tianshujie@easycorp.ltd> Date: Wed Apr 24 14:13:53 2024 +0800 * Fix bug #48262. commitd480ef87bdAuthor: liumengyi <liumengyi@easycorp.ltd> Date: Wed Apr 24 13:51:05 2024 +0800 * Fix bug #48025, modify id. commit003a73d5cbAuthor: liumengyi <liumengyi@easycorp.ltd> Date: Wed Apr 24 13:49:12 2024 +0800 * Fix bug #48025, modify id. commit3ad257eb53Author: daitingting <daitingting@xirangit.com> Date: Wed Apr 24 05:43:53 2024 +0000 * Fix bug #48261. commit77e6744f1dAuthor: tianshujie <tianshujie@easycorp.ltd> Date: Wed Apr 24 13:42:13 2024 +0800 * Fix bug #48294. commitf10b3f5710Author: tianshujie <tianshujie@easycorp.ltd> Date: Wed Apr 24 13:36:01 2024 +0800 * Reset code. commit068f97bc38Author: liumengyi <liumengyi@easycorp.ltd> Date: Wed Apr 24 13:18:34 2024 +0800 * Fix bug #48308, set control of stage. commit078d566703Author: wangyuting <wangyuting@easycorp.ltd> Date: Wed Apr 24 13:18:41 2024 +0800 * Adjust edit feedback data toggle. commit34738e42d9Author: zhouxin <zhouxin@easycorp.ltd> Date: Wed Apr 24 13:13:29 2024 +0800 * Adjust lang. commiteddba468d0Author: liumengyi <liumengyi@easycorp.ltd> Date: Wed Apr 24 13:07:40 2024 +0800 * Fix bug #48310. commitfc673b76ceAuthor: liumengyi <liumengyi@easycorp.ltd> Date: Wed Apr 24 11:26:49 2024 +0800 * Fix bug #48310. commit7840c1ab35Author: sunguangming <sunguangming@easycorp.ltd> Date: Wed Apr 24 11:24:40 2024 +0800 * Remove dm driver from convert date. commitd47e91c07eAuthor: hufangzhou <hufangzhou@easycorp.ltd> Date: Wed Apr 24 11:20:10 2024 +0800 * Fix bug #48293. commitd475b63a74Author: daitingting <daitingting@xirangit.com> Date: Wed Apr 24 03:16:57 2024 +0000 * Fix bug #48261. commit655cc652beAuthor: 王怡栋 <wangyidong@cnezsoft.com> Date: Wed Apr 24 11:14:54 2024 +0800 * Fix bug for select usage when install. commit425fade713Author: tianshujie <tianshujie@easycorp.ltd> Date: Wed Apr 24 11:14:19 2024 +0800 * Fix bug #48303. commit723797107bAuthor: tianshujie <tianshujie@easycorp.ltd> Date: Wed Apr 24 11:09:27 2024 +0800 * Fix bug #48303. commit6740a4c699Author: tianshujie <tianshujie@easycorp.ltd> Date: Wed Apr 24 11:06:32 2024 +0800 * Fix bug #48306. commitc42f7ad83eAuthor: zhouxin <zhouxin@easycorp.ltd> Date: Wed Apr 24 11:02:21 2024 +0800 * Fix bug #48073. commite38f2f6531Author: liumengyi <liumengyi@easycorp.ltd> Date: Wed Apr 24 10:42:42 2024 +0800 * Set search form open. commit2cb511cf52Author: 王怡栋 <wangyidong@cnezsoft.com> Date: Wed Apr 24 10:07:43 2024 +0800 * Fix error for sso module. commitf8b093e0ebAuthor: xieqiyu <xieqiyu@easycorp.ltd> Date: Wed Apr 24 10:21:37 2024 +0800 * Fix the bug of duration and BSA default value. commitc3e9c7d7cdAuthor: liumengyi <liumengyi@easycorp.ltd> Date: Wed Apr 24 10:20:25 2024 +0800 * Fix bug #48243. commitc7cf68be63Author: hufangzhou <hufangzhou@easycorp.ltd> Date: Wed Apr 24 10:17:03 2024 +0800 * Fix bug #48280, #48289. commitb9cdcf5bcdAuthor: sunhao <sunhao@easycorp.ltd> Date: Wed Apr 24 10:17:34 2024 +0800 * my: fix cannot update badges in main navbar. commit3aa9609ce2Author: tianshujie <tianshujie@easycorp.ltd> Date: Wed Apr 24 10:16:21 2024 +0800 * Fix bug #48294. commitfb26e627deAuthor: sunhao <sunhao@easycorp.ltd> Date: Wed Apr 24 10:10:56 2024 +0800 Revert "* zin: fix cannot find page method on update." This reverts commit367a4ae49d. commit63a70421edAuthor: tianshujie <tianshujie@easycorp.ltd> Date: Wed Apr 24 09:45:07 2024 +0800 * Fix bug #48271. commitc1a66b708bAuthor: sunguangming <sunguangming@easycorp.ltd> Date: Wed Apr 24 09:40:09 2024 +0800 * Modify upgrade method. commitc68b2170f9Author: 王怡栋 <wangyidong@cnezsoft.com> Date: Wed Apr 24 09:18:09 2024 +0800 * Fix for sso login from zdoo. commit580b4f170fAuthor: liumengyi <liumengyi@easycorp.ltd> Date: Wed Apr 24 09:30:37 2024 +0800 * Fix bug #48272, update program's consumed, left and progress. commit1d9791a55eAuthor: 王怡栋 <wangyidong@cnezsoft.com> Date: Tue Apr 23 17:27:07 2024 +0800 * Remove useless code. commit40f0e10c1fAuthor: caoyanyi <caoyanyi@easycorp.ltd> Date: Tue Apr 23 17:18:03 2024 +0800 * Update standard sql. # Conflicts: # db/update20.0.beta2.sql # module/block/config/feedback.php # module/block/zen.php # module/custom/lang/vi.php # module/mr/ui/browsebyexecution.html.php # module/repo/lang/de.php # module/repo/lang/en.php # module/repo/lang/fr.php # module/repo/lang/zh-cn.php # module/space/lang/de.php # module/space/lang/en.php # module/space/lang/fr.php # module/space/lang/zh-cn.php # module/space/ui/createapplication.html.php # www/js/zui3/zen-editor/index.esm.js # www/js/zui3/zen-editor/p-0aaccc7e.js # www/js/zui3/zen-editor/p-276dd30f.js # www/js/zui3/zen-editor/p-2b13cc9a.js # www/js/zui3/zen-editor/p-38d18c5d.js # www/js/zui3/zen-editor/p-3f6cad83.js # www/js/zui3/zen-editor/p-51e3a048.js # www/js/zui3/zen-editor/p-617d463f.js # www/js/zui3/zen-editor/p-62c0132e.js # www/js/zui3/zen-editor/p-6d22490c.js # www/js/zui3/zen-editor/p-a563f50b.js # www/js/zui3/zen-editor/p-bf31230c.js # www/js/zui3/zen-editor/p-c6c95773.js # www/js/zui3/zen-editor/p-d83dd3f0.js # www/js/zui3/zen-editor/p-d8bedd14.js # www/js/zui3/zen-editor/p-eaaa4129.js # www/js/zui3/zen-editor/zen-editor.esm.js
358 lines
12 KiB
PHP
358 lines
12 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
/**
|
|
* The control file of backup of ZenTaoPMS.
|
|
*
|
|
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
|
|
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
|
* @author Yidong Wang <yidong@cnezsoft.com>
|
|
* @package backup
|
|
* @version $Id$
|
|
* @link https://www.zentao.net
|
|
*/
|
|
class backup extends control
|
|
{
|
|
protected $backupPath;
|
|
|
|
/**
|
|
* __construct
|
|
*
|
|
* @param string $moduleName
|
|
* @param string $methodName
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function __construct(string $moduleName = '', string $methodName = '')
|
|
{
|
|
parent::__construct($moduleName, $methodName);
|
|
|
|
$this->backupPath = $this->backup->getBackupPath();
|
|
|
|
if($this->app->methodName != 'setting')
|
|
{
|
|
if(!is_dir($this->backupPath))
|
|
{
|
|
if(!mkdir($this->backupPath, 0777, true)) $this->view->error = sprintf($this->lang->backup->error->noWritable, dirname($this->backupPath));
|
|
}
|
|
else
|
|
{
|
|
if(!is_writable($this->backupPath)) $this->view->error = sprintf($this->lang->backup->error->noWritable, $this->backupPath);
|
|
}
|
|
if(!is_writable($this->app->getTmpRoot())) $this->view->error = sprintf($this->lang->backup->error->noWritable, $this->app->getTmpRoot());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Index
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function index()
|
|
{
|
|
$this->loadModel('action');
|
|
|
|
$backups = array();
|
|
if(empty($this->view->error)) $backups = $this->backupZen->getBackupList();
|
|
|
|
$this->view->title = $this->lang->backup->common;
|
|
$this->view->backups = $backups;
|
|
|
|
if(!is_writable($this->backupPath)) $this->view->backupError = sprintf($this->lang->backup->error->plainNoWritable, $this->backupPath);
|
|
if(!is_writable($this->app->getTmpRoot())) $this->view->backupError = sprintf($this->lang->backup->error->plainNoWritable, $this->app->getTmpRoot());
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Ajax get disk space.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function ajaxGetDiskSpace()
|
|
{
|
|
set_time_limit(0);
|
|
session_write_close();
|
|
$diskSapce = $this->backup->getDiskSpace($this->backupPath);
|
|
$diskSapce = explode(',', $diskSapce);
|
|
|
|
$space = new stdclass();
|
|
$space->freeSpace = intval($diskSapce[0]);
|
|
$space->needSpace = intval($diskSapce[1]);
|
|
|
|
echo json_encode($space);
|
|
}
|
|
|
|
/**
|
|
* Backup.
|
|
*
|
|
* @param string $reload yes|no
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function backup(string $reload = 'no')
|
|
{
|
|
if($reload == 'yes') session_write_close();
|
|
|
|
set_time_limit(0);
|
|
|
|
$fileName = date('YmdHis') . mt_rand(0, 9) . str_replace('.', '_', $this->config->version);
|
|
$result = $this->backupZen->backupSQL($fileName, $reload);
|
|
if($result['result'] == 'fail')
|
|
{
|
|
if($reload == 'yes') return print($result['message']);
|
|
printf($result['message']);
|
|
}
|
|
|
|
$nofile = str_contains($this->config->backup->setting, 'nofile');
|
|
if(!$nofile)
|
|
{
|
|
$result = $this->backupZen->backupFile($fileName, $reload);
|
|
if($result['result'] == 'fail')
|
|
{
|
|
if($reload == 'yes') return print($result['message']);
|
|
printf($result['message']);
|
|
}
|
|
|
|
if(!$this->config->inContainer)
|
|
{
|
|
$result = $this->backupZen->backupCode($fileName, $reload);
|
|
if($result['result'] == 'fail')
|
|
{
|
|
if($reload == 'yes') return print($result['message']);
|
|
printf($result['message']);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/* Delete expired backup. */
|
|
$this->backupZen->removeExpiredFiles();
|
|
|
|
if($reload == 'yes') return print($this->lang->backup->success->backup);
|
|
echo $this->lang->backup->success->backup . "\n";
|
|
}
|
|
|
|
/**
|
|
* Restore.
|
|
*
|
|
* @param string $fileName
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function restore(string $fileName)
|
|
{
|
|
set_time_limit(0);
|
|
|
|
/* Restore database. */
|
|
$result = $this->backupZen->restoreSQL($fileName);
|
|
if($result['result'] == 'fail') return $this->send($result);
|
|
|
|
/* Restore attachments. */
|
|
$result = $this->backupZen->restoreFile($fileName);
|
|
if($result['result'] == 'fail') return $this->send($result);
|
|
|
|
return $this->send(array('result' => 'success', 'closeModal' => true, 'callback' => "zui.Modal.alert('{$this->lang->backup->success->restore}').then(() => {loadCurrentPage()})"));
|
|
}
|
|
|
|
/**
|
|
* remove PHP header.
|
|
*
|
|
* @param string $fileName
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function rmPHPHeader(string $fileName)
|
|
{
|
|
if(file_exists($this->backupPath . $fileName . '.sql.php'))
|
|
{
|
|
$this->backup->removeFileHeader($this->backupPath . $fileName . '.sql.php');
|
|
rename($this->backupPath . $fileName . '.sql.php', $this->backupPath . $fileName . '.sql');
|
|
}
|
|
if(file_exists($this->backupPath . $fileName . '.file.zip.php'))
|
|
{
|
|
$this->backup->removeFileHeader($this->backupPath . $fileName . '.file.zip.php');
|
|
rename($this->backupPath . $fileName . '.file.zip.php', $this->backupPath . $fileName . '.file.zip');
|
|
}
|
|
if(file_exists($this->backupPath . $fileName . '.code.zip.php'))
|
|
{
|
|
$this->backup->removeFileHeader($this->backupPath . $fileName . '.code.zip.php');
|
|
rename($this->backupPath . $fileName . '.code.zip.php', $this->backupPath . $fileName . '.code.zip');
|
|
}
|
|
|
|
return $this->send(array('result' => 'success', 'load' => true));
|
|
}
|
|
|
|
/**
|
|
* Delete.
|
|
*
|
|
* @param string $fileName
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function delete(string $fileName)
|
|
{
|
|
foreach(glob($this->backupPath . "{$fileName}*") as $backupFile)
|
|
{
|
|
if(is_dir($backupFile))
|
|
{
|
|
$zfile = $this->app->loadClass('zfile');
|
|
$zfile->removeDir($backupFile);
|
|
$this->backup->processSummary($backupFile, 0, 0, array(), 0, 'delete');
|
|
}
|
|
elseif(!unlink($backupFile))
|
|
{
|
|
return $this->send(array('result' => 'fail', 'message' => sprintf($this->lang->backup->error->noDelete, $backupFile)));
|
|
}
|
|
}
|
|
|
|
return $this->sendSuccess(array('load' => true));
|
|
}
|
|
|
|
/**
|
|
* Change hold days.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function change()
|
|
{
|
|
if($_POST)
|
|
{
|
|
$data = fixer::input('post')->get();
|
|
$this->loadModel('setting')->setItem('system.backup.holdDays', $data->holdDays);
|
|
return $this->sendSuccess(array('load' => true, 'closeModal' => true));
|
|
}
|
|
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Setting backup
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function setting()
|
|
{
|
|
/* Check safe file. */
|
|
$statusFile = $this->loadModel('common')->checkSafeFile();
|
|
if($statusFile)
|
|
{
|
|
$this->app->loadLang('extension');
|
|
|
|
$search = $this->app->getBasePath();
|
|
$pos = strpos($statusFile, $search);
|
|
$okFile = $statusFile;
|
|
if($pos !== false) $okFile = substr_replace($statusFile, '', $pos, strlen($search));
|
|
|
|
$this->view->error = sprintf($this->lang->extension->noticeOkFile, $okFile, $statusFile);
|
|
return print($this->display());
|
|
}
|
|
|
|
if(strtolower($this->server->request_method) == "post")
|
|
{
|
|
$data = fixer::input('post')->join('setting', ',')->get();
|
|
|
|
/*save change*/
|
|
if(isset($data->holdDays)) $this->loadModel('setting')->setItem('system.backup.holdDays', $data->holdDays);
|
|
|
|
$setting = '';
|
|
if(isset($data->setting)) $setting = $data->setting;
|
|
$this->loadModel('setting')->setItem('system.backup.setting', $setting);
|
|
|
|
$settingDir = $data->settingDir;
|
|
if($settingDir)
|
|
{
|
|
$settingDir = rtrim($settingDir, DS) . DS;
|
|
if(!is_dir($settingDir) and mkdir($settingDir, 0777, true)) return $this->send(array('result' => 'fail', 'message' => $this->lang->backup->error->noCreateDir));
|
|
if(!is_writable($settingDir)) return $this->send(array('result' => 'fail', 'message' => strip_tags(sprintf($this->lang->backup->error->noWritable, $settingDir))));
|
|
if($data->settingDir == $this->app->getTmpRoot() . 'backup' . DS) $settingDir = '';
|
|
}
|
|
|
|
$this->setting->setItem('system.backup.settingDir', $settingDir);
|
|
|
|
return $this->sendSuccess(array('load' => true, 'closeModal' => true));
|
|
}
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Ajax get progress.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function ajaxGetProgress()
|
|
{
|
|
session_write_close();
|
|
|
|
$files = glob($this->backupPath . '/*.*');
|
|
rsort($files);
|
|
|
|
$fileName = basename($files[0]);
|
|
$fileName = substr($fileName, 0, strpos($fileName, '.'));
|
|
|
|
$sqlFileName = $this->backupPath . $fileName . '.sql';
|
|
if(!file_exists($sqlFileName)) $sqlFileName .= '.php';
|
|
$sqlFileName = $this->backup->getBackupFile($fileName, 'sql');
|
|
if($sqlFileName)
|
|
{
|
|
$summary = $this->backup->getBackupSummary($sqlFileName);
|
|
$message = sprintf($this->lang->backup->progressSQL, $this->backup->processFileSize($summary['size']));
|
|
}
|
|
|
|
$attachFileName = $this->backup->getBackupFile($fileName, 'file');
|
|
if($attachFileName)
|
|
{
|
|
$log = $this->backup->getBackupDirProgress($attachFileName);
|
|
if(empty($log)) return print('');
|
|
$message = sprintf($this->lang->backup->progressAttach, zget($log, 'allCount', 0), zget($log, 'count', 0));
|
|
}
|
|
|
|
$codeFileName = $this->backup->getBackupFile($fileName, 'code');
|
|
if($codeFileName)
|
|
{
|
|
$log = $this->backup->getBackupDirProgress($codeFileName);
|
|
if(empty($log)) return print('');
|
|
$message = sprintf($this->lang->backup->progressCode, zget($log, 'allCount', 0), zget($log, 'count', 0));
|
|
}
|
|
|
|
return print($message);
|
|
}
|
|
|
|
/**
|
|
* AJAX: Check the version of the backup.
|
|
*
|
|
* @param string $name
|
|
* @return void
|
|
*/
|
|
public function ajaxCheckBackupVersion($name)
|
|
{
|
|
if(!$this->config->inContainer) $this->send(array('result' => 'success', 'message' => $this->lang->backup->confirmRestore, 'canRestore' => true));
|
|
|
|
$matched = preg_match('/\d{15}(.*)$/', $name, $matches);
|
|
if ($matched == 1 && !empty($matches[1]))
|
|
{
|
|
$backupVersion = str_replace('_', '.', $matches[1]);
|
|
$compareResult = version_compare($backupVersion, $this->config->version);
|
|
switch($compareResult)
|
|
{
|
|
case -1:
|
|
$message = $this->lang->backup->notice->lowerVersion;
|
|
break;
|
|
case 1:
|
|
$message = sprintf($this->lang->backup->notice->higherVersion, $this->app->getVersionName($backupVersion));
|
|
break;
|
|
default:
|
|
$message = $this->lang->backup->confirmRestore;
|
|
}
|
|
|
|
$canRestore = $compareResult == 1 ? false : true;
|
|
$this->send(array('result' => 'success', 'message' => $message, 'canRestore' => $canRestore));
|
|
}
|
|
else
|
|
$this->send(array('result' => 'fail', 'message' => $this->lang->backup->notice->unknownVersion));
|
|
}
|
|
}
|