////////////////////////////////// // Page 전역 변수 ////////////////////////////////// var selectServerId; // 선택한 서버 이름 (c_id) var selectServerName; // 선택한 서버 이름 (c_jira_server_name ) var selectServerType; // 선택한 서버 타입 (c_jira_server_type, 클라우드 or 온프레미스) var selectedTab; // 선택한 탭 var selectProjectId; // 선택한 지라프로젝트 아이디 var selectRadioId; // 이슈 유형 or 이슈 상태 or 이슈 해결책 var dataTableRef; // 데이터테이블 참조 변수 var serverDataList; // 서버 전체 맵 var isAccountVerified = false; // 계정 검증 완료 플래그 //////////////// //Document Ready //////////////// function execDocReady() { var pluginGroups = [ [ "css/jiraServerCustom.css", "../reference/jquery-plugins/select2-4.0.2/dist/js/select2.min.js", "../reference/jquery-plugins/unityping-0.1.0/dist/jquery.unityping.min.js", "../reference/lightblue4/docs/lib/widgster/widgster.js" ], [ "../reference/jquery-plugins/dataTables-1.10.16/media/css/jquery.dataTables_lightblue4.css", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Responsive/css/responsive.dataTables_lightblue4.css", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Select/css/select.dataTables_lightblue4.css", "../reference/jquery-plugins/dataTables-1.10.16/media/js/jquery.dataTables.min.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Responsive/js/dataTables.responsive.min.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Select/js/dataTables.select.min.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/RowGroup/js/dataTables.rowsGroup.min.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/dataTables.buttons.min.js", ], // 추가적인 플러그인 그룹들을 이곳에 추가하면 됩니다. ]; loadPluginGroupsParallelAndSequential(pluginGroups) .then(function() { console.log('모든 플러그인 로드 완료'); //vfs_fonts 파일이 커서 defer 처리 함. setTimeout(function () { var script = document.createElement("script"); script.src = "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/vfs_fonts.js"; script.defer = true; // defer 속성 설정 document.head.appendChild(script); }, 5000); // 5초 후에 실행됩니다. //사이드 메뉴 처리 $('.widget').widgster(); setSideMenu("sidebar_menu_jira", "sidebar_menu_jira_manage"); var waitCardDeck = setInterval( function () { try { // 카드 덱(서버 목록) 이니시에이터 makeJiraServerCardDeck(); clearInterval(waitCardDeck); } catch (err) { console.log("지라 서버 데이터 로드가 완료되지 않아서 초기화 재시도 중..."); } }, 313 /* milli */); // --- 에디터 설정 --- // var waitCKEDITOR = setInterval( function () { try { if (window.CKEDITOR) { if(window.CKEDITOR.status === "loaded"){ CKEDITOR.replace("input_jira_server_editor",{ skin: "office2013" }); CKEDITOR.replace("detailview_jira_server_contents",{ skin: "office2013" }); CKEDITOR.replace("modal_editor",{ skin: "office2013" }); clearInterval(waitCKEDITOR); } } } catch (err) { console.log("CKEDITOR 로드가 완료되지 않아서 초기화 재시도 중..."); } }, 1000); //313ms tab_click_event(); default_setting_event(); save_btn_click(); delete_btn_click(); update_btn_click(); popup_update_btn_click(); autoSlide(); 레드마인_안내문구(); 서버등록_계정검증_버튼_클릭(); var 라따적용_클래스이름_배열 = ['.default_update', '.jira_renew_btn']; laddaBtnSetting(라따적용_클래스이름_배열); $(".select_text_formatting").select2({ ...$(this).data(), minimumResultsForSearch: -1 }); }) .catch(function() { console.error('플러그인 로드 중 오류 발생'); }); } function makeJiraServerCardDeck() { console.log("지라 서버 카드 목록 생성"); // 지라 서버 목록 데이터 가져오기 및 element 삽입 return new Promise((resolve, reject) => { $.ajax({ url: "/auth-user/api/arms/jiraServerProjectPure/getNodesWithoutRootAndSoftDelete.do", type: "GET", contentType: "application/json;charset=UTF-8", dataType: "json", progress: true, statusCode: { 200: function (data) { /////////////////// insert Card /////////////////////// let obj = data; serverDataList = {}; for (let k in obj) { let serverData = obj[k]; serverDataList[serverData.c_id] = serverData; } draw_card_deck(obj); } }, success: function(response) { resolve(); // 비동기 작업 성공 시 resolve 호출 }, error: function(error) { reject(error); // 비동기 작업 실패 시 reject 호출 jError("지라(서버) 목록 조회 중 에러가 발생했습니다. " + error); } }); }); } /////////////////////////////// //서버 목록 조회 (카드 덱 형태) /////////////////////////////// function draw_card_deck(alm_server_list) { $("#jira_server_card_deck").html(""); // 카드 덱 초기화 var data=``; if (alm_server_list.length > 0) { // 카드 있음 (등록된 서버 있음) for (let i = 0; i < alm_server_list.length; i++) { let insertImage = ''; if (alm_server_list[i].c_jira_server_type === '클라우드') { insertImage = ``; } if (alm_server_list[i].c_jira_server_type === '온프레미스') { insertImage = ``; } if (alm_server_list[i].c_jira_server_type === '레드마인_온프레미스') { insertImage = ``; } data += `
${draw_ribbon(alm_server_list[i])}
${insertImage}
${alm_server_list[i].c_title}

${alm_server_list[i].c_jira_server_base_url}

