'use strict';
|
|
define(['app', 'angular'],
|
function (app, angular) {
|
return app.config(function ($controllerProvider, $provide, $filterProvider, $compileProvider, $logProvider, $urlRouterProvider, $httpProvider, $translateProvider) {
|
// angularJs + requireJs 연동을 위해하는 셋팅.
|
app.controller = $controllerProvider.register;
|
app.service = $provide.service;
|
app.filter = $filterProvider.register;
|
app.directive = $compileProvider.directive;
|
app.factory = $provide.factory;
|
app.provider = $provide.provider;
|
|
// 매칭되는 url이 없으면 login으로 이동한다.
|
$urlRouterProvider.otherwise(function ($injector) {
|
var $state = $injector.get('$state');
|
$state.go('login');
|
});
|
|
// 통신 인터셉터
|
$httpProvider.interceptors.push('authInterceptor');
|
// ajax 응답을 한번에 묶어 digest roof 실행
|
$httpProvider.useApplyAsync(true);
|
|
// 다국어 설정
|
$translateProvider.useLoader('$translatePartialLoader', {
|
urlTemplate : 'i18n/{lang}/{part}.json'
|
});
|
|
$translateProvider.preferredLanguage('ko');
|
$translateProvider.useCookieStorage();
|
$translateProvider.useSanitizeValueStrategy('escaped');
|
$translateProvider.forceAsyncReload(true);
|
|
// 로그 제어
|
$logProvider.debugEnabled(true);
|
})
|
.run(function ($rootScope, $state, $sce, $log, $injector, $translate, $tableProvider, Principal, Auth, Language, SweetAlert, $filter, Workspace, $resourceProvider, User, constants, Project) {
|
|
$rootScope.$state = $state;
|
// html 태그 웹 보안 적용하여 바인딩.
|
$rootScope.$sce = $sce;
|
// 프로그래스바 표시 여부 결정 값
|
$rootScope.spinner = false;
|
// 웹 소켓으로 관리하는 전체 사용자 정보
|
$rootScope.users = [];
|
// 로그인한 사용자 정보
|
$rootScope.user = undefined;
|
// 전체 워크스페이스 정보
|
$rootScope.workspaces = [];
|
// 사용가능한 전체 프로젝트 정보
|
$rootScope.projects = [];
|
// 현재 사용중인 프로젝트
|
$rootScope.workProject = null;
|
// 현재 프로젝트에 사용중인 이슈 목록(유형)
|
$rootScope.workIssueTypes = [];
|
// 현재 선택중인 이슈 목록
|
$rootScope.issueTypeMenu = null;
|
// 이슈 목록->상세화면에서 마지막으로 접근한 이슈 아이디 - 라우트 탈때마다 초기화
|
$rootScope.currentDetailIssueId = null;
|
// 문의하기
|
$rootScope.information = false;
|
|
// PrimaryWorkspace
|
$rootScope.hasPrimaryWorkspace = false;
|
|
// 최고관리자 존재 여부
|
$rootScope.hasSuperUser = false;
|
|
// 대시보드 선택 0:전체 1:프로젝트
|
$rootScope.dashboard = 0;
|
|
// 웹 소켓 연결 정보
|
$rootScope.webSocket = {
|
socket : null,
|
client : null
|
};
|
|
// get parameter
|
$rootScope.previousGetParams = null;
|
|
// 사용자 사용 언어
|
$rootScope.language = $translate.proposedLanguage(); // 기본 한국어
|
|
// 파일 확장자 - 첨부 허용되는 확장자 모음
|
$rootScope.fileTypeMap = {
|
"hwp" : "DOC",
|
"txt" : "DOC",
|
"pptx" : "DOC",
|
"ppt" : "DOC",
|
"pdf" : "DOC",
|
"xlsx" : "DOC",
|
"xls" : "DOC",
|
"docx" : "DOC",
|
"doc" : "DOC",
|
"jpg" : "IMAGE",
|
"png" : "IMAGE",
|
"gif" : "IMAGE",
|
"jpeg" : "IMAGE",
|
"tif" : "IMAGE",
|
"bmp" : "IMAGE",
|
"wmv" : "MEDIA",
|
"avi" : "MEDIA",
|
"mp4" : "MEDIA",
|
"mkv" : "MEDIA",
|
"mov" : "MEDIA",
|
"zip" : "ETC"
|
};
|
|
// 파일 업로드 허용 바이트
|
$rootScope.fileByte = {
|
image : 10485760, // 10MB
|
file : 314572800 // 100MB
|
};
|
|
// 테이블 설정 및 기능을 관리하는 서비스
|
$rootScope.$tableProvider = $tableProvider;
|
|
// html tag convert - 신뢰할 수 있는 입력 값일 때만 사용, 사용자가 등록하는 값에는 사용 금지
|
$rootScope.trustAsHtml = function (string) {
|
return $sce.trustAsHtml(string);
|
};
|
|
// angular isDefined 은 공백 체크가 안되서 직접 만들어 쓰자.
|
$rootScope.isDefined = function (value) {
|
if (value == null || value === "" || value === undefined) {
|
return false;
|
}
|
|
return true;
|
};
|
|
|
// 이슈 생성, 수정에서 다중 선택, 단일 선택 옵션에 체크되게 해주는 기능
|
$rootScope.selectOption = function (useValues, value) {
|
var result = false;
|
|
// 멀티 셀렉트 일때
|
if (angular.isArray(useValues)) {
|
for (var count in useValues) {
|
if (useValues[count] === value) {
|
result = true;
|
break;
|
}
|
}
|
}
|
else {
|
if (useValues === value) {
|
result = true;
|
}
|
}
|
|
return result;
|
};
|
|
// 업로드한 파일이 이미지 확장자인지 확인
|
$rootScope.checkImageType = function ($file) {
|
var fileTypes = $file.type.split("/");
|
|
if (fileTypes[0] !== "image") {
|
return false;
|
}
|
|
return true;
|
};
|
|
// 파일을 업로드할 때 파일 유형을 확인해주는 기능 - 허용되지 않은 확장자일 때는 첨부 금지
|
$rootScope.checkFileType = function ($file) {
|
var fileName = $file.name.toLowerCase();
|
var pos = fileName.lastIndexOf(".");
|
var ext = fileName.substring(pos + 1);
|
|
if ($rootScope.isDefined($rootScope.fileTypeMap[ext])) {
|
$file.fileType = $rootScope.fileTypeMap[ext];
|
}
|
else {
|
return false;
|
}
|
|
return true;
|
};
|
|
// xss 공격 방지
|
$rootScope.preventXss = function (value) {
|
if (!$rootScope.isDefined(value)) {
|
return "";
|
}
|
|
return value.replace(/(\b)(on\S+)(\s*)=|javascript|(<\s*)(\/*)script/gi, " ");
|
};
|
|
// 암호화
|
$rootScope.encryption = function (text) {
|
// PBKDF2 키 생성
|
var key128Bits100Iterations =
|
CryptoJS.PBKDF2(constants.PASS_PHRASE, CryptoJS.enc.Hex.parse(constants.SALT),
|
{ keySize: constants.KEY_SIZE/32, iterations: constants.ITERATION_COUNT });
|
|
return CryptoJS.AES.encrypt(
|
text,
|
key128Bits100Iterations,
|
{ iv: CryptoJS.enc.Hex.parse(constants.IV) }).toString();
|
};
|
|
// 언어 변경
|
$rootScope.changeLocale = function (locale) {
|
var serverLocale = "";
|
|
switch (locale) {
|
case "ko" :
|
serverLocale = "ko_KR";
|
break;
|
case "en" :
|
serverLocale = "en_US";
|
break;
|
case "ja" :
|
serverLocale = "ja_JP";
|
break;
|
case "vi" :
|
serverLocale = "vi_VN";
|
break;
|
}
|
|
if (!$rootScope.isDefined(serverLocale)) {
|
SweetAlert.swal($filter("translate")("common.failedLanguageChange"), $filter("translate")("common.notSelectedLanguage"), "error"); // "언어 변경 실패", "언어 선택이 되지 않았습니다."
|
}
|
|
Language.change({language : serverLocale}).then(function (result) {
|
if (result.data.message.status === "success") {
|
$translate.use(locale);
|
$translate.refresh(locale);
|
$rootScope.$broadcast("languageChange", {language : locale});
|
}
|
});
|
};
|
|
// 권한 리스트
|
$rootScope.mngPermission = {
|
"USER_PERMISSION_MNG_PARTNER" : 8192,
|
"USER_PERMISSION_MNG_WORKSPACE" : 4096,
|
"USER_PERMISSION_MNG_PROJECT" : 2048,
|
"USER_PERMISSION_MNG_API" : 1024,
|
"USER_PERMISSION_MNG_ISSUE_STATUS" : 512,
|
"USER_PERMISSION_MNG_WORKFLOW" : 256,
|
"USER_PERMISSION_MNG_CUSTOME_FIELD" : 128,
|
"USER_PERMISSION_MNG_ISSUE_TYPE" : 64,
|
"USER_PERMISSION_MNG_NOTICE" : 32,
|
"USER_PERMISSION_MNG_FAQ" : 16,
|
"USER_PERMISSION_MNG_QNA" : 8,
|
"USER_PERMISSION_MNG_EVENT" : 4,
|
"USER_PERMISSION_MNG_GUIDE" : 2,
|
};
|
|
// 현재 선택된 이슈 타입 아이디 가져오기
|
$rootScope.getCurrentIssueTypeId = function () {
|
return $rootScope.issueTypeMenu != null ? $rootScope.issueTypeMenu.id : null;
|
}
|
|
// 현재 선택된 이슈 타입 변경하기
|
$rootScope.setCurrentIssueTypeId = function (issueTypeVo) {
|
if($rootScope.issueTypeMenu !== issueTypeVo) {
|
$rootScope.issueTypeMenu = issueTypeVo;
|
}
|
}
|
|
// 권한을 확인한다
|
$rootScope.checkMngPermission = function (userPermission) {
|
if (!$rootScope.isDefined($rootScope.user)) {
|
return false;
|
}
|
|
var permissionVal = $rootScope.mngPermission[userPermission];
|
|
if (($rootScope.user.permission & permissionVal) !== 0) {
|
return true;
|
}
|
|
return false;
|
};
|
|
// setting 관리자인지 확인한다.
|
$rootScope.checkMngPermissionSettings = function () {
|
if (!$rootScope.isDefined($rootScope.user)) {
|
return false;
|
}
|
|
var permissionVal = $rootScope.mngPermission['USER_PERMISSION_MNG_ISSUE_STATUS'];
|
permissionVal += $rootScope.mngPermission['USER_PERMISSION_MNG_WORKFLOW'];
|
permissionVal += $rootScope.mngPermission['USER_PERMISSION_MNG_CUSTOME_FIELD'];
|
permissionVal += $rootScope.mngPermission['USER_PERMISSION_MNG_ISSUE_TYPE'];
|
|
if ($rootScope.user.permission & permissionVal) {
|
return true;
|
}
|
|
return false;
|
};
|
|
// management 관리자인지 확인한다.
|
$rootScope.checkMngPermissionManager = function () {
|
if (!$rootScope.isDefined($rootScope.user)) {
|
return false;
|
}
|
|
var permissionVal = $rootScope.mngPermission['USER_PERMISSION_MNG_API'];
|
permissionVal += $rootScope.mngPermission['USER_PERMISSION_MNG_NOTICE'];
|
permissionVal += $rootScope.mngPermission['USER_PERMISSION_MNG_FAQ'];
|
permissionVal += $rootScope.mngPermission['USER_PERMISSION_MNG_QNA'];
|
permissionVal += $rootScope.mngPermission['USER_PERMISSION_MNG_EVENT'];
|
permissionVal += $rootScope.mngPermission['USER_PERMISSION_MNG_GUIDE'];
|
|
// zenith edit
|
if ($rootScope.user.permission & permissionVal) {
|
return true;
|
}
|
|
return false;
|
};
|
|
$rootScope.changeLastProject = function (projectId, reload = true, onEvent = true) {
|
if ($rootScope.workProject == null || $rootScope.workProject.id !== projectId ) {
|
if (User != null) {
|
User.updateLastProject($resourceProvider.getContent(
|
{lastProjectId: projectId},
|
$resourceProvider.getPageContent(0, 0))).then(function (result) {
|
|
if (result.data.message.status === "success") {
|
$rootScope.user = result.data.data;
|
$rootScope.projects.forEach(function (el) {
|
if (el.id == projectId) {
|
$rootScope.workProject = el;
|
if (onEvent) {
|
$rootScope.$broadcast("changedLastProject", {id: el.id});
|
}
|
$state.go('dashboards.dashboard');
|
}
|
});
|
// $state.go($state.current, {}, {reload: reload});
|
}
|
});
|
}
|
}
|
};
|
|
|
|
// 프로젝트 관리 권한이 있는지 확인한다
|
$rootScope.checkMngPermissionProject = function () {
|
if (!$rootScope.isDefined($rootScope.user)) {
|
return false;
|
}
|
|
var permissionVal = $rootScope.mngPermission['USER_PERMISSION_MNG_PROJECT'];
|
|
if ($rootScope.user.permission & permissionVal) {
|
return true;
|
}
|
|
return false;
|
};
|
|
$rootScope.findProject = function (projectId) {
|
if ($rootScope.projects != null && $rootScope.projects.length > 0) {
|
for (var i=0; i < $rootScope.projects.length; i++) {
|
if ($rootScope.projects[i].id == projectId) {
|
return $rootScope.projects[i];
|
}
|
}
|
}
|
return null;
|
}
|
|
// // Primary Workspace 확인
|
$rootScope.checkHasPrimaryWorkspace = function () {
|
return $rootScope.hasPrimaryWorkspace;
|
};
|
|
// edit by zenith at 20200801
|
// Check Primary workspace
|
$rootScope.checkPrimaryWorkspace = function () {
|
Workspace.findPrimaryWorkspace($resourceProvider.getContent(
|
{},
|
$resourceProvider.getPageContent(0, 0))).then(function (result) {
|
if (result.data.message.status === "success") {
|
$rootScope.hasPrimaryWorkspace = result.data.data;
|
if (!$rootScope.hasPrimaryWorkspace) {
|
$state.go('superJoin');
|
}
|
} else {
|
$state.go('superJoin');
|
}
|
});
|
};
|
//$rootScope.checkPirmaryWorkspace();
|
|
// 업무 공간 목록 조회
|
$rootScope.getWorkspaceList = function () {
|
Workspace.find($resourceProvider.getContent({},
|
$resourceProvider.getPageContent(0, 0))).then(function (result) {
|
|
if (result.data.message.status === "success") {
|
$rootScope.workspaces = result.data.data;
|
|
// 마지막 접근 업무 공간을 확인한다.
|
$rootScope.checkIncludeLastWorkspace($rootScope.workspaces);
|
}
|
});
|
};
|
|
// 마지막 접근 업무 공간을 확인한다.
|
$rootScope.checkIncludeLastWorkspace = function (workspaces) {
|
// 로그인 정보가 없을 경우에는 수행하지 않는다.
|
if (!$rootScope.isDefined($rootScope.user)) {
|
return;
|
}
|
|
var include = false;
|
|
for (var count in workspaces) {
|
if ($rootScope.user.lastWorkspaceId === workspaces[count].id) {
|
include = true;
|
break;
|
}
|
}
|
|
// 현재 업무 공간에 참여하지 않고 있다면 자신의 업무공간으로 쫓아낸다.
|
if (!include) {
|
User.updateUserSession({}).then(function (result) {
|
if (result.data.message.status === "success") {
|
$rootScope.user = result.data.data; // 전역으로 사용하는 로그인 사용자 정보.
|
SweetAlert.warning($filter("translate")("common.disableParticipationWorkspace"), $filter("translate")("common.disableParticipationWorkspaceMessage"));
|
// edit by zenith at 20200801
|
// direct oug out cause stand alone have just one workspace
|
$rootScope.$broadcast("logout");
|
}
|
else {
|
SweetAlert.error($filter("translate")("common.failedToUpdateParticipatingSessions"), $filter("translate")("common.failedToUpdateParticipatingSessions")); // "참여 세션 업데이트 실패"
|
}
|
});
|
}
|
};
|
|
$rootScope.getUrlParameter = function (){
|
var url = document.location.href;
|
var tokenIndex = url.indexOf('?');
|
var result = [];
|
if (tokenIndex > -1) {
|
var qs = url.substring(tokenIndex + 1).split('&');
|
for (var i = 0, result = {}; i < qs.length; i++) {
|
qs[i] = qs[i].split('=');
|
result[qs[i][0]] = decodeURIComponent(qs[i][1]);
|
}
|
}
|
return result;
|
}
|
|
// 객체에서 키 갯수를 추출한다.
|
$rootScope.getObjectKeys = function (object) {
|
return Object.keys(object).length;
|
};
|
|
// 도움말 다국어 적용
|
$rootScope.translate = function (content) {
|
return $filter("translate")(content);
|
};
|
|
// 문의하기 버튼
|
$rootScope.showaskbtn = function () {
|
var bShow = false;
|
|
if( $rootScope.isDefined($rootScope.user) ) {
|
bShow = true;
|
|
if( $rootScope.toState.name === "qna.list" ||
|
$rootScope.toState.name === "support.support") {
|
bShow = false;
|
}
|
}
|
return bShow;
|
};
|
|
// session check after route
|
$rootScope.$on("$stateChangeStart", function (event, toState, toStateParams) {
|
$("#page-container").trigger("click");
|
$("body").unbind("click");
|
|
var $uibModalStack = $injector.get('$uibModalStack');
|
$uibModalStack.dismissAll();
|
|
// 프로그래스바 숨김.
|
$rootScope.spinner = false;
|
$rootScope.toState = toState;
|
$rootScope.toStateParams = toStateParams;
|
|
// get 파라미터 읽기
|
var params = $rootScope.getUrlParameter();
|
if (Object.keys(params).length > 0) {
|
$rootScope.previousGetParams = params;
|
}
|
|
|
/*if (Principal.isIdentityResolved()) {
|
Auth.authorize();
|
}*/
|
|
// 업무 공간 목록을 갱신한다.
|
$rootScope.getWorkspaceList();
|
});
|
|
// scroll is top after route success
|
$rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {
|
// table orderBy column init setting
|
$tableProvider.setOrderByColumn();
|
$tableProvider.reverse = false;
|
// 이슈 목록->상세화면에서 마지막으로 접근한 이슈 아이디 - 라우트 탈때마다 초기화
|
$rootScope.currentDetailIssueId = null;
|
|
|
$log.debug("toState.name : ", toState.name);
|
$log.debug("$rootScope.previousStateName 확인 : ", $rootScope.previousStateName);
|
|
if (toState.name !== 'login' && $rootScope.previousStateName) {
|
$log.debug("previousStateName : ", fromState.name);
|
$log.debug("fromParams : ", fromParams);
|
$rootScope.previousStateName = fromState.name;
|
$rootScope.previousStateNameParams = fromParams;
|
} else {
|
// edit by zenith at 20200802
|
// for check has primary workspace
|
if (toState.name === 'login' || toState.name === 'join' ) {
|
$rootScope.checkPrimaryWorkspace();
|
}
|
}
|
});
|
|
// if ui-router $http occur error, trigger this event
|
$rootScope.$on('$stateChangeError', function (e) {
|
});
|
|
$rootScope.$on('$stateNotFound', function () {
|
});
|
|
|
$rootScope.$on('$includeContentLoaded', function () {
|
});
|
|
$rootScope.$on('$viewContentLoaded', function () {
|
});
|
|
$rootScope.back = function () {
|
$log.debug("로그인시 마지막 접근 url : ", $rootScope.previousStateName);
|
|
if ($state.get($rootScope.previousStateName) === null || $rootScope.previousStateName === "login" || $rootScope.previousStateName === "join") {
|
$state.go('dashboards.dashboard');
|
}
|
else {
|
$state.go($rootScope.previousStateName, $rootScope.previousStateNameParams);
|
}
|
};
|
})
|
.constant("contextPath", (function () {
|
var offset = location.href.indexOf(location.host) + location.host.length;
|
var ctxPath = location.href.substring(offset, location.href.indexOf('/', offset + 1));
|
|
console.log("경로 : ", ctxPath);
|
|
|
return ctxPath;
|
})());
|
});
|