src/main/java/kr/wisestone/owl/constant/MsgConstants.java | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/java/kr/wisestone/owl/service/IssueCustomFieldValueService.java | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/java/kr/wisestone/owl/service/impl/IssueCustomFieldValueServiceImpl.java | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/java/kr/wisestone/owl/vo/ResMessageVo.java | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/webapp/index.html | ●●●●● 패치 | 보기 | raw | blame | 히스토리 |
src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -81,6 +81,7 @@ public static final String WORKFLOW_DEPARTMENT_NOT_EXIST = "WORKFLOW_DEPARTMENT_NOT_EXIST"; // 워크플로우 부서가 존재하지 않습니다. public static final String CUSTOM_FIELD_NOT_EXIST = "CUSTOM_FIELD_NOT_EXIST"; // 사용자 정의 필드가 존재하지 않습니다. public static final String ISSUE_TYPE_CUSTOM_FIELD_NOT_EXIST = "ISSUE_TYPE_CUSTOM_FIELD_NOT_EXIST"; // 프로젝트 내 이슈유형에 설정된 사용자 정의 필드가 존재하지 않습니다. public static final String CUSTOM_FIELD_NOT_NAME = "CUSTOM_FIELD_NOT_NAME"; // 사용자 정의 필드명이 입력되지 않았습니다. public static final String CUSTOM_FIELD_NAME_MAX_LENGTH_OUT = "CUSTOM_FIELD_NAME_MAX_LENGTH_OUT"; // 사용자 정의 필드명은 최대 50글자까지 입력할 수 있습니다. public static final String CUSTOM_FIELD_USED_NAME = "CUSTOM_FIELD_USED_NAME"; // 사용자 정의 필드 명이 이미 사용되고 있습니다. src/main/java/kr/wisestone/owl/service/IssueCustomFieldValueService.java
@@ -16,7 +16,7 @@ public interface IssueCustomFieldValueService extends AbstractService<IssueCustomFieldValue, Long, JpaRepository<IssueCustomFieldValue, Long>>{ void modifyIssueCustomFieldValue(Issue issue, List<Map<String, Object>> issueCustomFields); void getCustomFieldAndIssueTypeCustomField(Map<String, Object> map, Issue issue, Map<String, Object> result); boolean getCustomFieldAndIssueTypeCustomField(Map<String, Object> map, Issue issue, Map<String, Object> result); List<IssueCustomFieldValueVo> findByIssueId(Long issueId); src/main/java/kr/wisestone/owl/service/impl/IssueCustomFieldValueServiceImpl.java
@@ -63,39 +63,42 @@ for (Map<String, Object> map : issueCustomFields) { Map<String, Object> result = new HashMap<>(); // customFieldVo 에서 사용자 정의 필드와 이슈 유형에 연결된 사용자 정의 필드 정보를 가져온다. this.getCustomFieldAndIssueTypeCustomField(map, issue, result); List<String> useValues = MapUtil.getStrings(map, "useValues"); boolean useCustomField = this.getCustomFieldAndIssueTypeCustomField(map, issue, result); if (useCustomField) { List<String> useValues = MapUtil.getStrings(map, "useValues"); if (useValues != null) { for (String useValue : useValues) { if (!StringUtils.isEmpty(useValue)) { // Xss 공격 방어를 위해 script 공백으로 치환 IssueCustomFieldValue issueCustomFieldValue = new IssueCustomFieldValue(issue, (CustomField)result.get("customField"), (IssueTypeCustomField)result.get("issueTypeCustomField"), useValue); issueCustomFieldValues.add(issueCustomFieldValue); if (useValues != null) { for (String useValue : useValues) { if (!StringUtils.isEmpty(useValue)) { // Xss 공격 방어를 위해 script 공백으로 치환 IssueCustomFieldValue issueCustomFieldValue = new IssueCustomFieldValue(issue, (CustomField) result.get("customField"), (IssueTypeCustomField) result.get("issueTypeCustomField"), useValue); issueCustomFieldValues.add(issueCustomFieldValue); } } } } } if (issueCustomFieldValues.size() > 0) { try { this.issueCustomFieldValueRepository.saveAll(issueCustomFieldValues); } catch (Exception ex) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.CUSTOM_FIELD_NOT_EXIST)); } this.issueCustomFieldValueRepository.saveAll(issueCustomFieldValues); } } // customFieldVo 에서 사용자 정의 필드와 이슈 유형에 연결된 사용자 정의 필드 정보를 가져온다. @Override public void getCustomFieldAndIssueTypeCustomField(Map<String, Object> map, Issue issue, Map<String, Object> result) { public boolean getCustomFieldAndIssueTypeCustomField(Map<String, Object> map, Issue issue, Map<String, Object> result) { Map<String, Object> customFieldMap = (Map<String, Object>) MapUtil.getObject(map, "customFieldVo"); CustomField customField = this.customFieldService.getCustomField(MapUtil.getLong(customFieldMap, "id")); IssueTypeCustomField issueTypeCustomField = this.issueTypeCustomFieldService.findByProjectIdAndIssueTypeIdAndCustomFieldId(issue.getProject().getId(), issue.getIssueType().getId(), customField.getId()); if (issueTypeCustomField == null) { // 설정된 사용자 정의 필드가 없을때 return false; } result.put("customField", customField); result.put("issueTypeCustomField", issueTypeCustomField); return true; } // 이슈에 연결된 사용자 정의 필드 값을 조회한다. src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -375,10 +375,11 @@ IssueForm issueForm = this.convertToIssueForm(issueApiForm, user); List<Issue> issues = Lists.newArrayList(); if (issueForm.getParentIssueId() != null) { if (issueForm.getParentIssueId() != null // 기존 추가된 상위 일감이 없거나 설정된 중복 이슈 id가 없을때 || issueApiForm.getUseIssueCustomFieldIds().size() == 0) { issues.add(addIssue(user, issueForm, issueApiForm.getMultipartFiles())); } else { // 상위 이슈 추가 // 가상 상위 이슈 추가 IssueForm parentIssueForm = issueForm.clone(); parentIssueForm.setUseIssueCustomFields(issueApiForm.getUseIssueCustomFieldIds()); Issue issue = addIssue(user, parentIssueForm, null); src/main/java/kr/wisestone/owl/vo/ResMessageVo.java
@@ -47,7 +47,4 @@ return "ResMessage [message=" + this.message + ", code=" + this.code + ", status=" + this.status + "]"; } } src/main/webapp/index.html
@@ -40,7 +40,7 @@ <link type="text/css" rel="stylesheet" href="custom_components/js-autocomplete-single/js-autocomplete-single.css"> <link type="text/css" rel="stylesheet" href="custom_components/js-autocomplete-multi/js-autocomplete-multi.css"> <link type="text/css" rel="stylesheet" href="custom_components/js-html-diff/js-html-diff.css"> <link type="text/css" rel="stylesheet" href="assets/styles/main.css?version=0.9.2"> <link type="text/css" rel="stylesheet" href="assets/styles/main.css?version=0.9.4"> <link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Rubik:300,400,500"> <!-- google font -->