status: 200
Last Update - 08 Aug, 2023
`; // 리본출력 함수 호출 // draw_ribbon(alm_server_list[i].c_id, alm_server_list[i].c_jira_server_type); } } $("#jira_server_card_deck").html(data); } ///////////////////////////////////// // 지라 서버 클릭할 때 동작하는 함수 // 1. 상세보기 데이터 바인딩 // 2. 편집하기 데이터 바인딩 ///////////////////////////// function jiraServerCardClick(alm_server_c_id) { selectServerId = alm_server_c_id; return new Promise((resolve, reject) => { $.ajax({ url: "/auth-user/api/arms/jiraServerPure/getNode.do", // 클라이언트가 HTTP 요청을 보낼 서버의 URL 주소 data: { c_id: alm_server_c_id }, method: "GET", dataType: "json", // 서버에서 보내줄 데이터의 타입 beforeSend: function () { $(".loader").removeClass("hide"); let cardId = "#card-"+alm_server_c_id; $(".card").removeClass("clicked"); $(cardId).addClass("clicked"); }, success: function(response) { resolve(); // 비동기 작업 성공 시 resolve 호출 }, error: function(error) { reject(error); // 비동기 작업 실패 시 reject 호출 } }) // HTTP 요청이 성공하면 요청한 데이터가 done() 메소드로 전달됨. .done(function (json) { console.log(json); selectServerType = ""; selectServerId = json.c_id; selectServerName = json.c_title; selectServerType = json.c_jira_server_type; let alm_server_type = json.c_jira_server_type; $("#nav_stats>a").click(); display_set_wide_projectTable(); $("#detailview_server_text_formatting_div").addClass("hidden"); $("#editview_server_text_formatting_div").addClass("hidden"); init_text_formatting("detailview_server_text_formatting"); init_text_formatting("editview_server_text_formatting"); // 디폴트 // 상세보기 , 편집하기, 지라프로젝트, 이슈 운선순위, 이슈 유형, 삭제하기 if (alm_server_type === "클라우드") { // 상세보기 , 편집하기, 지라 프로젝트, 이슈 우선수위, 삭제하기 $("#type_tab").hide(); // 이슈 유형 숨김 $("#status_tab").hide(); // 이슈 상태 숨김 $("#resolution_tab").hide(); // 이슈 해결책 숨김 $("#redmine_info_edit").hide(); $("#cloudIssueTypeInfo").removeClass("hidden"); $("li a[href='#related_project'] strong").text("지라 프로젝트"); } else if (alm_server_type === "온프레미스") { // 상세보기, 편집하기, 지라프로젝트, 이슈 우선순위, 이슈 유형, 삭제하기 $("#type_tab").show();// 이슈 유형 보여주기 $("#status_tab").removeClass("hidden").show(); $("#resolution_tab").hide(); //해결책 숨김 $("#redmine_info_edit").hide(); $("#cloudIssueTypeInfo").addClass("hidden"); $("li a[href='#related_project'] strong").text("지라 프로젝트"); } else { // 상세보기, 편집하기, 지라프로젝트, 이슈 우선순위, 이슈 상태, 삭제하기 $("#type_tab").hide(); // 이슈 유형 슴김 $("#status_tab").removeClass("hidden").show(); $("#resolution_tab").hide(); // 해결책 숨기기 $("#redmine_info_edit").show(); $("#cloudIssueTypeInfo").removeClass("hidden"); $("#detailview_server_text_formatting_div").removeClass("hidden"); $("#editview_server_text_formatting_div").removeClass("hidden"); $("li a[href='#related_project'] strong").text("레드마인 프로젝트"); } // Sender 설정 var selectedHtml = `
선택된 서버 : ` + json.c_title + `
`; $("#list-group-item").html(selectedHtml); // => 데이터 바인딩 설정해야함. $("#detailview_jira_server_name").val(json.c_title); $("#editview_jira_server_name").val(json.c_title); let server_type_value = json.c_jira_server_type; update_radio_buttons("#detailview_jira_server_type_div", server_type_value); update_radio_buttons("#editview_jira_server_type_div", server_type_value); // BASE_URL $("#detailview_jira_server_base_url").val(json.c_jira_server_base_url); $("#editview_jira_server_base_url").val(json.c_jira_server_base_url); // 서버 ID $("#detailview_jira_server_connect_id").val(json.c_jira_server_connect_id); $("#editview_jira_server_connect_id").val(json.c_jira_server_connect_id); // 서버 PW $("#detailview_jira_pass_token").val(json.c_jira_server_connect_pw); $("#editview_jira_pass_token").val(json.c_jira_server_connect_pw); if (!json.c_server_contents_text_formatting_type) { json.c_server_contents_text_formatting_type = "text"; } $("#detailview_server_text_formatting").val(json.c_server_contents_text_formatting_type); $("#editview_server_text_formatting").val(json.c_server_contents_text_formatting_type).trigger('change'); //상세보기 에디터 부분 CKEDITOR.instances.detailview_jira_server_contents.setData(json.c_jira_server_contents); CKEDITOR.instances.detailview_jira_server_contents.setReadOnly(true); //편집하기 에디터 부분 CKEDITOR.instances.input_jira_server_editor.setData(json.c_jira_server_contents); //삭제 부분 $("#delete_text").text(json.c_title); }) // HTTP 요청이 실패하면 오류와 상태에 관한 정보가 fail() 메소드로 전달됨. .fail(function (xhr, status, errorThrown) { console.log(xhr + status + errorThrown); }) // 항상 실행 .always(function (xhr, status) { console.log(xhr + status); $(".loader").addClass("hide"); }); }); } // 카드 클릭에 연동 할 프로젝트 데이터 테이블 만들기 //defaultContent: "
N/A
", function project_dataTableLoad(c_id) { var columnList = [ { name: "c_jira_name", title:"프로젝트 이름", data: "c_jira_name", className: "dt-body-left", visible: true }, { title:"프로젝트 키", data: "c_jira_key", className: "dt-body-left", defaultContent: "
N/A
" }, { title:"프로젝트 아이디", data: "c_desc", className: "dt-body-left", defaultContent: "
N/A
" }, { name: "c_id", title: "c_id", data: "c_id", visible: false }, ]; var columnDefList =[]; var columnDefList_cloud = [ { targets: 0, searchable: true, orderable: false, render: function (data, type, row, meta) { if (isEmpty(data) || data === "unknown") { return `
N/A
`; } let project_c_id = row.c_id; let splitData = data; let buttonHTML = ``; return `
${splitData}${buttonHTML}
`; }, } ]; var columnDefList_onpremise = []; var rowsGroupList = null; var jquerySelector = "#jira_project_table"; var ajaxUrl = "/auth-user/api/arms/jiraServer/getJiraProjectPure.do?c_id=" + c_id; var jsonRoot = "response"; if (selectServerType === "클라우드" || selectServerType === "레드마인_온프레미스") { columnDefList = columnDefList_cloud; } else { columnDefList = columnDefList_onpremise; } var selectList = {}; var orderList = [[1, "asc"]]; var buttonList = []; var isServerSide = false; dataTableRef = dataTable_build( jquerySelector, ajaxUrl, jsonRoot, columnList, rowsGroupList, columnDefList, selectList, orderList, buttonList, isServerSide ); $(jquerySelector+' tbody').off('click', 'tr'); } function dataTableDrawCallback(tableInfo) { console.log("[ jiraServer :: dataTableDrawCallback ] :: selectedTab -> " + selectedTab); console.log("[ jiraServer :: dataTableDrawCallback ] :: tableInfo"); console.log(tableInfo); var className = ""; if (selectedTab) { if (selectedTab === "issuePriority") { className = "issuePriority"; } else if (selectedTab === "issueStatus") { className = selectServerType === "클라우드" ? "project-issueStatus" : "issueStatus"; } else if (selectedTab === "issueType") { className = (selectServerType === "클라우드" || selectServerType === "레드마인_온프레미스") ? "project-issueType" : "issueType"; } } var tableData = tableInfo.aoData; if(!isEmpty(tableData)) { tableData.forEach(function (rowInfo, index) { if( !isEmpty(rowInfo._aData) ) { var tableRowData = rowInfo._aData; var rowIsDefault = tableRowData.c_check; var rowNameClass = "." + className + "-data" + index; var appendHtml = rowNameClass+">input"; if (rowIsDefault === "true") { $(appendHtml).prop("checked", "true"); } } }); } } //데이터 테이블 ajax load 이후 콜백. function dataTableCallBack(settings, json) { console.log("Data Table loaded in initComplete", settings); console.log(json); // if (settings.sTableId === "issue_status_table") { // console.log(json); // if (!json.response || json.response.length === 0) { // alert("설정된 이슈유형이 없거나 설정된 이슈유형의 상태가 없습니다."); // } // } } /////////////////////////////////// // 팝업 띄울 때, UI 일부 수정되도록 /////////////////////////////////// function modalPopup(popupName) { // 계정 검증 초기화 init_server_account_verification(); // 서버 라디오 버튼 초기화 $("#popup_editview_jira_server_type_div label").removeClass("active"); $("input[name='popup_editview_jira_server_type_options']:checked").prop("checked", false); // 공통 초기화 함수 function initializeModal(title, description, isReadOnly) { $("#my_modal1_title").text(title); $("#my_modal1_description").text(description); // 레드마인 관련 정보 초기화 $('#redmine_info').hide(); $('#popup_editview_text_formatting_div').hide(); $('#popup_editview_text_formatting_div') // ALM 서버 환경 버튼 disabled 처리 제거 $("#popup_editview_jira_server_type_div label").removeClass("btn-disabled"); // ALM 서버 URL readOnly 설정 $("#popup_editview_jira_server_base_url").prop("readonly", isReadOnly); if (!isReadOnly) { // form 데이터 초기화 CKEDITOR.instances.modal_editor.setData("등록한 ALM(서버) 관련 특이사항 등을 기록합니다."); CKEDITOR.instances.modal_editor.setReadOnly(false); // 지라 서버 이름 $("#popup_editview_jira_server_name").val(""); // BASE URL $("#popup_editview_jira_server_base_url").val(""); // 서버 연결 ID, PW $("#popup_editview_jira_server_connect_id").val(""); $("#popup_editview_jira_pass_token").val(""); } } if (popupName === "modal_popup_regist") { initializeModal("신규 ALM 서버 등록 팝업", "A-RMS에 ALM 서버를 등록합니다.", false); init_text_formatting("popup_editview_text_formatting"); // 모달 등록, 수정별 버튼 초기화 $("#extendupdate_jira_server").addClass("hidden"); $("#regist_alm_server").removeClass("hidden"); } else if (popupName === "modal_popup_readonly") { $("#my_modal2_title").text("지라(서버) 내용 보기 팝업"); $("#my_modal2_sub").text("새 창으로 등록된 지라 정보를 확인합니다."); // 모달 등록, 수정별 버튼 초기화 $("#extendupdate_jira_server").addClass("hidden"); $("#regist_alm_server").addClass("hidden"); } else { initializeModal("지라(서버) 수정 팝업", "A-RMS에 등록된 지라(서버)의 정보를 수정합니다.", true); // 모달 등록, 수정별 버튼 초기화 $("#extendupdate_jira_server").removeClass("hidden"); $("#regist_alm_server").addClass("hidden"); var editorData = CKEDITOR.instances.input_jira_server_editor.getData(); CKEDITOR.instances.modal_editor.setData(editorData); CKEDITOR.instances.modal_editor.setReadOnly(false); // 지라 서버 이름 $("#popup_editview_jira_server_name").val($("#detailview_jira_server_name").val()); // BASE URL $("#popup_editview_jira_server_base_url").val($("#detailview_jira_server_base_url").val()); // 서버 연결 ID, PW $("#popup_editview_jira_server_connect_id").val($("#detailview_jira_server_connect_id").val()); $("#popup_editview_jira_pass_token").val($("#detailview_jira_pass_token").val()); // 서버타입 클릭 및 disabled 처리 let server_type = $("#detailview_jira_server_type_div input[name='detailview_jira_server_type_options']:checked").val(); update_radio_buttons("#popup_editview_jira_server_type_div", server_type); $("#popup_editview_text_formatting").val($("#detailview_server_text_formatting").val()).trigger('change'); $("#popup_editview_jira_server_type_div label").addClass("btn-disabled"); // 레드마인 서버의 경우 안내 문구 if ($('#popup_editview_server_redmine_check').is(':checked')) { $('#redmine_info').show(); $('#popup_editview_text_formatting_div').show(); } else { $('#redmine_info').hide(); $('#popup_editview_text_formatting_div').hide(); } } } function 레드마인_안내문구(){ $('input[type="radio"][name="popup_editview_jira_server_type_options"]').change(function() { if ($('#popup_editview_server_redmine_check').is(':checked')) { $('#redmine_info').show(); $('#popup_editview_text_formatting_div').show(); } else{ $('#redmine_info').hide(); $('#popup_editview_text_formatting_div').hide(); init_text_formatting("popup_editview_text_formatting"); } }); } //////////////////////////////// // 지라 서버 등록 //////////////////////////////// function 서버등록_계정검증_버튼_클릭(){ $('#verify_account').off().click(function(){ var uri = $("#popup_editview_jira_server_base_url").val(); var type = $("#popup_editview_jira_server_type_div input[name='popup_editview_jira_server_type_options']:checked").val(); var userId = $("#popup_editview_jira_server_connect_id").val(); var passwordOrToken = $("#popup_editview_jira_pass_token").val(); if(!type){ alert("ALM 환경을 선택해주세요."); return; } if(!uri){ alert("ALM URL을 입력해주세요."); return; } if(!userId){ alert("ALM ID를 입력해주세요."); return; } if(!passwordOrToken){ alert("ALM 암호 또는 토큰을 입력해주세요."); return; } console.log("Base URL==> " + uri); console.log("c_jira_server_type==> " + type); console.log("c_jira_server_connect_id==> " +userId); console.log("c_jira_server_connect_pw==> " + passwordOrToken); $.ajax({ url: "/auth-user/api/arms/jiraServer/verifyAccount.do", type: "GET", data: { uri: uri, type: type, userId: userId, passwordOrToken: passwordOrToken }, statusCode: { 200: function (계정_정보) { if (type ==="레드마인_온프레미스") { var isAdmin = 계정_정보.response.admin; if (isAdmin === true ) { jSuccess("계정 검증이 완료 되었습니다."); isAccountVerified = true; $('#verify_account').text("계정 검증 성공"); } else { jError("관리자 계정이 아닙니다. 등록한 정보를 확인해 주세요."); } } else { var isActivate = 계정_정보.response.active; if(isActivate === true ){ jSuccess("계정 검증이 완료 되었습니다."); isAccountVerified = true; $('#verify_account').text("계정 검증 성공"); } else { jError("활성화된 계정이 아닙니다. 등록한 정보를 확인해 주세요."); } } } }, error: function(){ jError("등록이 불가한 계정 정보입니다. 등록한 정보를 확인해 주세요."); } }); }); } function save_btn_click() { $("#regist_alm_server").off().click(function() { if (!isAccountVerified) { jError("계정 검증을 먼저 해주세요."); return; } let data = get_jira_server_create_or_update_data(); data.ref = 2; jira_server_request_create_or_update( "/auth-user/api/arms/jiraServer/addJiraServerNode.do", "POST", data, "신규 서버가 등록이 완료 되었습니다."); }); } function popup_update_btn_click() { $("#extendupdate_jira_server").click(function() { if (!isAccountVerified) { jError("계정 검증을 먼저 해주세요."); return; } let data = get_jira_server_create_or_update_data(); data.c_id = selectServerId; jira_server_request_create_or_update( "/auth-user/api/arms/jiraServer/updateNodeAndEngineServerInfoUpdate.do", "PUT", data, `${selectServerName}의 데이터가 팝업으로 변경되었습니다.`); }); } function jira_server_request_create_or_update(url, type, data, successMessage) { $.ajax({ url: url, type: type, data: data, statusCode: { 200: function(data) { console.log(data.response); $("#close_modal_popup").trigger("click"); makeJiraServerCardDeck() .then(() => { jSuccess(successMessage); if (type === "PUT") { jiraServerCardClick(selectServerId); } else if(type === "POST") { jiraServerCardClick(data.response.c_id); } }) .catch(error => { console.error('Error occurred:', error); jError(error); }); } }, beforeSend: function() { $("#regist_alm_server, #extendupdate_jira_server").hide(); }, complete: function() { $("#regist_alm_server, #extendupdate_jira_server").show(); }, error: function(e) { let errorMessage = e.responseJSON.error.message; console.log(errorMessage); jError("지라 서버 처리 중 에러가 발생했습니다. " + errorMessage); } }); } function get_jira_server_create_or_update_data() { return { c_title: $("#popup_editview_jira_server_name").val(), c_type: "default", c_jira_server_name: $("#popup_editview_jira_server_name").val(), c_jira_server_type: $("#popup_editview_jira_server_type_div input[name='popup_editview_jira_server_type_options']:checked").val(), c_jira_server_base_url: $("#popup_editview_jira_server_base_url").val(), c_jira_server_connect_id: $("#popup_editview_jira_server_connect_id").val(), c_jira_server_connect_pw: $("#popup_editview_jira_pass_token").val(), c_jira_server_contents: CKEDITOR.instances.modal_editor.getData(), c_server_contents_text_formatting_type: $("#popup_editview_text_formatting option:selected").val() }; } function update_btn_click(){ $("#jira_server_update").click( function () { console.log($("#editview_jira_server_type_div input[name='editview_jira_server_type_options']:checked").val()); $.ajax({ url: "/auth-user/api/arms/jiraServer/updateNodeAndEngineServerInfoUpdate.do", type: "put", data: { c_id: selectServerId, c_title: $("#editview_jira_server_name").val(), c_jira_server_name: $("#editview_jira_server_name").val(), c_jira_server_type: $("#editview_jira_server_type_div input[name='editview_jira_server_type_options']:checked").val(), c_jira_server_base_url: $("#editview_jira_server_base_url").val(), c_jira_server_connect_id: $("#editview_jira_server_connect_id").val(), c_jira_server_connect_pw: $("#editview_jira_pass_token").val(), c_jira_server_contents: CKEDITOR.instances.input_jira_server_editor.getData(), c_server_contents_text_formatting_type: $("#editview_server_text_formatting option:selected").val() }, statusCode: { 200: function () { jSuccess(selectServerName + "의 데이터가 변경되었습니다."); console.log("현재 선택된 항목(c_id, 서버명) :" + selectServerId +", " + selectServerName); //데이터 테이블 데이터 재 로드 makeJiraServerCardDeck() .then(() => { return jiraServerCardClick(selectServerId); }) .catch(error => { console.error('Error occurred:', error); jError(error); }); } } }); }); } //////////////////////////////// // 지라 서버 삭제 버튼 //////////////////////////////// function delete_btn_click() { console.log("삭제 버튼 활성화"); $("#delete_jira_server").click(function () { console.log("selectServerName = " + selectServerName); if (!confirm("정말 삭제하시겠습니까? \n 삭제할 서버명 : " + selectServerName )) { console.log("삭제하지 않음"); } else { $.ajax({ url: "/auth-user/api/arms/jiraServer/removeNode.do", type: "delete", data: { //테이블 형식으로 Card를 나열할 수 있을 것인가. c_id: selectServerId }, statusCode: { 200: function () { jSuccess(selectServerName + "데이터가 삭제되었습니다."); //지라 서버 목록 재 로드 makeJiraServerCardDeck(); } } }); } }); } function create_renew_button_html(type, server_id, project_id = null, additional_class = '', additional_style = '') { return ``; } function type_to_label(type) { switch (type) { case 'almProject': return '프로젝트'; case 'issuePriority': return '이슈우선순위'; case 'issueType': return '이슈유형'; case 'issueStatus': return '이슈상태'; default: return ''; } } function set_renew_btn(selected_tab, select_server_id) { $("#jira_renew_button_div").html(""); let renew_html = ''; if (selected_tab === "almProject") { renew_html = create_renew_button_html('almProject', select_server_id, null, 'jira_project_renew_btn'); } else if (selected_tab === "issuePriority") { renew_html = create_renew_button_html('issuePriority', select_server_id, null, 'jira_project_status_renew_btn'); } else if (selected_tab === "issueStatus") { renew_html = create_renew_button_html('issueStatus', select_server_id, null, 'jira_status_renew_btn'); } else if (selected_tab === "issueType") { renew_html = create_renew_button_html('issueType', select_server_id, null, 'jira_type_renew_btn'); } $("#jira_renew_button_div").html(renew_html); var 라따적용_클래스이름_배열 = ['.jira_project_renew_btn', '.jira_priority_renew_btn', '.jira_type_renew_btn', '.jira_status_renew_btn']; laddaBtnSetting(라따적용_클래스이름_배열); } function set_renew_btn_3rd_grid(selected_tab, select_server_id, select_project_id) { $("#jira_renew_button_div_3rd_grid").html(""); let renew_html = ''; let additional_style = 'width:77%'; if (selected_tab === "issueType") { renew_html = create_renew_button_html('issueType', select_server_id, select_project_id, 'jira_project_type_renew_btn', additional_style); } else if (selected_tab === "issueStatus") { renew_html = create_renew_button_html('issueStatus', select_server_id, select_project_id, 'jira_project_status_renew_btn', additional_style); } $("#jira_renew_button_div_3rd_grid").html(renew_html); var 라따적용_클래스이름_배열 = ['.jira_project_type_renew_btn', '.jira_project_status_renew_btn']; laddaBtnSetting(라따적용_클래스이름_배열); } function tab_click_event() { // 탭 클릭시 이벤트 $('a[data-toggle="tab"]').on("shown.bs.tab", function (e) { var target = $(e.target).attr("href"); // activated tab console.log("[ jiraServer :: tab_click_event ] :: target => " + target); if (isEmpty(selectServerId)) { jError("선택된 ALM 서버가 없습니다. ALM 서버를 선택해주세요. 오류는 무시됩니다."); return; } $("#jira_default_update_div").addClass("hidden"); $("#jira_server_update_div").addClass("hidden"); $("#jira_server_delete_div").addClass("hidden"); $("#jira_renew_button_div").addClass("hidden"); $("#alm_server_renew_button_div").addClass("hidden"); if (target === "#dropdown1") { // 삭제하기 $("#jira_server_delete_div").removeClass("hidden"); $(".body-middle").hide(); } else if (target === "#report") { // 편집하기 $("#jira_server_update_div").removeClass("hidden"); } else if (target === "#related_project") { selectedTab = "almProject"; set_renew_btn(selectedTab, selectServerId); $("#jira_renew_button_div").removeClass("hidden"); $("#alm_server_renew_button_div").removeClass("hidden"); project_dataTableLoad(selectServerId); } else if (target ==="#stats") { // 상세보기, 처음화면 if (selectServerId === undefined) { $(".body-middle").hide(); } else { $(".body-middle").show(); } } else { $("#jira_default_update_div").removeClass("hidden"); if (target ==="#server_issue_priority") { selectedTab = "issuePriority"; $("#server_issue_priority").removeClass("hidden"); set_renew_btn(selectedTab, selectServerId); $("#jira_renew_button_div").removeClass("hidden"); if (isEmpty(selectServerId)) { jError("선택된 ALM 서버가 없습니다. ALM 서버를 선택해주세요. 오류는 무시됩니다."); } display_set_wide_projectTable(); jiraServerDataTable(selectedTab); } if (target === "#issue_type" || target ==="#server_issue_type") { selectedTab = "issueType"; $("#issue_type_table").removeClass("hidden"); $("#default_project_each_update").removeClass("hidden"); if (isEmpty(selectServerId)) { jError("선택된 ALM 서버가 없습니다. ALM 서버를 선택해주세요. 오류는 무시됩니다."); } $("#jira_renew_button_div").removeClass("hidden"); if (selectServerType === "클라우드" || selectServerType === "레드마인_온프레미스") { $("#alm_server_renew_button_div").removeClass("hidden"); $("#jira_default_update_div").addClass("hidden"); $("#jira_renew_button_div_3rd_grid").removeClass("hidden"); set_renew_btn_3rd_grid(selectedTab, selectServerId, selectProjectId); projectIssueTypeDataTable(selectProjectId); } if (selectServerType === "온프레미스") { $("#server_issue_type").removeClass("hidden"); set_renew_btn(selectedTab, selectServerId); jiraServerDataTable(selectedTab); } } if (target === "#issue_status" || target ==="#server_issue_status") { $("#jira_default_update_div").addClass("hidden"); $("#default_project_each_update").addClass("hidden"); selectedTab = "issueStatus"; $("#issue_type_table").addClass("hidden"); $("#issue_status_table").removeClass("hidden"); if (isEmpty(selectServerId)) { jError("선택된 ALM 서버가 없습니다. ALM 서버를 선택해주세요. 오류는 무시됩니다."); } $("#jira_renew_button_div").removeClass("hidden"); if (selectServerType === "클라우드") { $("#alm_server_renew_button_div").removeClass("hidden"); $("#jira_default_update_div").addClass("hidden"); $("#jira_renew_button_div_3rd_grid").removeClass("hidden"); set_renew_btn_3rd_grid(selectedTab, selectServerId, selectProjectId); // projectIssueStatusDataTable(); } if (selectServerType === "온프레미스") { $("#server_issue_status").removeClass("hidden"); set_renew_btn(selectedTab, selectServerId); // jiraServerDataTable(selectedTab); } if (selectServerType === "레드마인_온프레미스") { $("#jira_renew_button_div_3rd_grid").removeClass("hidden"); $("#server_issue_status").removeClass("hidden"); set_renew_btn(selectedTab, selectServerId); display_set_wide_projectTable(); // jiraServerDataTable(selectedTab); } } } }); // 유틸 잠시 의지 $("#setWide_Btn").on("click", function () { $("#jira_default_update_div").addClass("hidden"); display_set_wide_projectTable(); }); } // 갱신 버튼 (project, issueType, issuePriority, issueStatus) function alm_renew(renewJiraType, serverId, projectId) { // 서버 c_id if (serverId === undefined) { serverId = "서버 아이디 정보 없음"; return false; } if (projectId === undefined) { projectId = null; } if (renewJiraType === undefined) { renewJiraType = "갱신할 지라 타입 없음"; return false; } console.log("[ jiraServer :: jira_renew] :: renewJiraType =>" + renewJiraType +" serverId => " + serverId); $.ajax({ url: "/auth-user/api/arms/jiraServer/"+ renewJiraType + "/renewNode.do", type: "put", data: { c_id: serverId, projectCId: projectId}, statusCode: { 200: function () { jSuccess(selectServerName + "의 데이터가 갱신되었습니다."); console.log("현재 선택된 항목(c_id, 서버명) :" + serverId +", " + selectServerName); makeJiraServerCardDeck() .then(() => { //데이터 테이블 데이터 재 로드 if(renewJiraType === 'almProject'){ project_dataTableLoad(selectServerId); } else if (renewJiraType === 'issueStatus') { if (projectId) { renewJiraType = "project_issuestatus"; } } else { jiraServerDataTable(renewJiraType); } }) .catch(error => { console.error('Error occurred:', error); }); } } }); } function alm_server_renew() { let server_c_id = selectServerId; $.ajax({ url: "/auth-user/api/arms/jiraServer/renewServer.do", type: "put", data: { c_id: server_c_id }, statusCode: { 200: function () { jSuccess(selectServerName + " 서버의 전체 항목이 갱신 중입니다."); console.log("현재 선택된 항목(c_id, 서버명) :" + server_c_id +", " + selectServerName); makeJiraServerCardDeck() .then(() => { //데이터 테이블 데이터 재 로드 jiraServerCardClick(server_c_id); }) .catch(error => { console.error('Error occurred:', error); }) .finally(() => { $('a[href="#related_project"]').tab('show'); }); } } }); } function projectIssueTypeDataTable(project_c_id) { var columnList= [ { title:"설정", data: "c_id", className: "dt-body-left", render: function (data, type, row,meta) { if (type === "display") { if(isEmpty(data)) { return `
`; } else { return `
`; } } return data; }, }, { title:"이슈 유형", data: "c_issue_type_name", render: function (data, type, row, meta) { if (type === "display") { if (isEmpty(data)) { return "
N/A
"; } else { return '
' + data + "
"; } } return data; }, className: "dt-body-left", visible: true }, { title:"이슈 유형 아이디", data: "c_issue_type_id", className: "dt-body-left", defaultContent: "
N/A
" } ]; var rowsGroupList = []; //그룹을 안쓰려면 null 처리 var columnDefList = []; var selectList = {}; var orderList = [[1, "asc"]]; var buttonList = []; console.log("[ jiraServer :: projectIssueTypeDataTable ] selectProjectId => " + project_c_id); var jquerySelector = "#issue_type_table"; var ajaxUrl = "/auth-user/api/arms/jiraProject/getProjectIssueType.do?c_id=" + project_c_id; // 사용 예정 var jsonRoot = "response"; var isServerSide = false; dataTableRef = dataTable_build( jquerySelector, ajaxUrl, jsonRoot, columnList, rowsGroupList, columnDefList, selectList, orderList, buttonList, isServerSide ); // ----- 데이터 테이블 빌드 이후 스타일 구성 ------ // //datatable 좌상단 datarow combobox style $(".dataTables_length").find("select:eq(0)").addClass("darkBack"); $(".dataTables_length").find("select:eq(0)").css("min-height", "30px"); $(jquerySelector+' tbody').off('click', 'tr'); } // 이슈 유형, 우선순위 데이터 테이블 처리 function jiraServerDataTable(target) { console.log("[ jiraServer :: jiraServerDataTable] target = " +target); var columnList; var targetAjaxUrl =""; var targetSelector =""; var columnList_type= [ { title:"설정", data: "c_id", className: "dt-body-left", render: function (data, type, row,meta) { if (type === "display") { if(isEmpty(data)) { return `
`; } else { return `
`; } } return data; }, }, { title:"이슈 유형", data: "c_issue_type_name", render: function (data, type, row, meta) { if (type === "display") { if (isEmpty(data)) { return "
N/A
"; } else { return '
' + data + "
"; } } return data; }, className: "dt-body-left", visible: true }, { title:"이슈 유형 아이디", data: "c_issue_type_id", className: "dt-body-left", defaultContent: "
N/A
" } ]; var columnList_priority= [ { title:"설정", data: "c_id", className: "dt-body-left", render: function (data, type, row,meta) { if (type === "display") { if(isEmpty(data)) { return `
`; } else { return `
`; } } return data; }, }, { title:"이슈 우선순위", data: "c_issue_priority_name", render: function (data, type, row, meta) { if (type === "display") { if (isEmpty(data)) { return "
N/A
"; } else { return '
' + data + "
"; } } return data; }, className: "dt-body-left", visible: true }, { title:"이슈 우선순위 아이디", data: "c_issue_priority_id", className: "dt-body-left", defaultContent: "
N/A
" } ]; if(target === "issueType") { columnList = columnList_type; targetAjaxUrl = "getJiraIssueType.do?c_id=" + selectServerId; targetSelector = "#server_issue_type_table"; } if(target === "issuePriority") { columnList = columnList_priority; targetAjaxUrl = "getJiraIssuePriority.do?c_id=" + selectServerId; targetSelector = "#server_issue_priority_table"; } var rowsGroupList = []; //그룹을 안쓰려면 null 처리 var columnDefList = []; var selectList = {}; var orderList = [[1, "asc"]]; var buttonList = []; var jquerySelector = targetSelector; // var ajaxUrl = "/auth-user/api/arms/jiraServer/" + targetAjaxUrl; var jsonRoot = "response"; var isServerSide = false; dataTableRef = dataTable_build( jquerySelector, ajaxUrl, jsonRoot, columnList, rowsGroupList, columnDefList, selectList, orderList, buttonList, isServerSide ); // ----- 데이터 테이블 빌드 이후 스타일 구성 ------ // //datatable 좌상단 datarow combobox style $(".dataTables_length").find("select:eq(0)").addClass("darkBack"); $(".dataTables_length").find("select:eq(0)").css("min-height", "30px"); $(jquerySelector+' tbody').off('click', 'tr'); } function fn_urlHandler(data) { selectRadioId = data; } function default_setting_event() { var ajax_url =""; var sourceCid = ""; $("button[name='default_update']").click( function (){ console.log("[ jiraServer :: default_setting_event ] button[name='default_update'].click :: selectedServerType -> " + selectServerType); if( isEmpty(selectRadioId) ){ jError("설정된 값이 없거나, 변경된 데이터가 없습니다."); return; } if (selectedTab === "issueType" && (selectServerType === "클라우드" || selectServerType === "레드마인_온프레미스")) { sourceCid = selectProjectId; ajax_url = "jiraProject/"+ selectedTab+"/makeDefault.do"; } else if (selectedTab === "issueStatus" && selectServerType === "클라우드") { sourceCid = selectProjectId; ajax_url = "jiraProject/"+ selectedTab+"/makeDefault.do"; } else { // 온프레미스 4가지, 클라우드의 해결책,우선순위 sourceCid = selectServerId; ajax_url = "jiraServer/"+ selectedTab+"/makeDefault.do"; } $.ajax({ url: "/auth-user/api/arms/" + ajax_url, type: "PUT", data: { c_id: sourceCid, targetCid: selectRadioId }, // 지라프로젝트 또는 서버의 아이디 statusCode: { 200: function (data) { console.log(data); jSuccess("기본 설정("+selectedTab+")이 변경되었습니다."); //데이터 테이블 데이터 재 로드 display_set_wide_projectTable(); // 다시 wide 설정으로. if (selectedTab === "issueType" || selectedTab === "issuePriority") { makeJiraServerCardDeck(); } } } }); }); } //지라 프로젝트 - 데이터테이블 프로젝트 명 클릭시, 프로젝트 관련 데이터 가져오는 중 Ajax 오류 픽스(전역 데이터의 undefined) function click_projectList_table(projectName, selectServerType, project_c_id) { selectProjectId = project_c_id; console.log("[ jiraServer :: click_projectList_table ] :: projectName => " + projectName); $(".grid3rd").html(""); // Sender 설정 var selectedHtml = `
선택된 프로젝트 : ` + projectName + `
`; $(".grid3rd").html(selectedHtml); //풀사이즈 그리드이면 줄이고, 호스트 정보를 보여준다 console.log($("#server_info_wrapper")[0].className); console.log("[ jiraServer :: click_projectList_table ] :: selectProjectId => " + project_c_id); if ($("#server_info_wrapper").hasClass("col-lg-7")) { //서버 정보 줄이기 $("#server_info_wrapper").removeClass("col-lg-7").addClass("col-lg-4"); $("#server_project_each_config_wrapper").show(); $("#returnList_Layer").show(); $("#server_info_wrapper").removeClass("fade-out-box"); $("#server_info_wrapper").addClass("fade-in-box"); var box = document.querySelector("#server_info_wrapper"); box.ontransitionend = () => { $("#server_info_wrapper").show(); $("#jira_project_table").DataTable().columns.adjust().responsive.recalc(); }; } if (selectServerType === '레드마인_온프레미스') { $('a[href="#issue_status"]').hide(); } else { $('a[href="#issue_status"]').show(); } selectedTab = "issueType"; $('a[href="#issue_status"]').parent().removeClass('active'); $('#issue_status').removeClass('active'); $("#issue_status_table").addClass("hidden"); $('a[href="#issue_type"]').parent().addClass('active'); $('#issue_type').addClass('active'); $("#issue_type_table").removeClass("hidden"); $("#jira_renew_button_div_3rd_grid").removeClass("hidden"); $("#default_project_each_update").removeClass("hidden"); set_renew_btn_3rd_grid(selectedTab, selectServerId, project_c_id); projectIssueTypeDataTable(project_c_id); } //프로젝트 목록 다시 넓게 쓰기 function display_set_wide_projectTable() { var box = document.querySelector("#server_info_wrapper"); box.ontransitionend = () => { $("#jira_project_table").DataTable().columns.adjust().responsive.recalc(); }; // 테이블 원복 $("table.dataTable > tbody > tr.child ul.dtr-details").css("display", "inline-block;"); //$("#jira_project_table").addClass("dtr-inline collapsed"); // 감추기 $("#returnList_Layer").hide(); $("#server_info_wrapper").removeClass("fade-in-box"); //$("#hostInfo_Wrapper").addClass("fade-out-box"); $("#server_project_each_config_wrapper").hide(); //호스트 테이블 늘이기 $("#server_info_wrapper").removeClass("col-lg-4").addClass("col-lg-7"); } // 자동 슬라이드 function autoSlide(){ $('#carousel-example-generic').carousel({ interval: 5000, }); } function draw_ribbon(alm_server) { let alm_server_type = alm_server.c_jira_server_type; let alm_server_c_id = alm_server.c_id; let ribbonHtmlData = ``; if (alm_server_type === "온프레미스") { if (is_issuetype_ready(alm_server.jiraIssueTypePureEntities)) { ribbonHtmlData += `
Ready
`; } } else { // 지라 클라우드 or 레드마인 온프레미스일 경우 확인 let issue_type_by_project = alm_server.jiraProjectIssueTypePureEntities.every(project => is_issuetype_ready(project.jiraIssueTypePureEntities) ); if (alm_server_type === "레드마인_온프레미스") { const issue_priority = is_issuetype_ready(alm_server.jiraIssuePriorityEntities); if (issue_type_by_project && issue_priority) { ribbonHtmlData += `
Ready
`; } else if (issue_priority) { ribbonHtmlData += create_ribbon_html(`not_ready_modal_popup('${alm_server_c_id}', 'issueType', '${alm_server_type}')`, "Help"); } else if (issue_type_by_project) { ribbonHtmlData += create_ribbon_html(`not_ready_modal_popup('${alm_server_c_id}', 'issuePriority', '${alm_server_type}')`, "Help"); } else { ribbonHtmlData += create_ribbon_html(`not_ready_modal_popup('${alm_server_c_id}', 'both', '${alm_server_type}')`, "Help"); } } else if (alm_server_type === "클라우드") { if (issue_type_by_project) { ribbonHtmlData += `
Ready
`; } else { ribbonHtmlData += create_ribbon_html(`not_ready_modal_popup('${alm_server_c_id}', 'issueType', '${alm_server_type}')`, "Help"); } } } return ribbonHtmlData; } function is_issuetype_ready(entities) { return entities && find_checked_true_entity(entities); } // 기본설정 확인 function find_checked_true_entity(entities) { return entities && entities.length > 0 ? entities.find(entity => entity.c_check === "true") : null; } function create_ribbon_html(on_click_event, button_text) { return `
`; } function not_ready_modal_popup(alm_server_id, type, alm_server_type) { $("#select_server_name").text(serverDataList[alm_server_id].c_title); $("#not_ready_modal").modal("show"); if (alm_server_type === "온프레미스") { alert("이슈 유형 선택이 필요합니다."); move_issuetype_default_setting(alm_server_id, null, null, alm_server_type); } else { not_ready_display(type, alm_server_id); var columnList = [ { name: "c_jira_name", title:"프로젝트 이름", data: "c_jira_name", className: "dt-body-left", visible: true }, { title:"프로젝트 키", data: "c_jira_key", className: "dt-body-left", defaultContent: "
N/A
" }, { title:"프로젝트 아이디", data: "c_desc", className: "dt-body-left", defaultContent: "
N/A
" }, { title:"선택된 이슈유형", data: "jiraIssueTypePureEntities", className: "dt-body-left", defaultContent: "
N/A
" }, { name: "c_id", title: "c_id", data: "c_id", visible: false }, ]; var columnDefList =[]; var columnDefList_issuetype = [ { targets: 3, searchable: true, orderable: true, render: function (data, type, row, meta) { let project_name = row.c_jira_name; let project_c_id = row.c_id; let isCheck = null; for (const rowInfo of data) { if (rowInfo.c_check === "true") { isCheck = rowInfo.c_issue_type_name+"["+rowInfo.c_issue_type_id+"]"; break; } } if(isEmpty(isCheck)) { return ``; } else { return `
${isCheck}
`; } return data; } } ]; columnDefList = columnDefList_issuetype; var rowsGroupList = null; var jquerySelector = "#modal_project_table"; var ajaxUrl = "/auth-user/api/arms/jiraServerProjectPure/getJiraProjectList.do?c_id=" + alm_server_id; var jsonRoot = ""; var selectList = {}; var orderList = [[1, "asc"]]; var buttonList = []; var isServerSide = false; dataTableRef = dataTable_build( jquerySelector, ajaxUrl, jsonRoot, columnList, rowsGroupList, columnDefList, selectList, orderList, buttonList, isServerSide ); $('#modal_project_table tbody').off('click', 'tr'); } } function init_server_account_verification() { isAccountVerified = false; $('#verify_account').text("계정 검증 하기"); } function init_text_formatting(select_box_id) { let select_box = $("#" + select_box_id); // 첫 번째 옵션을 선택합니다. select_box.prop('selectedIndex', 0); // 첫 번째 옵션의 값을 가져옵니다. var first_option_value = select_box.find('option:first').val(); console.log("First option value:", first_option_value); select_box.val(first_option_value).trigger('change'); } function update_radio_buttons(container_selector, value) { $(container_selector + " label").removeClass("active"); $(container_selector + " input[type='radio']:checked").prop("checked", false); let radio_buttons = $(container_selector + " input[type='radio']"); radio_buttons.each(function () { if (value && $(this).val() === value) { $(this).parent().addClass("active"); $(this).prop("checked", true); } }); } function toggle_visibility(element_id, is_visible) { $("#" + element_id).toggleClass("hidden", !is_visible); } function not_ready_button_setting(container_id, button_text, alm_server_id) { const container = $("#" + container_id).empty(); const btnHtml = ``; container.append(btnHtml); } function not_ready_message_setting(container_id, message_text, button_text) { const container = $("#" + container_id).empty(); const msgHtml = ` ${message_text}`; container.append(msgHtml); } function not_ready_display(type, alm_server_id) { toggle_visibility("not_ready_issuetype", true); toggle_visibility("not_ready_priority", false); not_ready_message_setting("not_ready_issuetype_messages", "이슈 유형이 지정되지 않은 프로젝트는 이슈를 생성할 수 없습니다.", "이슈 유형"); if (type === "both") { toggle_visibility("not_ready_priority", true); not_ready_button_setting("not_ready_priority_buttons", "이슈 우선순위", alm_server_id); not_ready_message_setting("not_ready_priority_messages", "이슈 우선순위가 지정되지 않으면 이슈를 생성할 수 없습니다.", "이슈 우선순위"); } } function move_issuetype_default_setting(alm_server_id, project_name, project_c_id, alm_server_type) { selectServerId = alm_server_id; selectProjectId = project_c_id; $("#not_ready_modal").trigger("click"); if (alm_server_type ==="온프레미스") { jiraServerCardClick(alm_server_id) .then(() => { $('a[href="#server_issue_type"]').tab('show') .then(() => { let table = $("#server_issue_type_table").DataTable(); }) .catch(error => { console.error("비동기 작업 중 에러 발생", error); }); }) .catch(error => { console.error("비동기 작업 중 에러 발생", error); }); } else if (alm_server_type ==="클라우드" || alm_server_type ==="레드마인_온프레미스"){ jiraServerCardClick(alm_server_id) .then(() => { $('a[href="#related_project"]').tab('show'); }) .catch(error => { console.error("비동기 작업 중 에러 발생", error); }) .finally(() => { click_projectList_table(project_name, alm_server_type, project_c_id); }); } } function move_issuepriority_default_setting(alm_server_id) { selectServerId = alm_server_id; $("#not_ready_modal").trigger("click"); jiraServerCardClick(alm_server_id) .then(() => { $('a[href="#server_issue_priority"]').tab('show'); }) .catch(error => { console.error("비동기 작업 중 에러 발생", error); }); }