From f2fcf329cea64d71c671f1ab17f17d1634d1464d Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 월, 07 3월 2022 17:08:23 +0900 Subject: [PATCH] - API로 이슈 추가 시 하위이슈처리기준 항목으로 동일한 업체 정보로 이슈 생성하여 하위이슈로 넣기 - 업체 테이블에 ip_start, ip_end 컬럼 추가 --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 153 ++++++++++++--- src/main/java/kr/wisestone/owl/util/ConvertUtil.java | 15 + src/main/java/kr/wisestone/owl/mapper/CompanyFieldMapper.java | 6 src/main/java/kr/wisestone/owl/domain/CompanyField.java | 18 + src/main/resources/mybatis/query-template/companyField-template.xml | 56 +++++ src/main/webapp/scripts/app/companyField/companyFieldModify.controller.js | 18 + src/main/webapp/scripts/app/companyField/companyFieldList.controller.js | 16 + src/main/webapp/scripts/app/companyField/companyFieldAdd.controller.js | 14 + src/main/java/kr/wisestone/owl/vo/CompanyFieldVo.java | 27 ++ src/main/java/kr/wisestone/owl/constant/MsgConstants.java | 2 src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties | 2 src/main/webapp/views/companyField/companyFieldModify.html | 51 ++++ src/main/webapp/assets/styles/main.css | 4 src/main/java/kr/wisestone/owl/web/condition/CompanyFieldCondition.java | 16 + src/main/resources/migration/V1_9__alter_data.sql | 4 src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java | 114 +++++++++- src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java | 18 + src/main/webapp/i18n/ko/global.json | 5 src/main/webapp/WEB-INF/i18n/code_ko_KR.properties | 2 src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js | 6 src/main/webapp/views/companyField/companyFieldAdd.html | 47 ++++ src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java | 3 22 files changed, 538 insertions(+), 59 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java index a63f7bd..9e00613 100644 --- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java +++ b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java @@ -288,6 +288,8 @@ public static final String CODE_NOT_INVALID = "CODE_NOT_INVALID"; // 肄붾뱶紐낆뿉�뒗 �듅�닔臾몄옄瑜� �엯�젰 �븷 �닔 �뾾�뒿�땲�떎. public static final String TEL_NOT_INVALID = "TEL_NOT_INVALID"; // �뿰�씫泥섏뿉�뒗 �닽�옄留� �삉�뒗 �닽�옄 + �븯�씠�뵂('-')留� �엯�젰 �븷 �닔 �엳�뒿�땲�떎. public static final String EMAIL_NOT_INVALID = "EMAIL_NOT_INVALID"; // �씠硫붿씪 �삎�떇�씠 留욎� �븡�뒿�땲�떎. + public static final String IP_NOT_INVALID = "IP_NOT_INVALID"; // IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎. + public static final String IP_START_NOT_LARGER_THAN_END = "IP_START_NOT_LARGER_THAN_END"; // �떆�옉 IP媛� �걹 IP 蹂대떎 �겢 �닔 �뾾�뒿�땲�떎. public static final String PROJECT_NOT_INCLUDE_DEPARTMENT = "PROJECT_NOT_INCLUDE_DEPARTMENT"; // �꽑�깮�븳 遺��꽌 以� �봽濡쒖젥�듃�뿉 李몄뿬�븯怨� �엳吏� �븡�� 遺��꽌媛� �엳�뒿�땲�떎. public static final String PROJECT_DEPARTMENT_NOT_EQUAL_WORKFLOW = "PROJECT_DEPARTMENT_NOT_EQUAL_WORKFLOW"; // �빐�떦 �봽濡쒖젥�듃�뿉 �냽�빐�엳�뒗 �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌�뒗 �봽濡쒖젥�듃�쓽 �떞�떦遺��꽌�뿉�꽌 �젣�쇅�떆�궗 �닔 �뾾�뒿�땲�떎. diff --git a/src/main/java/kr/wisestone/owl/domain/CompanyField.java b/src/main/java/kr/wisestone/owl/domain/CompanyField.java index db28cbc..9d2ee72 100644 --- a/src/main/java/kr/wisestone/owl/domain/CompanyField.java +++ b/src/main/java/kr/wisestone/owl/domain/CompanyField.java @@ -14,6 +14,8 @@ private String manager; private String tel; private String url; + private String ipStart; + private String ipEnd; private String email; private String memo; private Long ispId; @@ -84,6 +86,22 @@ this.url = url; } + public String getIpStart() { + return ipStart; + } + + public void setIpStart(String ipStart) { + this.ipStart = ipStart; + } + + public String getIpEnd() { + return ipEnd; + } + + public void setIpEnd(String ipEnd) { + this.ipEnd = ipEnd; + } + public Long getIspId() { return ispId; } diff --git a/src/main/java/kr/wisestone/owl/mapper/CompanyFieldMapper.java b/src/main/java/kr/wisestone/owl/mapper/CompanyFieldMapper.java index 1cb87aa..4632105 100644 --- a/src/main/java/kr/wisestone/owl/mapper/CompanyFieldMapper.java +++ b/src/main/java/kr/wisestone/owl/mapper/CompanyFieldMapper.java @@ -1,5 +1,6 @@ package kr.wisestone.owl.mapper; +import kr.wisestone.owl.domain.CompanyField; import kr.wisestone.owl.web.condition.CompanyFieldCondition; import org.springframework.stereotype.Repository; @@ -18,4 +19,9 @@ List<Map<String, Object>> findEvent(); Long findByCompany(Long id); + + List<CompanyField> findByUrls(CompanyFieldCondition companyFieldCondition); + + List<CompanyField> findByUrlsAndIdNot(CompanyFieldCondition companyFieldCondition); + } diff --git a/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java index 6f5da98..9b50065 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java @@ -84,6 +84,11 @@ // �뾽泥대챸 以묐났 泥댄겕 this.verifyTitle(companyFieldForm.getName(), null); + if (companyFieldForm.getIpStart() != null && companyFieldForm.getIpEnd() != null) { + // �븘�씠�뵾 �쑀�슚�꽦 泥댄겕 + this.verifyIp(companyFieldForm.getIpStart(), companyFieldForm.getIpEnd()); + } + if (companyFieldForm.getUrl() != null) { // url �쑀�슚�꽦 泥댄겕 this.verifyUrl(companyFieldForm.getUrl(), null); @@ -110,6 +115,29 @@ return companyField; } + /** + * IP �쑀�슚�꽦 泥댄겕 + * @param ip String + */ + private void verifyIp(String ip, String ip2) { + if (ip2 == null) { + if (!StringUtils.isEmpty(ip)) { + if (!Pattern.matches("^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\" + + ".(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$", ip)) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.IP_NOT_INVALID)); + } + } + } else { + if (!StringUtils.isEmpty(ip)) { + long ipStart = ConvertUtil.ipToLong(ip); + long ipEnd = ConvertUtil.ipToLong(ip2); + if (ipEnd < ipStart) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.IP_START_NOT_LARGER_THAN_END)); + } + } + } + } + // url �쑀�슚�꽦 泥댄겕 private void verifyUrl(String url, Long id) { /*if (StringUtils.isEmpty(url)) { @@ -117,14 +145,33 @@ this.messageAccessor.getMessage(MsgConstants.COMPANY_NOT_URL)); }*/ if (!StringUtils.isEmpty(url)) { - CompanyField companyField; - if(id == null){ - companyField = this.companyFieldRepository.findByUrl(url); + List<CompanyField> companyFieldList = Lists.newArrayList(); + CompanyFieldCondition condition = new CompanyFieldCondition(); + String[] urlArr = null; + List<String> urls = Lists.newArrayList(); + + if (url.contains(" ")) { + url = url.replace(" ",""); + } + if (url.contains(",")) { + urlArr = url.split(","); + urls.addAll(Arrays.asList(urlArr)); } else { - companyField = this.companyFieldRepository.findByUrlAndIdNot(url,id); + urls.add(url); } - if (companyField != null) { + if (urls.size() > 0) { + condition.setUrl(urls); + + if(id == null){ + companyFieldList = this.companyFieldMapper.findByUrls(condition); + } else { + condition.setId(id); + companyFieldList = this.companyFieldMapper.findByUrlsAndIdNot(condition); + } + } + + if (companyFieldList != null && companyFieldList.size() > 0) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.COMPANY_USED_URL)); } @@ -286,6 +333,8 @@ excelInfo.setFileName(this.messageAccessor.message("common.registerExcelCompanyField")); // �뿊��濡� �뾽泥� �벑濡앺븯湲� excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyName"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // �뾽泥대챸 excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyUrl"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // url + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyIpStart"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // ip �떆�옉 二쇱냼 + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyIpEnd"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // ip 醫낅즺 二쇱냼 excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("isp.ispName"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // isp紐� excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("Hosting.HostingName"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // �샇�뒪�똿紐� excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyTel"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // �뿰�씫泥� @@ -422,6 +471,8 @@ if (rowIndex > 1) { // �뾽泥대줈 �벑濡앺븯湲� �쐞�빐 CompanyFieldForm �뿉 �뜲�씠�꽣瑜� �뀑�똿�븳�떎. CompanyFieldForm newCompanyFieldForm = this.setCompanyFieldFormToExcelField(row, (rowIndex + 1), ispFieldMaps, hostingFieldMaps, companyTypeMaps, parentSectorMaps, childSectorMaps, regionMaps, statusMaps, headers); + // ip �쑀�슚�꽦 泥댄겕 + this.verifyIp(newCompanyFieldForm.getIpStart(), newCompanyFieldForm.getIpEnd()); companyFieldForms.add(newCompanyFieldForm); } @@ -526,63 +577,95 @@ break; case 2: + // ip�떆�옉二쇱냼 + this.setCompanyFormIpStart(cellStr, companyFieldForm, isNull); + break; + + case 3: + // ip醫낅즺二쇱냼 + this.setCompanyFormIpEnd(cellStr, companyFieldForm, isNull); + break; + + case 4: // isp紐� this.setCompanyFormIspName(cellStr, ispFieldMaps, companyFieldForm, rowIndex, isNull); break; - case 3: + case 5: // �샇�뒪�똿紐� this.setCompanyFormHostingName(cellStr, hostingFieldMaps, companyFieldForm, rowIndex, isNull); break; - case 4: + case 6: // �뿰�씫泥� telTypeCheck(cell, rowIndex); this.setCompanyFormTel(cellStr, companyFieldForm, isNull); break; - case 5: + case 7: // �씠硫붿씪 this.setCompanyFormEmail(cellStr, companyFieldForm, isNull); break; - case 6: + case 8: // �떞�떦�옄 this.setCompanyFormManager(cellStr, companyFieldForm, isNull); break; - case 7: + case 9: // 湲곗뾽援щ텇 this.setCompanyFormCompanyType(cellStr, companyTypeMaps, companyFieldForm, rowIndex, isNull); break; - case 8: + case 10: // �뾽醫�(��遺꾨쪟) this.setCompanyFormParentSector(cellStr, parentSectorMaps, companyFieldForm, rowIndex, isNull); break; - case 9: + case 11: // �뾽醫�(以묐텇瑜�) this.setCompanyFormChildSector(cellStr, childSectorMaps, companyFieldForm, rowIndex, isNull); break; - case 10: + case 12: // 吏��뿭 this.setCompanyFormRegion(cellStr, regionMaps, companyFieldForm, rowIndex, isNull); break; - case 11: + case 13: // �긽�깭 this.setCompanyFormStatus(cellStr, statusMaps, companyFieldForm, isNull); break; - case 12: + case 14: // 鍮꾧퀬 this.setCompanyFormMemo(cellStr, companyFieldForm, isNull); } } return companyFieldForm; + } + + private void setCompanyFormIpEnd(String ipEnd, CompanyFieldForm companyFieldForm, boolean isNull) { + if (!isNull) { + if (ipEnd.contains(" ")) { + ipEnd = ipEnd.replace(" ", ""); + } + this.verifyIp(ipEnd, null); //ip �쑀�슚�꽦 寃��궗 + + companyFieldForm.setIpEnd(ipEnd); + } + } + + private void setCompanyFormIpStart(String ipStart, CompanyFieldForm companyFieldForm, boolean isNull) { + if (!isNull) { + if (ipStart.contains(" ")) { + ipStart = ipStart.replace(" ", ""); + } + this.verifyIp(ipStart, null); //ip �쑀�슚�꽦 寃��궗 + + companyFieldForm.setIpStart(ipStart); + } } private void setCompanyFormMemo(String cellStr, CompanyFieldForm companyFieldForm, boolean isNull) { @@ -823,6 +906,7 @@ excelInfo.addAttrInfos(new ExportExcelAttrVo("tel", this.messageAccessor.message("companyField.companyTel"), 10, ExportExcelAttrVo.ALIGN_CENTER)); excelInfo.addAttrInfos(new ExportExcelAttrVo("email", this.messageAccessor.message("companyField.companyEmail"), 10, ExportExcelAttrVo.ALIGN_CENTER)); excelInfo.addAttrInfos(new ExportExcelAttrVo("url", this.messageAccessor.message("companyField.companyUrl"), 10, ExportExcelAttrVo.ALIGN_CENTER)); + excelInfo.addAttrInfos(new ExportExcelAttrVo("ipRange", this.messageAccessor.message("companyField.companyIp"), 10, ExportExcelAttrVo.ALIGN_CENTER)); excelInfo.addAttrInfos(new ExportExcelAttrVo("companyTypeName", this.messageAccessor.message("companyField.companyTypeName"), 10, ExportExcelAttrVo.ALIGN_CENTER)); excelInfo.addAttrInfos(new ExportExcelAttrVo("parentSectorName", this.messageAccessor.message("companyField.parentSectorName"), 10, ExportExcelAttrVo.ALIGN_CENTER)); excelInfo.addAttrInfos(new ExportExcelAttrVo("childSectorName", this.messageAccessor.message("companyField.childSectorName"), 10, ExportExcelAttrVo.ALIGN_CENTER)); diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java index 08c1f04..24a2655 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java @@ -556,6 +556,7 @@ // �뾽泥� �젙蹂� 蹂�寃� �젙蹂대�� 湲곕줉�븳�떎. @Override + @Transactional public void detectIssueCompany(IssueHistoryType type, Map<String, Object> param, CompanyFieldForm companyFieldForm, IssueCompany issueCompany, StringBuilder description) { Long companyFieldId = 0L; Long id = 0L; @@ -614,7 +615,7 @@ companyFieldId = issueCompany.getCompanyField().getId(); } - if (type == IssueHistoryType.ADD) { //異붽� �븷 寃쎌슦 + if (type == IssueHistoryType.ADD && issueCompany.getCompanyField() != null) { //異붽� �븷 寃쎌슦 description.append("<span translate=\"issue.issueCompanyAddHistory\">�뾽泥� �젙蹂닿� 異붽��릺�뿀�뒿�땲�떎. </span>"); description.append("<span class=\"text-primary bold\"> > " + issueCompany.getCompanyField().getName() + "</span>"); } else if (type == IssueHistoryType.MODIFY) { //�닔�젙 �븷 寃쎌슦 diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java index e5c057b..058e7b7 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -310,7 +310,7 @@ } // 以묐났�맂 �긽�쐞 �씠�뒋寃��깋 - List<Issue> issues = this.findIssue(issueApiForm, customFieldApiOverlaps, user.getId()); + List<Issue> issues = this.findIssue(issueApiForm, issueForm, customFieldApiOverlaps, user.getId()); int size = issues.size(); if (size > 0) { Issue targetIssue = issues.get(0); @@ -327,7 +327,6 @@ // �궗�슜�옄 �젙�쓽 �븘�뱶 �꽕�젙 issueForm.setIssueCustomFields(issueApiForm.getCustomFieldValues()); // 媛숈� �룄硫붿씤 �뾽泥� 李얘린 - this.findCompanyField(issueForm); // api �엯�젰媛� �쟻�슜 ConvertUtil.copyProperties(issueApiForm, issueForm); @@ -339,10 +338,15 @@ } } + /** + * �룄硫붿씤�씠 �룞�씪�븳 �뾽泥� 李얘린 + * @param issueForm IssueForm + * @return IssueForm + */ private IssueForm findCompanyField(IssueForm issueForm) { if(issueForm.getIssueCustomFields() != null && issueForm.getIssueCustomFields().size() > 0) { CompanyFieldCondition condition = new CompanyFieldCondition(); - List<Map<String, Object>> companyFields = this.companyFieldService.find(condition); + List<Map<String, Object>> companyFields = Lists.newArrayList(); List<Map<String, Object>> issueCompanyFields = Lists.newArrayList(); List<Map<String, Object>> issueIspFields = Lists.newArrayList(); List<Map<String, Object>> issueHostingFields = Lists.newArrayList(); @@ -350,27 +354,36 @@ for (Map<String, Object> issueCustomField : issueForm.getIssueCustomFields()) { Long customFieldId = MapUtil.getLong(issueCustomField, "customFieldId"); CustomField customField = this.customFieldService.getCustomField(customFieldId); - if(customField != null && customField.getCustomFieldType().toString().equals("SITE") && customField.getName().equals("�룄硫붿씤")) { + if(customField != null && customField.getCustomFieldType().equals(SITE) && customField.getName().equals("�룄硫붿씤")) { String useValue = issueCustomField.get("useValue").toString(); + String[] urlArr = null; + List<String> urls = Lists.newArrayList(); + if (useValue.contains(",")) { + urlArr = useValue.split(","); + urls.addAll(Arrays.asList(urlArr)); + } else { + urls.add(useValue); + } + condition.setUrl(urls); + companyFields = this.companyFieldService.find(condition); + if(companyFields != null && companyFields.size() > 0) { for (Map<String, Object> companyField : companyFields) { CompanyFieldVo companyFieldVo = ConvertUtil.convertMapToClass(companyField, CompanyFieldVo.class); - if(companyFieldVo.getUrl() != null && useValue.equals(companyFieldVo.getUrl())) { - companyField.put("companyId", companyField.get("id")); - issueCompanyFields.add(companyField); - if(companyFieldVo.getIspId() != null && companyFieldVo.getIspId() != -1) { - Map<String, Object> ispField = this.ispFieldService.find(companyFieldVo.getIspId()); - if (ispField != null) { - ispField.put("ispId", ispField.get("id")); - issueIspFields.add(ispField); - } + companyField.put("companyId", companyField.get("id")); + issueCompanyFields.add(companyField); + if(companyFieldVo.getIspId() != null && companyFieldVo.getIspId() != -1) { + Map<String, Object> ispField = this.ispFieldService.find(companyFieldVo.getIspId()); + if (ispField != null) { + ispField.put("ispId", ispField.get("id")); + issueIspFields.add(ispField); } - if(companyFieldVo.getHostingId() != null && companyFieldVo.getHostingId() != -1) { - Map<String, Object> hostingField = this.hostingFieldService.find(companyFieldVo.getHostingId()); - if (hostingField != null) { - hostingField.put("hostingId", hostingField.get("id")); - issueHostingFields.add(hostingField); - } + } + if(companyFieldVo.getHostingId() != null && companyFieldVo.getHostingId() != -1) { + Map<String, Object> hostingField = this.hostingFieldService.find(companyFieldVo.getHostingId()); + if (hostingField != null) { + hostingField.put("hostingId", hostingField.get("id")); + issueHostingFields.add(hostingField); } } } @@ -383,6 +396,41 @@ } return issueForm; + } + + /** + * 議곌굔�뿉 留욌뒗 �뙆�듃�꼫 �젙蹂� 李얘린 + * @param condition CompanyFieldCondition + * @param issueCompanyFields List<Map<String, Object>> + * @param issueIspFields List<Map<String, Object>> + * @param issueHostingFields List<Map<String, Object>> + */ + private void findPartner(CompanyFieldCondition condition, List<Map<String, Object>> issueCompanyFields + , List<Map<String, Object>> issueIspFields, List<Map<String, Object>> issueHostingFields) { + + List<Map<String, Object>> companyFields = this.companyFieldService.find(condition); + + if(companyFields != null && companyFields.size() > 0) { + for (Map<String, Object> companyField : companyFields) { + CompanyFieldVo companyFieldVo = ConvertUtil.convertMapToClass(companyField, CompanyFieldVo.class); + companyField.put("companyId", companyField.get("id")); + issueCompanyFields.add(companyField); + if(companyFieldVo.getIspId() != null && companyFieldVo.getIspId() != -1) { + Map<String, Object> ispField = this.ispFieldService.find(companyFieldVo.getIspId()); + if (ispField != null) { + ispField.put("ispId", ispField.get("id")); + issueIspFields.add(ispField); + } + } + if(companyFieldVo.getHostingId() != null && companyFieldVo.getHostingId() != -1) { + Map<String, Object> hostingField = this.hostingFieldService.find(companyFieldVo.getHostingId()); + if (hostingField != null) { + hostingField.put("hostingId", hostingField.get("id")); + issueHostingFields.add(hostingField); + } + } + } + } } private User convertToUser(String token) { @@ -436,7 +484,7 @@ } // 以묐났�맂 �긽�쐞 �씠�뒋 寃��깋 - private List<Issue> findIssue(IssueApiForm issueApiform, List<CustomFieldApiOverlap> customFieldApiOverlaps, Long userId) { + private List<Issue> findIssue(IssueApiForm issueApiform, IssueForm issueForm, List<CustomFieldApiOverlap> customFieldApiOverlaps, Long userId) { List<IssueCustomFieldValueForm> issueCustomFieldValueForms = issueApiform.getIssueCustomFieldValues(); List<Issue> resultIssueVos = Lists.newArrayList(); String comma = ","; @@ -444,15 +492,52 @@ if (issueCustomFieldValueForms.size() > 0) { String concatUseValue = ""; int useIdx = 0; + int cntIp = 0; + int cntSite = 0; IssueCustomFieldValueFormComparator comp = new IssueCustomFieldValueFormComparator(); Collections.sort(issueCustomFieldValueForms, comp); List<String> userValues = Lists.newArrayList(); + CompanyFieldCondition condition = new CompanyFieldCondition(); + List<Map<String, Object>> issueCompanyFields = Lists.newArrayList(); + List<Map<String, Object>> issueIspFields = Lists.newArrayList(); + List<Map<String, Object>> issueHostingFields = Lists.newArrayList(); + for (IssueCustomFieldValueForm issueCustomFieldValueForm : issueCustomFieldValueForms) { userValues.add(issueCustomFieldValueForm.getUseValue()); + for(CustomFieldApiOverlap customFieldApiOverlap : customFieldApiOverlaps) { if (customFieldApiOverlap.getCustomField().getId().equals(issueCustomFieldValueForm.getCustomFieldId())) { + + String useValue = issueCustomFieldValueForm.getUseValue(); + if (useValue.contains(" ")) { + useValue = useValue.replace(" ",""); + } + + if (customFieldApiOverlap.getCustomField().getCustomFieldType().equals(IP_ADDRESS)) { + long ip = ConvertUtil.ipToLong(useValue); + if (cntIp == 0){ + condition.setIp(ip); + } + cntIp ++; + } + + if(customFieldApiOverlap.getCustomField().getCustomFieldType().equals(SITE)) { + String[] urlArr = null; + List<String> urls = Lists.newArrayList(); + if (useValue.contains(",")) { + urlArr = useValue.split(","); + urls.addAll(Arrays.asList(urlArr)); + } else { + urls.add(useValue); + } + if (cntSite == 0) { + condition.setUrl(urls); + } + cntSite ++; + } + if (useIdx > 0) { concatUseValue = concatUseValue.concat(comma); } @@ -461,6 +546,13 @@ } } } + + // 異붽� �븷 url or ip�뿉 �룷�븿�릺�뼱�엳�뒗 �뙆�듃�꼫 李얘린 + this.findPartner(condition, issueCompanyFields, issueIspFields, issueHostingFields); + + issueForm.setIssueCompanyFields(issueCompanyFields); + issueForm.setIssueIspFields(issueIspFields); + issueForm.setIssueHostingFields(issueHostingFields); IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition(); issueCustomFieldValueCondition.setUseValue(concatUseValue); @@ -534,6 +626,16 @@ issue = this.issueRepository.saveAndFlush(issue); issue.setReverseIndex(issue.getId() * -1); // 荑쇰━ �냽�룄 媛쒖꽑�쓣 �쐞�빐 由щ쾭�뒪 �씤�뜳�뒪 �깮�꽦 + + if (issueForm.getParentIssueId() != null){ + Issue parentIssue = this.getIssue(issueForm.getParentIssueId()); + if (issueForm.getIsApi().equals(Issue.IS_API_YES) + || (issueForm.getInheritYn() != null && issueForm.getInheritYn())) { + // �븯�쐞�씠�뒋�뿉 �긽�쐞�씠�뒋�쓽 �뙆�듃�꼫 �젙蹂� �쟻�슜 + this.inheritPartners(issue, parentIssue); + } + } + // �떞�떦�옄 吏��젙 //this.issueUserService.modifyIssueUser(issue, project.getWorkspace(), issueForm.getUserIds()); // �떞�떦遺��꽌 吏��젙 @@ -544,15 +646,6 @@ this.issueIspService.modifyIssueIspField(issue, issueForm, detectIssueChange); // HOSTING �젙蹂� ���옣 this.issueHostingService.modifyIssueHostingField(issue, issueForm, detectIssueChange); - - if (issueForm.getParentIssueId() != null){ - Issue parentIssue = this.getIssue(issueForm.getParentIssueId()); - if (issueForm.getIsApi().equals(Issue.IS_API_YES) - || (issueForm.getInheritYn() != null && issueForm.getInheritYn())) { - // �븯�쐞�씠�뒋�뿉 �긽�쐞�씠�뒋�쓽 �뙆�듃�꼫 �젙蹂� �쟻�슜 - this.inheritPartners(issue, parentIssue); - } - } // 泥⑤� �뙆�씪 ���옣 // multipartFile �쓣 file Map List 媛앹껜濡� 蹂�寃쏀븳�떎. @@ -3208,7 +3301,7 @@ } saveIssueForm.setId(issue.getId()); - + // �썙�겕�뵆濡쒖슦 ��湲� �긽�깭�쓽 遺��꽌 異붽� List<Long> departmentsIds = this.workflowDepartmentService.findFirstDepartmentIds(workflow); if (departmentsIds != null && departmentsIds.size() > 0) { diff --git a/src/main/java/kr/wisestone/owl/util/ConvertUtil.java b/src/main/java/kr/wisestone/owl/util/ConvertUtil.java index fadaa0f..4ad54b3 100644 --- a/src/main/java/kr/wisestone/owl/util/ConvertUtil.java +++ b/src/main/java/kr/wisestone/owl/util/ConvertUtil.java @@ -558,4 +558,19 @@ return list.toArray(new String[list.size()]); } + /** + * ip二쇱냼 long�쑝濡� 蹂��솚 + * @param ipAddress String + * @return long + */ + public static long ipToLong(String ipAddress) { + long result = 0; + String[] ipAddressArr = ipAddress.split("\\."); + + for (int i=0; i<ipAddressArr.length; i++) { + result += Integer.parseInt(ipAddressArr[i]) * Math.pow(256, 3-i); + } + return result; + } + } diff --git a/src/main/java/kr/wisestone/owl/vo/CompanyFieldVo.java b/src/main/java/kr/wisestone/owl/vo/CompanyFieldVo.java index ddc0c89..1bc01d6 100644 --- a/src/main/java/kr/wisestone/owl/vo/CompanyFieldVo.java +++ b/src/main/java/kr/wisestone/owl/vo/CompanyFieldVo.java @@ -10,6 +10,9 @@ private String tel; private String email; private String url; + private String ipStart; + private String ipEnd; + private String ipRange; private String memo; private Long ispId; private Long hostingId; @@ -80,6 +83,30 @@ this.url = url; } + public String getIpStart() { + return ipStart; + } + + public void setIpStart(String ipStart) { + this.ipStart = ipStart; + } + + public String getIpEnd() { + return ipEnd; + } + + public void setIpEnd(String ipEnd) { + this.ipEnd = ipEnd; + } + + public String getIpRange() { + return ipRange; + } + + public void setIpRange(String ipRange) { + this.ipRange = ipRange; + } + public IspFieldVo getIspFieldVo() { return ispFieldVo; } diff --git a/src/main/java/kr/wisestone/owl/web/condition/CompanyFieldCondition.java b/src/main/java/kr/wisestone/owl/web/condition/CompanyFieldCondition.java index a87a5af..12c9984 100644 --- a/src/main/java/kr/wisestone/owl/web/condition/CompanyFieldCondition.java +++ b/src/main/java/kr/wisestone/owl/web/condition/CompanyFieldCondition.java @@ -2,6 +2,7 @@ import kr.wisestone.owl.util.ConvertUtil; +import java.util.List; import java.util.Map; public class CompanyFieldCondition { @@ -10,7 +11,8 @@ private String manager; private String tel; private String email; - private String url; + private List<String> url; + private long ip; private String memo; private Long ispId; private Long hostingId; @@ -86,14 +88,22 @@ PageSize = pageSize; } - public String getUrl() { + public List<String> getUrl() { return url; } - public void setUrl(String url) { + public void setUrl(List<String> url) { this.url = url; } + public long getIp() { + return ip; + } + + public void setIp(long ip) { + this.ip = ip; + } + public Long getIspId() { return ispId; } diff --git a/src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java b/src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java index 92f6634..dbd1d3f 100644 --- a/src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java +++ b/src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java @@ -11,6 +11,8 @@ public class CompanyFieldForm extends UsePartnerForm { private String manager; private String url; + private String ipStart; + private String ipEnd; private String memo; private String tel; private Long ispId; @@ -73,6 +75,22 @@ this.url = url; } + public String getIpStart() { + return ipStart; + } + + public void setIpStart(String ipStart) { + this.ipStart = ipStart; + } + + public String getIpEnd() { + return ipEnd; + } + + public void setIpEnd(String ipEnd) { + this.ipEnd = ipEnd; + } + public String getMemo() { return memo; } diff --git a/src/main/resources/migration/V1_9__alter_data.sql b/src/main/resources/migration/V1_9__alter_data.sql new file mode 100644 index 0000000..818bc56 --- /dev/null +++ b/src/main/resources/migration/V1_9__alter_data.sql @@ -0,0 +1,4 @@ + +/* �뾽泥� IP ���뿭�� 而щ읆 異붽� */ +ALTER TABLE `company_field` ADD COLUMN `ip_start` varchar(15) NULL; +ALTER TABLE `company_field` ADD COLUMN `ip_end` varchar(15) NULL; \ No newline at end of file diff --git a/src/main/resources/mybatis/query-template/companyField-template.xml b/src/main/resources/mybatis/query-template/companyField-template.xml index 61f27e8..4973732 100644 --- a/src/main/resources/mybatis/query-template/companyField-template.xml +++ b/src/main/resources/mybatis/query-template/companyField-template.xml @@ -11,6 +11,9 @@ cf.tel as tel, cf.email as email, cf.url as url, + cf.ip_start as ipStart, + cf.ip_end as ipEnd, + concat(cf.ip_start, "~", cf.ip_end) AS ipRange, cf.memo as memo, cf.isp_id as ispId, cf.hosting_id as hostingId, @@ -33,8 +36,16 @@ <if test="id != '' and id != null"> AND cf.id like CONCAT('%',#{id},'%') </if> - <if test="url != '' and id != url"> - AND cf.url like CONCAT('%',#{url},'%') + <choose> + <when test="url != null and url.size != 0"> + AND + <foreach collection="url" item="item" index="index" separator="or" open="(" close=")"> + cf.url LIKE CONCAT('%',#{item},'%') + </foreach> + </when> + </choose> + <if test="ip != '' and ip != null"> + AND INET_ATON(cf.ip_start) <![CDATA[ <= ]]> #{ip} AND INET_ATON(cf.ip_end) >= #{ip} </if> ORDER BY cf.register_date DESC <if test="pageSize != '' and pageSize != null"> @@ -55,4 +66,45 @@ AND cf.id like CONCAT('%',#{id},'%') </if> </select> + + <select id="findByUrls" resultType="kr.wisestone.owl.domain.CompanyField" parameterType="kr.wisestone.owl.web.condition.CompanyFieldCondition"> + SELECT + cf.id as id, + cf.name as name, + cf.email as email, + cf.url as url + FROM + company_field cf + WHERE 1=1 + <choose> + <when test="url != null and url.size != 0"> + AND + <foreach collection="url" item="item" index="index" separator="or" open="(" close=")"> + cf.url LIKE CONCAT('%',#{item},'%') + </foreach> + </when> + </choose> + </select> + + <select id="findByUrlsAndIdNot" resultType="kr.wisestone.owl.domain.CompanyField" parameterType="kr.wisestone.owl.web.condition.CompanyFieldCondition"> + SELECT + cf.id as id, + cf.name as name, + cf.email as email, + cf.url as url + FROM + company_field cf + WHERE 1=1 + <choose> + <when test="url != null and url.size != 0"> + AND + <foreach collection="url" item="item" index="index" separator="or" open="(" close=")"> + cf.url LIKE CONCAT('%',#{item},'%') + </foreach> + </when> + </choose> + <if test="id != '' and id != null"> + AND cf.id not like CONCAT('%',#{id},'%') + </if> + </select> </mapper> \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties b/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties index 666dc4c..29b596e 100644 --- a/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties +++ b/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties @@ -147,6 +147,8 @@ companyField.companyTel=\uC804\uD654\uBC88\uD638 companyField.companyEmail=\uC774\uBA54\uC77C companyField.companyUrl=url +companyField.companyIpStart=ip \uC2DC\uC791\uC8FC\uC18C +companyField.companyIpEnd=ip \uC885\uB8CC\uC8FC\uC18C companyField.companyTypeName=\uAE30\uC5C5\uAD6C\uBD84 companyField.parentSectorName=\uC5C5\uC885(\uB300\uBD84\uB958) companyField.childSectorName=\uC5C5\uC885(\uC911\uBD84\uB958) diff --git a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties index 58f3b6f..c55a9da 100644 --- a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties +++ b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties @@ -270,3 +270,5 @@ CODE_NOT_INVALID=\uCF54\uB4DC\uBA85\uC5D0\uB294 \uD2B9\uC218\uBB38\uC790\uB97C \uC785\uB825 \uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. TEL_NOT_INVALID=\uC5F0\uB77D\uCC98\uC5D0\uB294 \uC22B\uC790\uB9CC \uB610\uB294 \uC22B\uC790 + \uD558\uC774\uD508('-')\uB9CC \uC785\uB825 \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. EMAIL_NOT_INVALID=\uC774\uBA54\uC77C \uD615\uC2DD\uC774 \uB9DE\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. +IP_NOT_INVALID=IP\uC8FC\uC18C \uD615\uC2DD\uC774 \uB9DE\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. +IP_START_NOT_LARGER_THAN_END=\uC2DC\uC791 IP\uAC00 \uB05D IP \uBCF4\uB2E4 \uD074 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. diff --git a/src/main/webapp/assets/styles/main.css b/src/main/webapp/assets/styles/main.css index 733c972..6c82a30 100644 --- a/src/main/webapp/assets/styles/main.css +++ b/src/main/webapp/assets/styles/main.css @@ -7617,6 +7617,10 @@ height: 100% !important; } +.mw-49 { + max-width: 49% !important; +} + .mw-100 { max-width: 100% !important; } diff --git a/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js b/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js index 62cee08..e33066e 100644 --- a/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js +++ b/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js @@ -691,6 +691,12 @@ } break; + case "COMPANYFIELD_IP" : + if ($rootScope.isDefined(scope.data.ipStart) && $rootScope.isDefined(scope.data.ipEnd)) { + makeTag += "<span>" + scope.data.ipStart + "<br>~<br>" + scope.data.ipEnd + "</span>"; + } + break; + case "ISPFIELD_MODIFY" : if ($rootScope.checkMngPermission('USER_PERMISSION_MNG_CUSTOME_FIELD')) { makeTag += "<span class='titlename cursor table-word-break-all' ng-click='event.modify(data.id)'>" + scope.data.name.replace(/</gi, '<') + "</span>"; diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json index 30db5a6..045c675 100644 --- a/src/main/webapp/i18n/ko/global.json +++ b/src/main/webapp/i18n/ko/global.json @@ -996,7 +996,7 @@ "industry" : "�궛�뾽 遺꾨쪟", "domain" : "�룄硫붿씤", "url" : "url", - "ipAdress" : "ip二쇱냼", + "ipRange" : "ip ���뿭��", "tel" : "�뿰�씫泥�", "code" : "肄붾뱶", "email" : "�씠硫붿씪", @@ -1019,7 +1019,8 @@ "writeTel": "�쟾�솕踰덊샇瑜� �엯�젰�븯�뀛�빞 異붽��븷�닔 �엳�뒿�땲�떎.", "registerExcelCompanyFields": "�뿊��濡� �뾽泥� �벑濡앺븯湲�", "registerExcelUploadCompanyField": "�뿊�� �뾽濡쒕뱶 �뾽泥� �벑濡�", - "succeededCompanyFieldRegistration": "�뾽泥� �벑濡� �꽦怨�" + "succeededCompanyFieldRegistration": "�뾽泥� �벑濡� �꽦怨�", + "multiUrlWithComma": "�뿬�윭媛쒖쓽 url�쓣 �엯�젰 �븷 �닔 �엳�뒿�땲�떎. (援щ텇: 肄ㅻ쭏 ',') ex: www.test.com, www.test2.com" }, "ispField" : { "info": "ISP�젙蹂�", diff --git a/src/main/webapp/scripts/app/companyField/companyFieldAdd.controller.js b/src/main/webapp/scripts/app/companyField/companyFieldAdd.controller.js index 6c70239..e2a2c5c 100644 --- a/src/main/webapp/scripts/app/companyField/companyFieldAdd.controller.js +++ b/src/main/webapp/scripts/app/companyField/companyFieldAdd.controller.js @@ -38,6 +38,8 @@ tel : "", //�쟾�솕踰덊샇 email : "", //�씠硫붿씪 url : "", // url + ipStart : "", //ip�떆�옉二쇱냼 + ipEnd : "", //ip醫낅즺二쇱냼 memo : "", //鍮꾧퀬 companyTypeId : "", companyType : "", //湲곗뾽援щ텇 @@ -249,7 +251,17 @@ } return emailList; })(), - url : $scope.vm.form.url, // url + url : (function () { + // 紐⑤뱺 怨듬갚 �젣嫄� + var regex = / /gi; + let url = $scope.vm.form.url; + if ($rootScope.isDefined(url) && url.indexOf(" ") !== -1) { + url = url.replace(regex, ""); + } + return url; + })(), + ipStart : $scope.vm.form.ipStart, // ip�떆�옉二쇱냼 + ipEnd : $scope.vm.form.ipEnd, // ip醫낅즺二쇱냼 memo : $scope.vm.form.memo, //鍮꾧퀬 companyTypeId : (function () { var companyTypeId = null; diff --git a/src/main/webapp/scripts/app/companyField/companyFieldList.controller.js b/src/main/webapp/scripts/app/companyField/companyFieldList.controller.js index 69207f3..f3534dd 100644 --- a/src/main/webapp/scripts/app/companyField/companyFieldList.controller.js +++ b/src/main/webapp/scripts/app/companyField/companyFieldList.controller.js @@ -105,9 +105,16 @@ .setDAlign("text-center")); $scope.vm.tableConfigs.push($tableProvider.config() .setHName("companyField.url") - .setHWidth("bold") + .setHWidth("width-200-p bold") .setDName("url") .setDAlign("text-center")); + $scope.vm.tableConfigs.push($tableProvider.config() + .setHName("companyField.ipRange") + .setHWidth("width-120-p bold") + .setDName("ipRange") + .setDType("renderer") + .setDAlign("text-center") + .setDRenderer("COMPANYFIELD_IP")); $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.isp") .setHWidth("bold") @@ -203,6 +210,13 @@ data.email = data.email.replace(/\,/g,"</br>"); } } + // url 議고쉶�떆 肄ㅻ쭏 湲곗��쑝濡� 以꾨컮轅� + if ($rootScope.isDefined(data.url)) { + data.url = data.url.trim(); + if (data.url.indexOf(",") !== -1) { + data.url = data.url.replace(/\,/g,"</br>"); + } + } }); $scope.vm.responseData = result.data; diff --git a/src/main/webapp/scripts/app/companyField/companyFieldModify.controller.js b/src/main/webapp/scripts/app/companyField/companyFieldModify.controller.js index 549adff..de4a45f 100644 --- a/src/main/webapp/scripts/app/companyField/companyFieldModify.controller.js +++ b/src/main/webapp/scripts/app/companyField/companyFieldModify.controller.js @@ -41,6 +41,8 @@ tel : "", //�쟾�솕踰덊샇 email : "", //�씠硫붿씪 url : "", // url + ipStart : "", //ip�떆�옉二쇱냼 + ipEnd : "", //ip醫낅즺二쇱냼 memo : "", //硫붾え(鍮꾧퀬) companyTypeId : "", companyType : "", //湲곗뾽援щ텇 @@ -259,8 +261,18 @@ } return emailList; })(), - url : $rootScope.preventXss($scope.vm.form.url), // url - memo : $rootScope.preventXss($scope.vm.form.memo), + url : (function () { + // 紐⑤뱺 怨듬갚 �젣嫄� + var regex = / /gi; + let url = $scope.vm.form.url; + if ($rootScope.isDefined(url) && url.indexOf(" ") !== -1) { + url = url.replace(regex, ""); + } + return url; + })(), + ipStart : $scope.vm.form.ipStart, // ip�떆�옉二쇱냼 + ipEnd : $scope.vm.form.ipEnd, // ip醫낅즺二쇱냼 + memo : $scope.vm.form.memo, companyTypeId : (function () { var companyTypeId = null; if ($scope.vm.form.companyTypes != null && $scope.vm.form.companyTypes.length > 0) { @@ -442,6 +454,8 @@ } $scope.vm.form.url = result.data.content.url; + $scope.vm.form.ipStart = result.data.content.ipStart; + $scope.vm.form.ipEnd = result.data.content.ipEnd; $scope.vm.form.memo = result.data.content.memo; $scope.vm.form.companyTypeId = result.data.content.companyTypeId; $scope.vm.form.companyType = result.data.content.companyTypeName; diff --git a/src/main/webapp/views/companyField/companyFieldAdd.html b/src/main/webapp/views/companyField/companyFieldAdd.html index 4fe5b6d..2f7d840 100644 --- a/src/main/webapp/views/companyField/companyFieldAdd.html +++ b/src/main/webapp/views/companyField/companyFieldAdd.html @@ -34,6 +34,9 @@ <label for="companyFieldAddForm10" class="issue-label"> <span translate="companyField.url">url</span> </label> + <div class="help-block form-text text-danger fs-09"> + <small translate="companyField.multiUrlWithComma">�뿬�윭媛쒖쓽 url�쓣 �엯�젰 �븷 �닔 �엳�뒿�땲�떎. (援щ텇: ',') ex: www.test.com, www.test2.com</small> + </div> <input id="companyFieldAddForm10" name="url" type="text" @@ -50,6 +53,50 @@ </div> <div class="row"> + <div class="col-lg-6 mw-49"> + <div class="form-group"> + <label for="companyFieldAddForm11" class="issue-label"> + <span translate="companyField.ipRange">ip ���뿭��</span> + </label> + <input id="companyFieldAddForm11" + name="ipStart" + type="text" + class="form-control" + kr-input + ng-pattern="/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/" + placeholder="IP 二쇱냼 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎." + autocomplete="off" + ng-model="vm.form.ipStart" + > + <div ng-if="companyFieldAddForm.ipStart.$error.pattern" class="help-block form-text text-danger" + translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎. + </div> + </div> + </div> + <div class="mt-30"> + <label class="issue-label">~</label> + </div> + <div class="col-lg-6 mw-49"> + <div class="form-group"> + <label for="companyFieldAddForm12" class="issue-label"></label> + <input id="companyFieldAddForm12" + name="ipEnd" + type="text" + class="form-control" + kr-input + ng-pattern="/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/" + placeholder="IP 二쇱냼 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎." + autocomplete="off" + ng-model="vm.form.ipEnd" + > + <div ng-if="companyFieldAddForm.ipEnd.$error.pattern" class="help-block form-text text-danger" + translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎. + </div> + </div> + </div> + </div> + + <div class="row"> <div class="col-lg-6"> <div class="form-group"> <label class="issue-label"> diff --git a/src/main/webapp/views/companyField/companyFieldModify.html b/src/main/webapp/views/companyField/companyFieldModify.html index 5f5dc8c..33ed903 100644 --- a/src/main/webapp/views/companyField/companyFieldModify.html +++ b/src/main/webapp/views/companyField/companyFieldModify.html @@ -29,10 +29,13 @@ <!--<small translate="companyField.enterSpecialCharacters">�뾽泥� �씠由꾩뿉�뒗 �듅�닔 臾몄옄瑜� �엯�젰 �븷�닔 �뾾�뒿�땲�떎.</small>--> </div> <div class="form-group"> - <label for="companyFieldAddForm10" class="issue-label"> + <label for="companyFieldModifyForm10" class="issue-label"> <span translate="companyField.url">url</span> </label> - <input id="companyFieldAddForm10" + <div class="help-block form-text text-danger fs-09"> + <small translate="companyField.multiUrlWithComma">�뿬�윭媛쒖쓽 url�쓣 �엯�젰 �븷 �닔 �엳�뒿�땲�떎. (援щ텇: ',') ex: www.test.com, www.test2.com</small> + </div> + <input id="companyFieldModifyForm10" name="url" type="text" class="form-control" @@ -47,6 +50,50 @@ </div>--> </div> <div class="row"> + <div class="col-lg-6 mw-49"> + <div class="form-group"> + <label for="companyFieldModifyForm11" class="issue-label"> + <span translate="companyField.ipRange">ip ���뿭��</span> + </label> + <input id="companyFieldModifyForm11" + name="ipStart" + type="text" + class="form-control" + kr-input + ng-pattern="/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/" + placeholder="IP 二쇱냼 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎." + autocomplete="off" + ng-model="vm.form.ipStart" + > + <div ng-if="companyFieldModifyForm.ipStart.$error.pattern" class="help-block form-text text-danger" + translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎. + </div> + </div> + </div> + <div class="mt-30"> + <label class="issue-label">~</label> + </div> + <div class="col-lg-6 mw-49"> + <div class="form-group"> + <label for="companyFieldModifyForm12" class="issue-label"> + </label> + <input id="companyFieldModifyForm12" + name="ipEnd" + type="text" + class="form-control" + kr-input + ng-pattern="/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/" + placeholder="IP 二쇱냼 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎." + autocomplete="off" + ng-model="vm.form.ipEnd" + > + <div ng-if="companyFieldModifyForm.ipEnd.$error.pattern" class="help-block form-text text-danger" + translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎. + </div> + </div> + </div> + </div> + <div class="row"> <div class="col-lg-6"> <div class="form-group"> <label class="issue-label"> -- Gitblit v1.8.0