From f0af10084978c15005339f25f226480c4e25dc83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?REBUILD=20=E4=BC=81=E4=B8=9A=E7=AE=A1=E7=90=86=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F?= <42044143+getrebuild@users.noreply.github.com> Date: Fri, 7 Feb 2025 11:20:03 +0800 Subject: [PATCH] Fix 3.9.3 (#861) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 记录转换预览时不显示明细导入 * 3.9.3 * msg {NOW} * be:手动备份成功后清除警告 * email * be isSelf * style --- pom.xml | 2 +- .../java/com/rebuild/core/Application.java | 4 +- .../rebuild/core/privileges/UserHelper.java | 27 ++++---- .../general/transform/RecordTransfomer39.java | 65 ++++++++++++++----- .../support/general/ContentWithFieldVars.java | 21 +++--- .../core/support/integration/SMSender.java | 21 ++++-- .../core/support/setup/DatabaseBackup.java | 2 +- .../core/support/setup/DatafileBackup.java | 6 +- .../java/com/rebuild/web/BaseController.java | 6 +- .../web/admin/ConfigurationController.java | 3 + .../metadata/ClassificationController.java | 2 +- .../commons/BarCodeGeneratorController.java | 2 +- .../rebuild/web/commons/FileDownloader.java | 2 +- .../rebuild/web/commons/MetadataGetting.java | 2 +- .../web/feeds/AnnouncementController.java | 2 +- .../web/feeds/FeedsListController.java | 2 +- .../web/general/GeneralListController.java | 2 +- .../web/general/GeneralModelController.java | 41 +----------- .../notification/NotificationController.java | 2 +- .../web/user/UserSettingsController.java | 2 +- .../web/user/signup/SignUpController.java | 3 +- .../web/admin/metadata/list-stats.html | 3 + .../web/assets/js/metadata/list-stats.js | 4 +- .../web/assets/js/metadata/picklist-editor.js | 10 +-- 24 files changed, 130 insertions(+), 106 deletions(-) diff --git a/pom.xml b/pom.xml index 7b5dd34c4..51487d96f 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ com.rebuild rebuild - 3.9.2 + 3.9.3 rebuild Building your business-systems freely! https://getrebuild.com/ diff --git a/src/main/java/com/rebuild/core/Application.java b/src/main/java/com/rebuild/core/Application.java index 3523df0be..46b1b5188 100644 --- a/src/main/java/com/rebuild/core/Application.java +++ b/src/main/java/com/rebuild/core/Application.java @@ -74,11 +74,11 @@ public class Application implements ApplicationListener /** * Rebuild Version */ - public static final String VER = "3.9.2"; + public static final String VER = "3.9.3"; /** * Rebuild Build [MAJOR]{1}[MINOR]{2}[PATCH]{2}[BUILD]{2} */ - public static final int BUILD = 3090207; + public static final int BUILD = 3090308; static { // Driver for DB diff --git a/src/main/java/com/rebuild/core/privileges/UserHelper.java b/src/main/java/com/rebuild/core/privileges/UserHelper.java index 57a040bb4..2d37a8430 100644 --- a/src/main/java/com/rebuild/core/privileges/UserHelper.java +++ b/src/main/java/com/rebuild/core/privileges/UserHelper.java @@ -65,7 +65,7 @@ public class UserHelper { try { return Application.getUserStore().getUser(userId).isAdmin(); } catch (NoMemberFoundException ex) { - log.error("No User found : " + userId); + log.error("No User found : {}", userId); } return false; } @@ -100,7 +100,7 @@ public class UserHelper { } } catch (NoMemberFoundException ex) { - log.error("No bizz found : " + bizzId); + log.error("No bizz found : {}", bizzId); } return false; } @@ -460,16 +460,21 @@ public class UserHelper { * @return */ public static boolean isSelf(ID user, ID otherUserOrAnyRecordId) { - ID createdBy = otherUserOrAnyRecordId; - if (otherUserOrAnyRecordId.getEntityCode() != EntityHelper.User) { - createdBy = getCreatedBy(otherUserOrAnyRecordId); - if (createdBy == null) return false; + try { + ID createdBy = otherUserOrAnyRecordId; + if (otherUserOrAnyRecordId.getEntityCode() != EntityHelper.User) { + createdBy = getCreatedBy(otherUserOrAnyRecordId); + if (createdBy == null) return false; + } + + if (createdBy.equals(user)) return true; + + // 所有管理员被视为同一用户 + return isAdmin(createdBy) && isAdmin(user); + } catch (Exception ex) { + log.warn("Check isSelf error : {}, {}", user, otherUserOrAnyRecordId, ex); + return false; } - - if (createdBy.equals(user)) return true; - - // 所有管理员被视为同一用户 - return isAdmin(createdBy) && isAdmin(user); } private static ID getCreatedBy(ID anyRecordId) { diff --git a/src/main/java/com/rebuild/core/service/general/transform/RecordTransfomer39.java b/src/main/java/com/rebuild/core/service/general/transform/RecordTransfomer39.java index 56187f6c3..70cd9a08e 100644 --- a/src/main/java/com/rebuild/core/service/general/transform/RecordTransfomer39.java +++ b/src/main/java/com/rebuild/core/service/general/transform/RecordTransfomer39.java @@ -21,14 +21,18 @@ import com.rebuild.core.configuration.general.FormsBuilderContextHolder; import com.rebuild.core.configuration.general.TransformManager; import com.rebuild.core.metadata.EntityHelper; import com.rebuild.core.metadata.MetadataHelper; +import com.rebuild.core.metadata.easymeta.EasyMetaFactory; import com.rebuild.core.service.general.GeneralEntityService; import com.rebuild.core.service.query.QueryHelper; import com.rebuild.core.support.CommonsLog; import lombok.extern.slf4j.Slf4j; +import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; /** * @author Zixin @@ -175,6 +179,12 @@ public class RecordTransfomer39 extends RecordTransfomer37 { } ((JSONObject) formModel).put(GeneralEntityService.HAS_DETAILS, formModelDetailsMap); + + // 明细导入 + if (targetEntity.getDetailEntity() != null) { + ((JSONObject) formModel).put("detailImports", buildDetailImports39(targetEntity)); + } + return formModel; } @@ -190,21 +200,6 @@ public class RecordTransfomer39 extends RecordTransfomer37 { transTargetRecord.removeValue(EntityHelper.OwningUser); transTargetRecord.removeValue(EntityHelper.OwningDept); } - -// if (isPreview) { -// Record existsRecordSnap = Application.getQueryFactory().recordNoFilter(targetExistsRecordId); -// for (Field field : existsRecordSnap.getEntity().getFields()) { -// EasyField easyField = EasyMetaFactory.valueOf(field); -// if (MetadataHelper.isCommonsField(field) || easyField.getDisplayType() == DisplayType.SERIES) { -// if (field.getType() == FieldType.PRIMARY) continue; -// -// String fieldName = field.getName(); -// if (EntityHelper.AutoId.equals(fieldName) || EntityHelper.QuickCode.equals(fieldName)) continue; -// -// transTargetRecord.setObjectValue(fieldName, existsRecordSnap.getObjectValue(fieldName)); -// } -// } -// } } // 获取主记录(如果是明细的话) @@ -215,4 +210,44 @@ public class RecordTransfomer39 extends RecordTransfomer37 { } return null; } + + // ~~ + + /** + * @param mainEntity + * @return + */ + public static List buildDetailImports39(Entity mainEntity) { + List alist = new ArrayList<>(); + for (Entity de : mainEntity.getDetialEntities()) { + List confImports = TransformManager.instance.getDetailImports(de.getName()); + if (!confImports.isEmpty()) { + for (ConfigBean c : confImports) { + JSONObject trans = (JSONObject) EasyMetaFactory.valueOf(c.getString("source")).toJSON(); + trans.put("transid", c.getID("id")); + trans.put("transName", c.getString("name")); + + int ifAuto = ((JSONObject) c.getJSON("config")).getIntValue("importsMode2Auto"); + if (ifAuto > 0) { + JSONArray importsFilter = ((JSONObject) c.getJSON("config")).getJSONArray("importsFilter"); + Set autoFields = new HashSet<>(); + for (Object o : importsFilter) { + String name = ((JSONArray) o).getString(0); + autoFields.add(name.split("\\.")[1]); + } + + if (!autoFields.isEmpty()) { + trans.put("auto", ifAuto); + trans.put("autoFields", autoFields); + } + } + + trans.put("detailName", de.getName()); + alist.add(trans); + } + + } + } + return alist; + } } diff --git a/src/main/java/com/rebuild/core/support/general/ContentWithFieldVars.java b/src/main/java/com/rebuild/core/support/general/ContentWithFieldVars.java index 5fbcec80e..22212db56 100644 --- a/src/main/java/com/rebuild/core/support/general/ContentWithFieldVars.java +++ b/src/main/java/com/rebuild/core/support/general/ContentWithFieldVars.java @@ -7,6 +7,7 @@ See LICENSE and COMMERCIAL in the project root for license information. package com.rebuild.core.support.general; +import cn.devezhao.commons.CalendarUtils; import cn.devezhao.persist4j.Entity; import cn.devezhao.persist4j.Record; import cn.devezhao.persist4j.engine.ID; @@ -51,14 +52,14 @@ public class ContentWithFieldVars { * @return */ public static String replaceWithRecord(String content, ID recordId) { - if (StringUtils.isBlank(content) || recordId == null) { - return content; - } + if (StringUtils.isBlank(content) || recordId == null) return content; - Entity entity = MetadataHelper.getEntity(recordId.getEntityCode()); - String pkName = entity.getPrimaryField().getName(); - // 主键占位符 + final Entity entity = MetadataHelper.getEntity(recordId.getEntityCode()); + final String pkName = entity.getPrimaryField().getName(); + + // 固定占位符 content = content.replace("{ID}", String.format("{%s}", pkName)); + content = content.replace("{NOW}", CalendarUtils.getUTCDateFormat().format(CalendarUtils.now())); Set fieldVars = new HashSet<>(); for (String field : matchsVars(content)) { @@ -84,12 +85,12 @@ public class ContentWithFieldVars { public static String replaceWithRecord(String content, Record record) { if (StringUtils.isBlank(content) || record == null) return content; - // 主键占位符 - content = content.replace("{ID}", - String.format("{%s}", record.getEntity().getPrimaryField().getName())); - final Entity entity = record.getEntity(); + // 固定占位符 + content = content.replace("{ID}", String.format("{%s}", entity.getPrimaryField().getName())); + content = content.replace("{NOW}", CalendarUtils.getUTCDateFormat().format(CalendarUtils.now())); + Map fieldVars = new HashMap<>(); for (String field : matchsVars(content)) { if (MetadataHelper.getLastJoinField(entity, field) != null) { diff --git a/src/main/java/com/rebuild/core/support/integration/SMSender.java b/src/main/java/com/rebuild/core/support/integration/SMSender.java index 23326d8e8..d76f9deaa 100644 --- a/src/main/java/com/rebuild/core/support/integration/SMSender.java +++ b/src/main/java/com/rebuild/core/support/integration/SMSender.java @@ -39,6 +39,7 @@ import org.springframework.util.Assert; import java.io.File; import java.io.IOException; +import java.util.Base64; import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -194,7 +195,7 @@ public class SMSender { String base64; try { byte[] bs = FileUtils.readFileToByteArray(a); - base64 = java.util.Base64.getEncoder().encodeToString(bs); + base64 = Base64.getEncoder().encodeToString(bs); } catch (IOException ex) { continue; } @@ -280,10 +281,22 @@ public class SMSender { if (Application.devMode()) MT_CACHE = null; if (MT_CACHE != null) return MT_CACHE.clone(); - String content = CommonsUtils.getStringOfRes("i18n/email.zh_CN.html"); - Assert.notNull(content, "Cannot load template of email"); - Document html = Jsoup.parse(content); + String content = null; + // v3.9.3 从数据目录 + File file = RebuildConfiguration.getFileOfData("email.zh_CN.html"); + if (file.exists()) { + try { + content = FileUtils.readFileToString(file, AppUtils.UTF8); + } catch (IOException ex) { + log.warn("Cannot read file of email template : {}", file, ex); + } + } + if (content == null) { + content = CommonsUtils.getStringOfRes("i18n/email.zh_CN.html"); + } + Assert.notNull(content, "Cannot read email template"); + Document html = Jsoup.parse(content); MT_CACHE = html.body(); return MT_CACHE.clone(); } diff --git a/src/main/java/com/rebuild/core/support/setup/DatabaseBackup.java b/src/main/java/com/rebuild/core/support/setup/DatabaseBackup.java index e5a7ff25c..1e0657e38 100644 --- a/src/main/java/com/rebuild/core/support/setup/DatabaseBackup.java +++ b/src/main/java/com/rebuild/core/support/setup/DatabaseBackup.java @@ -99,7 +99,7 @@ public class DatabaseBackup { log.warn("Cannot zip backup : {}", zip); } - log.info("Backup succeeded : {} ({})", dest, FileUtils.byteCountToDisplaySize(dest.length())); + log.info("Backup database succeeded : {} ({})", dest, FileUtils.byteCountToDisplaySize(dest.length())); // 恢复 // https://stackoverflow.com/questions/16735344/how-to-ignore-certain-mysql-tables-when-importing-a-database diff --git a/src/main/java/com/rebuild/core/support/setup/DatafileBackup.java b/src/main/java/com/rebuild/core/support/setup/DatafileBackup.java index 727858980..5ec335b04 100644 --- a/src/main/java/com/rebuild/core/support/setup/DatafileBackup.java +++ b/src/main/java/com/rebuild/core/support/setup/DatafileBackup.java @@ -25,10 +25,6 @@ import java.io.IOException; @Slf4j public class DatafileBackup extends DatabaseBackup { - /** - * @return - * @throws IOException - */ @Override public File backup(File backups) throws IOException { File rbdata = RebuildConfiguration.getFileOfData(""); @@ -41,7 +37,7 @@ public class DatafileBackup extends DatabaseBackup { return !("_backups".equals(name) || "_log".equals(name) || "temp".equals(name) || "rebuild.pid".equals(name)); }); - log.info("Backup succeeded : {} ({})", destZip, FileUtils.byteCountToDisplaySize(destZip.length())); + log.info("Backup files succeeded : {} ({})", destZip, FileUtils.byteCountToDisplaySize(destZip.length())); return destZip; } diff --git a/src/main/java/com/rebuild/web/BaseController.java b/src/main/java/com/rebuild/web/BaseController.java index 65e35a603..c5ff78ce8 100644 --- a/src/main/java/com/rebuild/web/BaseController.java +++ b/src/main/java/com/rebuild/web/BaseController.java @@ -117,8 +117,8 @@ public abstract class BaseController extends Controller { * @param name * @return */ - protected Integer getIntParameter(HttpServletRequest request, String name) { - return getIntParameter(request, name, null); + protected int getIntParameter(HttpServletRequest request, String name) { + return getIntParameter(request, name, 0); } /** @@ -127,7 +127,7 @@ public abstract class BaseController extends Controller { * @param defaultValue * @return */ - protected Integer getIntParameter(HttpServletRequest request, String name, Integer defaultValue) { + protected int getIntParameter(HttpServletRequest request, String name, int defaultValue) { String v = request.getParameter(name); if (StringUtils.isBlank(v)) return defaultValue; diff --git a/src/main/java/com/rebuild/web/admin/ConfigurationController.java b/src/main/java/com/rebuild/web/admin/ConfigurationController.java index 068c27d0b..79e8a13a9 100644 --- a/src/main/java/com/rebuild/web/admin/ConfigurationController.java +++ b/src/main/java/com/rebuild/web/admin/ConfigurationController.java @@ -24,6 +24,7 @@ import com.rebuild.core.support.ConfigurationItem; import com.rebuild.core.support.DataDesensitized; import com.rebuild.core.support.License; import com.rebuild.core.support.RebuildConfiguration; +import com.rebuild.core.support.SysbaseHeartbeat; import com.rebuild.core.support.i18n.Language; import com.rebuild.core.support.integration.QiniuCloud; import com.rebuild.core.support.integration.SMSender; @@ -145,6 +146,7 @@ public class ConfigurationController extends BaseController { if (type == 1 || type == 3) { try { dbFile = "_backups/" + new DatabaseBackup().backup(backups).getName(); + SysbaseHeartbeat.setItem(SysbaseHeartbeat.DatabaseBackupFail, null); } catch (Exception e) { dbFile = "ERR:" + e.getMessage(); log.error("Executing [DatabaseBackup] fails", e); @@ -153,6 +155,7 @@ public class ConfigurationController extends BaseController { if (type == 2 || type == 3) { try { fileFile = "_backups/" + new DatafileBackup().backup(backups).getName(); + SysbaseHeartbeat.setItem(SysbaseHeartbeat.DataFileBackupFail, null); } catch (Exception e) { fileFile = "ERR:" + e.getMessage(); log.error("Executing [DataFileBackup] fails", e); diff --git a/src/main/java/com/rebuild/web/admin/metadata/ClassificationController.java b/src/main/java/com/rebuild/web/admin/metadata/ClassificationController.java index abb5be6ad..25a5ec892 100644 --- a/src/main/java/com/rebuild/web/admin/metadata/ClassificationController.java +++ b/src/main/java/com/rebuild/web/admin/metadata/ClassificationController.java @@ -88,7 +88,7 @@ public class ClassificationController extends BaseController { item = EntityHelper.forUpdate(itemId, user); } else if (dataId != null) { ID parent = getIdParameter(request, "parent"); - int level = getIntParameter(request, "level", 0); + int level = getIntParameter(request, "level"); item = EntityHelper.forNew(EntityHelper.ClassificationData, user); item.setID("dataId", dataId); diff --git a/src/main/java/com/rebuild/web/commons/BarCodeGeneratorController.java b/src/main/java/com/rebuild/web/commons/BarCodeGeneratorController.java index c92cbf3c6..508761594 100644 --- a/src/main/java/com/rebuild/web/commons/BarCodeGeneratorController.java +++ b/src/main/java/com/rebuild/web/commons/BarCodeGeneratorController.java @@ -54,7 +54,7 @@ public class BarCodeGeneratorController extends BaseController { @GetMapping({"/commons/barcode/render-qr", "/commons/barcode/render"}) public void render(HttpServletRequest request, HttpServletResponse response) throws IOException { String content = getParameter(request, "t", "UNSET"); - int w = getIntParameter(request, "w", 0); + int w = getIntParameter(request, "w"); BufferedImage bi; if (request.getRequestURI().endsWith("render-qr")) { diff --git a/src/main/java/com/rebuild/web/commons/FileDownloader.java b/src/main/java/com/rebuild/web/commons/FileDownloader.java index e19c8b6fa..0741f3d36 100644 --- a/src/main/java/com/rebuild/web/commons/FileDownloader.java +++ b/src/main/java/com/rebuild/web/commons/FileDownloader.java @@ -182,7 +182,7 @@ public class FileDownloader extends BaseController { public void readRawText(HttpServletRequest request, HttpServletResponse response) throws IOException { String filepath = getParameterNotNull(request, "url"); final String charset = getParameter(request, "charset", AppUtils.UTF8); - final int cut = getIntParameter(request, "cut"); // MB + final Integer cut = getIntParameter(request, "cut"); // MB if (CommonsUtils.isExternalUrl(filepath)) { // v3.7 禁外部地址 diff --git a/src/main/java/com/rebuild/web/commons/MetadataGetting.java b/src/main/java/com/rebuild/web/commons/MetadataGetting.java index d1e1eb862..ba94225cf 100644 --- a/src/main/java/com/rebuild/web/commons/MetadataGetting.java +++ b/src/main/java/com/rebuild/web/commons/MetadataGetting.java @@ -68,7 +68,7 @@ public class MetadataGetting extends BaseController { public JSON fields(HttpServletRequest request) { Entity entity = MetadataHelper.getEntity(getParameterNotNull(request, "entity")); // 返回引用实体的字段层级 - int appendRefFields = getIntParameter(request, "deep", 0); + int appendRefFields = getIntParameter(request, "deep"); // 根据不同的 referer 返回不同的字段列表 // 返回 ID 主键字段 diff --git a/src/main/java/com/rebuild/web/feeds/AnnouncementController.java b/src/main/java/com/rebuild/web/feeds/AnnouncementController.java index d5ad8ca75..890c80416 100644 --- a/src/main/java/com/rebuild/web/feeds/AnnouncementController.java +++ b/src/main/java/com/rebuild/web/feeds/AnnouncementController.java @@ -44,7 +44,7 @@ public class AnnouncementController extends BaseController { @GetMapping("/commons/announcements") public RespBody announcementList(HttpServletRequest request) { final ID user = AppUtils.getRequestUser(request); - int fromWhere = getIntParameter(request, "from", 0); + int fromWhere = getIntParameter(request, "from"); if (fromWhere == 0) { // 1=动态页 2=首页 4=登录页 diff --git a/src/main/java/com/rebuild/web/feeds/FeedsListController.java b/src/main/java/com/rebuild/web/feeds/FeedsListController.java index 8c85674a1..8405112b4 100644 --- a/src/main/java/com/rebuild/web/feeds/FeedsListController.java +++ b/src/main/java/com/rebuild/web/feeds/FeedsListController.java @@ -80,7 +80,7 @@ public class FeedsListController extends BaseController { sqlWhere = "(1=1)"; } - int type = getIntParameter(request, "type", 0); + int type = getIntParameter(request, "type"); if (type == 1) { sqlWhere += String.format(" and exists (select feedsId from FeedsMention where ^feedsId = feedsId and user = '%s')", user); } else if (type == 2) { diff --git a/src/main/java/com/rebuild/web/general/GeneralListController.java b/src/main/java/com/rebuild/web/general/GeneralListController.java index 5baefdad1..1bacc9bb5 100644 --- a/src/main/java/com/rebuild/web/general/GeneralListController.java +++ b/src/main/java/com/rebuild/web/general/GeneralListController.java @@ -72,7 +72,7 @@ public class GeneralListController extends EntityController { final EasyEntity easyEntity = EasyMetaFactory.valueOf(listEntity); int listMode = ObjectUtils.toInt(easyEntity.getExtraAttr(EasyEntityConfigProps.ADVLIST_MODE), 1); - int listModeForce = getIntParameter(request, "mode", 0); + int listModeForce = getIntParameter(request, "mode"); if (listModeForce >= 1 && listModeForce <= 3) listMode = listModeForce; String listPage = listEntity.getMainEntity() != null ? "/general/detail-list" : "/general/record-list"; if (listMode == 2) listPage = "/general/record-list2"; // Mode2 diff --git a/src/main/java/com/rebuild/web/general/GeneralModelController.java b/src/main/java/com/rebuild/web/general/GeneralModelController.java index 1eb9520fa..b7f598773 100644 --- a/src/main/java/com/rebuild/web/general/GeneralModelController.java +++ b/src/main/java/com/rebuild/web/general/GeneralModelController.java @@ -24,8 +24,8 @@ import com.rebuild.core.configuration.general.TransformManager; import com.rebuild.core.configuration.general.ViewAddonsManager; import com.rebuild.core.metadata.EntityHelper; import com.rebuild.core.metadata.MetadataHelper; -import com.rebuild.core.metadata.easymeta.EasyMetaFactory; import com.rebuild.core.privileges.UserHelper; +import com.rebuild.core.service.general.transform.RecordTransfomer39; import com.rebuild.core.service.query.QueryHelper; import com.rebuild.core.support.ConfigurationItem; import com.rebuild.core.support.RebuildConfiguration; @@ -43,13 +43,10 @@ import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Set; /** * 表单/视图 @@ -149,41 +146,9 @@ public class GeneralModelController extends EntityController { FormsBuilder.instance.setFormInitialValue(modelEntity, model, (JSONObject) initialVal); } - // v3.1 明细导入配置 - // v3.4 FIXME ND只有第一个实体支持转换 - // v3.7 ND + // 明细导入 if (modelEntity.getDetailEntity() != null) { - List alist = new ArrayList<>(); - for (Entity de : modelEntity.getDetialEntities()) { - List confImports = TransformManager.instance.getDetailImports(de.getName()); - if (!confImports.isEmpty()) { - for (ConfigBean c : confImports) { - JSONObject trans = (JSONObject) EasyMetaFactory.valueOf(c.getString("source")).toJSON(); - trans.put("transid", c.getID("id")); - trans.put("transName", c.getString("name")); - - int ifAuto = ((JSONObject) c.getJSON("config")).getIntValue("importsMode2Auto"); - if (ifAuto > 0) { - JSONArray importsFilter = ((JSONObject) c.getJSON("config")).getJSONArray("importsFilter"); - Set autoFields = new HashSet<>(); - for (Object o : importsFilter) { - String name = ((JSONArray) o).getString(0); - autoFields.add(name.split("\\.")[1]); - } - - if (!autoFields.isEmpty()) { - trans.put("auto", ifAuto); - trans.put("autoFields", autoFields); - } - } - - trans.put("detailName", de.getName()); - alist.add(trans); - } - - } - ((JSONObject) model).put("detailImports", alist); - } + ((JSONObject) model).put("detailImports", RecordTransfomer39.buildDetailImports39(modelEntity)); } return model; diff --git a/src/main/java/com/rebuild/web/notification/NotificationController.java b/src/main/java/com/rebuild/web/notification/NotificationController.java index 9b89cb6f9..b6e9fe001 100644 --- a/src/main/java/com/rebuild/web/notification/NotificationController.java +++ b/src/main/java/com/rebuild/web/notification/NotificationController.java @@ -101,7 +101,7 @@ public class NotificationController extends BaseController { final ID user = getRequestUser(request); int pn = getIntParameter(request, "pageNo", 1); int ps = getIntParameter(request, "pageSize", 40); - int type = getIntParameter(request, "type", 0); + int type = getIntParameter(request, "type"); boolean preview = getBoolParameter(request, "preview"); String sql = "select fromUser,message,createdOn,unread,messageId,relatedRecord,type from Notification" + diff --git a/src/main/java/com/rebuild/web/user/UserSettingsController.java b/src/main/java/com/rebuild/web/user/UserSettingsController.java index c2f7dabd1..9e95fcb6c 100644 --- a/src/main/java/com/rebuild/web/user/UserSettingsController.java +++ b/src/main/java/com/rebuild/web/user/UserSettingsController.java @@ -198,7 +198,7 @@ public class UserSettingsController extends BaseController { @PostMapping("/cancel-external-user") public RespBody cancelExternalUser(HttpServletRequest request) { - int appType = getIntParameter(request, "type", 0); + int appType = getIntParameter(request, "type"); // 1=Dingtalk, 2=Wxwork, 3=Feishu String appId = appType == 1 ? RebuildConfiguration.get(ConfigurationItem.DingtalkCorpid) diff --git a/src/main/java/com/rebuild/web/user/signup/SignUpController.java b/src/main/java/com/rebuild/web/user/signup/SignUpController.java index 2b5276ab4..9df832304 100644 --- a/src/main/java/com/rebuild/web/user/signup/SignUpController.java +++ b/src/main/java/com/rebuild/web/user/signup/SignUpController.java @@ -156,9 +156,8 @@ public class SignUpController extends BaseController { public RespBody checkoutName(HttpServletRequest request) { String fullName = getParameterNotNull(request, "fullName"); - //noinspection UnnecessaryUnicodeEscape - fullName = fullName.replaceAll("[^a-zA-Z0-9\u4e00-\u9fa5]", ""); String loginName = HanLP.convertToPinyinString(fullName, "", false); + loginName = loginName.replaceAll("[^a-zA-Z0-9]", ""); if (loginName.length() > 20) { loginName = loginName.substring(0, 20); } diff --git a/src/main/resources/web/admin/metadata/list-stats.html b/src/main/resources/web/admin/metadata/list-stats.html index ead47db09..bba258ee6 100644 --- a/src/main/resources/web/admin/metadata/list-stats.html +++ b/src/main/resources/web/admin/metadata/list-stats.html @@ -46,6 +46,9 @@ font-style: italic; color: #999; } + .modal.rbalert .modal-content { + margin: 13px auto; + } diff --git a/src/main/resources/web/assets/js/metadata/list-stats.js b/src/main/resources/web/assets/js/metadata/list-stats.js index bc7ec194f..c93c45b3b 100644 --- a/src/main/resources/web/assets/js/metadata/list-stats.js +++ b/src/main/resources/web/assets/js/metadata/list-stats.js @@ -173,7 +173,9 @@ class ShowStyles2 extends ShowStyles { // init if (this.props.color) { $cs.find(`a[data-color="${this.props.color}"]`).trigger('click') - $('.rbcolors >input').val(this.props.color) + $('.rbcolors>input').val(this.props.color) + } else { + $('.rbcolors>a:eq(0)').trigger('click') } } diff --git a/src/main/resources/web/assets/js/metadata/picklist-editor.js b/src/main/resources/web/assets/js/metadata/picklist-editor.js index ac9a9888a..804d35e92 100644 --- a/src/main/resources/web/assets/js/metadata/picklist-editor.js +++ b/src/main/resources/web/assets/js/metadata/picklist-editor.js @@ -55,7 +55,7 @@ $(document).ready(() => { } const id = $('.J_text').attr('attr-id') - const color = $('.rbcolors >a>i').parent().data('color') || _color || '' + const color = $('.rbcolors>a>i').parent().data('color') || _color || '' let exists = null $('.J_config .dd3-content, .unset-list .dd-handle>span').each(function () { @@ -95,7 +95,7 @@ $(document).ready(() => { // Reset $('.J_text').val('').removeAttr('data-key') $('.J_confirm').text($L('添加')) - $('.rbcolors >a>i').remove() + $('.rbcolors>a>i').remove() $('.J_config').parent().scrollTop(9999) _color = null @@ -176,8 +176,10 @@ render_item_after = function (item, data) { data[3] = item.attr('data-color') if (data[3]) { - $(`.rbcolors >a[data-color="${data[3]}"]`).trigger('click') - $('.rbcolors >input').val(data[3]) + $(`.rbcolors>a[data-color="${data[3]}"]`).trigger('click') + $('.rbcolors>input').val(data[3]) + } else { + $('.rbcolors>a>i').remove() } })