사용자:Choakira
(문서를 비움) |
|||
1번째 줄: | 1번째 줄: | ||
+ | = 서론 = | ||
+ | RNTier 웹폴더 시스템에 대하여 보다 편리하고 쉽게 설명하기 위해서 작성했다. | ||
+ | 웹폴더는 dhtmlx 에서 제공하는 제공하는 자바 스크립트 라이브러리(jQuery,DOM)를 이용하였다. | ||
+ | index.php 페이지가 기본 뼈대를 만들고, jQuery 로 데이터 및 정보를 가져와 Dhtmlx API 이용해 UI를 구성하는 방식이다. | ||
+ | = 기본 구성 = | ||
+ | == 웹폴더 구성 == | ||
+ | |||
+ | 웹폴더는 크게 폴더탭의 개인폴더, 프로젝트 폴더, 데이터 폴더, 공유 폴더, 업로드 폴더, 템플릿 폴더 등으로 이루어 진다. | ||
+ | 옵션에 따라서 공유 폴더,업로드 폴더, 템플릿 폴더의 유무가 정해진다. | ||
+ | 검색탭에서는 개인폴더,프로젝트폴더,데이터폴더등의 파일들을 검색할수 있다. 파일명,날짜,소유자,속성 등 검색조건에 따라 검색된다. | ||
+ | |||
+ | == index.php == | ||
+ | |||
+ | 웹폴더 뼈대를 생성하는 페이지로 웹폴더 구성이 되는 함수와 사용자권한에 따라서 구성설정을 생성한다. | ||
+ | |||
+ | 소스설명 | ||
+ | |||
+ | include '../inc/env.inc'; //RNTier 의 기본 설정및 전체적인 함수 | ||
+ | include_once 'dc_webfolder.inc'; // 웹폴더 백단에서 돌아가는 모든 함수 | ||
+ | |||
+ | if(dfc_check_capability_user(CAPABILITY_WEBFOLDERADMIN,$_SESSION[_s_capability])) $is_webfolder_perm = 1; //사용자권한 체크 | ||
+ | |||
+ | if ($_GET[act2] == "PRIV_PRJ_ID") // 웹폴더 바로열기 실행시 자기만의 개인 프로젝트 id 를 가져와 work station 접속시에 값을 리턴. | ||
+ | |||
+ | if ($_GET[act2] == "PRJ_ID")// 바로열기 실행시 CDP 가 아닌 CAP 일경우 해당 프로젝트 id 를 가져와 작업제출 폼으로 값을 리턴 | ||
+ | |||
+ | if ($_GET[act2] == "SW_OS_TYPE") // 바로열기 할때 해당 프로그램 OS타입을 가져와 리턴 | ||
+ | |||
+ | <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> //호환성보기를 해제한상태로 호환성보기 버튼을 숨기는 태그 | ||
+ | |||
+ | <javascript> | ||
+ | function omenu_hideopenmenu() // 통합자원 s/w 에 등록된 소프트웨어 리스트들을 전부 가져와 숨긴다. | ||
+ | |||
+ | function omenu_showopenmenu() // 웹폴더에서 선택된 파일에 대한 context 박스를 리턴 | ||
+ | |||
+ | function omenu_showopenmenu_ext() // s/w 등록된 확장자와 사용자가 선택한 파일의 확장자를 비교하여 연결되어 있는 s/w 리스트를 리턴 | ||
+ | |||
+ | function omenu_showopenmenu_ext_check()// 연결되어 있는 s/w 를 실행할수 있는 노드 수와 기본(대표)s/w 를 표시하기 위해 s/w id 디와 s/w os type 리턴 | ||
+ | |||
+ | function loadMask() // 웹폴더 이벤트시 생기는 로딩마크 이벤트 처리 | ||
+ | |||
+ | function omenuCheck()// 해당 프로젝트에 할당된 자원그릅(s/w목록) 을 리턴 | ||
+ | |||
+ | function autoOpenSW()// 해당 파일을 더블클릭(바로실행) 했을때 실행되는 함수로 확장자에 해당하는 s/w 로 연결해준다.. s/w 리스트가 2개 이상 존재하면 레이어 팝업으로 그 s/w 리스트를 출력하고 단일인 경운 바로 해당 s/w 를 연결 | ||
+ | |||
+ | function init2() //가장 핵심적임 함수로 실제로 뼈대에 살을 붙이는 함수로 dhtmlx 를 불러온다. | ||
+ | |||
+ | function omenu_openfile() // 웹폴더 확장자에 등록된 s/w 연결해주는 마지막 함수이다. 위에 나열한 함수를 거쳐 나온 값으로 최종 연결 함수(RunCdpSw)에 리턴한다 | ||
+ | |||
+ | function onButtonClick() // context 박스에서 바로열기를 선택할 경우 실행되는 함수 | ||
+ | |||
+ | function onButtonBlankClick()// blank 용 context 박스의 메뉴를 실행할 경우 | ||
+ | |||
+ | function onButtonTreeClick()// tree 용 context 박스의 메뉴를 실행할 경우 | ||
+ | |||
+ | function check_project_dir_lock() //프로젝트가 사용가능한 프로젝트인지 확인 | ||
+ | </script> | ||
+ | <html> | ||
+ | <div></div> 수많은 div 태그는 이벤트 발생시 해당이벤트 수행 및 수행후 결과 값을 해당 레이어에 출력 하는 용도 | ||
+ | |||
+ | <?=insertGCLauncher();?> /inc/gcLauncher.inc 파일의 insertGCLauncher 함수 안에 있는 수많은 스크립트 함수들을 출력 | ||
+ | |||
+ | function nitResolutionControl()// 접속할려는 work station 이 해상도나 듀얼 모니터 등이 지원되는지를 체크 | ||
+ | |||
+ | |||
+ | == dhxcmd.js == | ||
+ | |||
+ | 뼈대에 살을 붙이는 스크립트로 Object 형태로 클래스로 정의 되어 있는 스크립트 파일이다. | ||
+ | |||
+ | this.init = function() // 레이아웃을 생성 하는 함수로 웹폴더 스킨 파일및 가로 세로 사이즈 등등을 정의하는 함수 | ||
+ | |||
+ | this.init_folder_tree = function() // 왼쪽 트리창 초기화 한다. 트리창의 컨텍스트 메뉴 활성/비활성 초기값을 설정 디렉토리 이동시 마다 xml을 읽어와 해당 포인터 디렉토리 구조를 엔트리 창에 출력한다 | ||
+ | |||
+ | this.init_folder_search = function() // 검색페이지 초기화 | ||
+ | |||
+ | this.init_toolbar = function() //웹폴더 상단 툴바 메뉴 구성 정의 | ||
+ | |||
+ | this.open = function(domain, path, alertCall, onlyOpen) // 웹폴더가 실행할때 초기위치 설정(ex : 개인폴더 의 /aaa/bbb/ 를 초기에 열어라) | ||
+ | |||
+ | this.displayFullPath = function(domain, path) // 웹폴더 오른쪽창 상단에 전체 경로를 넣어주는 함수 | ||
+ | |||
+ | this.loadContentAfterUpload = function(local_paths) // 웹폴더 업로드후 새로생성된 폴더나 파일을 새롭게 로딩해주는 함수 | ||
+ | |||
+ | this.setStatusBar = function(statusType, enforce) //상태창 에 표시에 주는 함수 (ex: 파일 0개 폴더 0개) | ||
+ | |||
+ | this.adjustToolbarState = function(reqObj) // 상단 툴바 메뉴를 동적으로 활성/비활성 컨트롤 해주는 함수 | ||
+ | |||
+ | this._doOnBarClick = function(pane, id,target_type) // 이벤트(삭제,복사,권한설정 등등) 클릭시 호출되는 함수 | ||
+ | |||
+ | this._doParentFolder = function() // 상위 라는 아이콘을 클릭시 호출되는 함수 | ||
+ | |||
+ | this.mkdir = function() // 폴더 생성시 ajax 로 commander.php 에 리턴해주는 함수 | ||
+ | |||
+ | this._doCreateFolder = function() // 이벤트 폴더 만들기 클릭시 폴더 명을 받기 위해 레이어를 띄어주는 함수 | ||
+ | |||
+ | this.doUpload = function() // 업로드 Active x 창에서 업로드 수행시 호출되는 함수 | ||
+ | |||
+ | this._doUploadFile = function() // 업로드를 위한 레이어 띄어주는 함수 | ||
+ | |||
+ | this.get_selected_domain_path = function(target_type) // 이벤트시 선택된 파일이 어떤 domain(내폴더 or 데이터폴더) 인지와 풀페스를 리턴 | ||
+ | |||
+ | this.get_selected_realname2 = function(domain, paths) //이벤트시 선택된 파일의 순수 파일면을 리턴 | ||
+ | |||
+ | this.get_selected_domain_dir_names = function(target_type) //복사나 이동시 선택된 파일의 domain 위치 와 패스 순수 파일명을 리턴 | ||
+ | |||
+ | this._doFolderDetails = function(target_type)//상세정보 보기시 cmd_info.php 에서 정보를 읽어와 리턴된 정보를 레이어에 출력해주는 함수 | ||
+ | |||
+ | this.doSetPermission = function() // 권한설정 창에서 설정한 값을 commander.php 으로 넘겨주고 다시 리턴받은 값으로 이벤트 처리하는함수 | ||
+ | |||
+ | this.doSetIndex = function(after_event) // 속성 설정 창에서 설정한 값을 commander.php 으로 넘겨주고 다시 리턴받은 값으로 이벤트 처리하는함수 | ||
+ | |||
+ | this.doSetApproval = function() // 업로드승인신청 창에서 설정한 값을 commander.php 으로 넘겨주고 다시 리턴받은 값으로 이벤트 처리하는함수 | ||
+ | |||
+ | this.doSetApproval_download // 다운로드승인신청 창에서 설정한 값을 commander.php 으로 넘겨주고 다시 리턴받은 값으로 이벤트 처리하는함수 | ||
+ | |||
+ | this._doPermissionSet = function(target_type, calltype) // 권한설정 폼을 레이어에 띄어주는 함수 | ||
+ | |||
+ | this._doIndexSet = function(target_type, calltype) // 속성설정 폼을 레이어에 띄어주는 함수 | ||
+ | |||
+ | this._miniFolderTree = function() // 작은 폴더 트리 레이어창을 띄어주는 함수 | ||
+ | |||
+ | this._doApproval = function(target_type, calltype) //업로드 승인설정 폼을 레이어에 띄어주는 함수 | ||
+ | |||
+ | this._doApproval_download = function(target_type, calltype) //다운로드 승인설정 폼을 레이어에 띄어주는 함수 | ||
+ | |||
+ | this._doShowWindow = function(w1,text,height) // index 에 정의한 <div> 를 노출하고 옵션을 설정하는 함수 | ||
+ | |||
+ | this.clearWindow = function(divid) // 띄운 <div> 내용을 지워주는 함수 | ||
+ | |||
+ | this.closeWindow = function(divid) // 노출한 <div>를 다시 숨겨주는 함수 | ||
+ | |||
+ | this.doRename = function() // 이름변경 창에서 변경한 값을 commander.php 으로 넘겨주고 다시 리턴받은 값으로 이벤트 처리하는함수 | ||
+ | |||
+ | this.doDownload = function() //다운로드 Active x 창에서 업로드 수행시 호출되는 함수 | ||
+ | |||
+ | this._doDownloadFile = function(target_type) // 다운로드 클릭시 다운로드 권한및 다운로드 가능한파일인지 체크해주는 함수 | ||
+ | |||
+ | jQuery(window).resize(function() // 이미지 미리보기시 웹폴더 크기 비율에 맞게 이미지 크기및 위치를 자동 조절해주는 함수 | ||
+ | |||
+ | this.ajax_remove = function(domain_paths, force, callback) // 삭제 클릭시 commander.php 으로 넘겨주고 리턴받은 값을 처리하는 함수 | ||
+ | |||
+ | this.purgeRemovedItem = function(domain_paths) // 파일 삭제나 이동시 엔트리 창에 해당 항목을 지워주는 함수 | ||
+ | |||
+ | this.ajax_copy_move = function(action, src_domain, src_path, src_names, dst_domain, dst_path, force, callback) // 이동,복사 승인시 commander.php 으로 넘겨주고 리턴받은 값을 처리하는 함수 | ||
+ | |||
+ | this._doOpenpath = function() // 검색페이지에서 해당 파일 위치 바로열기 처리해주는 함수 | ||
+ | |||
+ | == ./js/wf_common.js == | ||
+ | |||
+ | 웹폴더의 이벤트(삭제,이동,권한설정등등) 담당하는 함수이다. | ||
+ | |||
+ | function getRealParam(bitVal, item) // 선택한 항목의 bitVal 값을 비교하여 읽기쓰기 권한 및 폴더인지 파일인지 또한 하위폴더를 가지고 있는지 등등을 체크 | ||
+ | |||
+ | function setRealParam(bitVal, item, setVal) // getRealParam 와 비슷하다.. getRealParam 는 값을 가져오는것이고 이함수는 재구성 하는 함수 | ||
+ | |||
+ | function realowner_chk(realowner) //선택한 항목의 실제 소유자를 체크 파일을 여러개 선택할경우 소유자가 저마다 다를수 있다 그것을 체크 | ||
+ | |||
+ | function getActions(getType, objType, entryIds, userDataObj) // 가장핵심적임 함수로 선택한 항목의 위치(트리,엔트리,빈곳) 과 domain 개인권한 등을 모두 체크하여 이벤트(삭제,복사 등등) 노출 여부와 활성 비활성을 체크한다 | ||
+ | |||
+ | |||
+ | 이 파일의 다른 함수는 크게 수정할일도 없으니 getActions 함수만 집중적으로 설명하겟다 | ||
+ | |||
+ | |||
+ | if(getType == "CONTEXT") var menuItems = new Array("copy","move","remove","detail","attr","permission","foldercreate","rename","upload","download","openfile","approval","approval_download"); | ||
+ | else if(getType == "TOOLBAR") var menuItems = new Array("upfolder","copy","move","remove","detail","attr","permission","foldercreate","rename","upload","download","approval_download"); | ||
+ | else if(getType == "BLANK") var menuItems = new Array("upfolder","foldercreate","upload","refresh"); | ||
+ | //현재 이벤트 항목의 위치가 어디인지 에 따라서 정의해야할 이벤트를 저장 | ||
+ | |||
+ | for(idx in menuItems) { //정의해야할 이벤트를 일단 모두 비활성으로 정의한다. | ||
+ | returnActAry[menuItems[idx]] = false; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | var paramVal = userDataObj.getUserData(entryIds[0],"param"); | ||
+ | //시스템에서 구성된 디렉토리 구조를 xml 형태로 정의 하여 가져오게 되는데 그 xml 로 정의된 내용을 DOM 방식으로 접근하여 param 속성값을 가져온다 | ||
+ | |||
+ | checkPermAry["rw_perm"] = getRealParam(paramVal,"rw_perm"); | ||
+ | checkPermAry["del_perm"] = getRealParam(paramVal,"del_perm"); | ||
+ | checkPermAry["chg_perm"] = getRealParam(paramVal,"chg_perm"); | ||
+ | checkPermAry["down_perm"] = getRealParam(paramVal,"down_perm"); | ||
+ | if(checkPermAry["down_perm"] > 0) checkPermAry["approval_download"]=0; | ||
+ | //위와 같이 paramVal 값을 통하여 쓰기 권한이 있는지 삭제 권한이 있는지 등등을 체크한다 | ||
+ | |||
+ | if(domain == WF_DOMAIN_TEMPLATE_FOLDER){ | ||
+ | if(cLevel == 1 && getType != "BLANK") { | ||
+ | returnActAry["copy"] = false; | ||
+ | returnActAry["download"] = false; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // 위와 같이 domain == WF_DOMAIN_TEMPLATE_FOLDER(domain 이 템플릿 폴더인지) cLevel(현재 항목의 디렉토리 deps) == 1 && getType != "BLANK" 등등 을 비교하여 | ||
+ | returnActAry["copy"] = false; returnActAry["download"] = false; 와 같이 복사와 다운로드 이벤트를 비활성 시키는 로직이다. | ||
+ | |||
+ | |||
+ | == vlist.js == | ||
+ | |||
+ | Dhtmlx API 를 이용해 grid 를 만드는 스크립트 파일이다. | ||
+ | |||
+ | function grid() { // 기본 grid 구성 | ||
+ | grid = new dhtmlXGridObject('gridbox'); // Grid 오브젝트 생성. | ||
+ | //mygrid.setImagePath("./codebase/imgs/"); // path to images required by grid | ||
+ | grid.setHeader("첫번째 컬럼, 두번째 컬럼"); // 컬럼명 지정. | ||
+ | grid.setInitWidths("250,250"); // 컬럼의 width 값 지정. | ||
+ | grid.setColAlign("center,center"); // 컬럼 내의 Alingn 정렬 지정. | ||
+ | grid.setColTypes("ro,ed"); // set column types | ||
+ | grid.setColSorting("int,str"); // set sorting | ||
+ | grid.init(); // initialize grid | ||
+ | grid.setSkin("dhx_skyblue"); // Grid 스킨 지정. | ||
+ | grid.loadXML("xml/grid.xml"); //Grid에 표현할 Data xml 파일을 지정. | ||
+ | } | ||
+ | |||
+ | this.init = function() // 미니 트리구조(복사나 이동 선택시 생성됨) 생성시 수행 하는 함수 | ||
+ | |||
+ | this.init_with_grid // 웹폴더 grid 설정 함수 | ||
+ | |||
+ | |||
+ | this.onShowContextMenu = function (rowId, celInd, grid) // 컨텍스트 박스 메뉴자체를 보이게 하거나 숨기게 하는함수다 | ||
+ | |||
+ | this.addRow , this.deleteRow // 이동, 삭제나 추가시 엔트리에 항목을 추가해주는 함수다 | ||
+ | |||
+ | 이외 기타 다른 함수들이 있는데 쓰임세는 잘 모르겟다 | ||
+ | |||
+ | |||
+ | == mini_category_tree.js == | ||
+ | |||
+ | 웹폴더 카테고리 페이지 관련 스크립트이다... | ||
+ | |||
+ | == mini_folder_entry.js == | ||
+ | |||
+ | 웹폴더 오른쪽 창 엔트리 관련 스크립트이다. 이 스크립트는 prototype 형태로 클래스를 정의하여 사용한다. | ||
+ | |||
+ | dhxcmd.js 에서 아래와 같이 정의하여 사용하고 있다. | ||
+ | |||
+ | this.folderEntry = new folderEntry('webfolder', grid, grid.uid(), true, true); | ||
+ | |||
+ | headers = [ '', PO_NAME, PO_OWNER, PO_SIZE, PO_DATE ]; // 파일명,소유자,파일 크기 등등 명칭 설정 | ||
+ | sortables = [ false, true, true, true, true ]; // sorting 여부 설정 | ||
+ | sizes = "25,290,80,80,130"; // 각 td 단위 사이즈 설정 | ||
+ | aligns = "right,left,center,right,center"; // 각 td 단위 정렬 설정 | ||
+ | resizing = "false,true,true,true,true"; // td 단위로 사이즈 변경 활성/비활성 설정 | ||
+ | tooltip = "false,false,false"; // 툴팁설정 | ||
+ | sortkey = ["type","name","owner","size","mtime"]; //sorting 키 설정 이키를 가지고 xml 정렬을 한다 | ||
+ | |||
+ | folderEntry.prototype.onRowDblClicked = function(item_id) // 엔트리창 항목을 더블클릭하면 수행하는 함수 | ||
+ | |||
+ | folderEntry.prototype.onResultRowDblClicked = function(item_id) // 검색 탭 엔트리창 항목을 더블클릭하면 수행하는 함수 | ||
+ | |||
+ | folderEntry.prototype.addNewFolderItemWithId | ||
+ | folderEntry.prototype.addNewFolderItem | ||
+ | folderEntry.prototype.addEntriesWithListInfos | ||
+ | folderEntry.prototype.build_row_from_list_info | ||
+ | folderEntry.prototype.loadFolderEntries | ||
+ | |||
+ | // 폴더 새로 생성시 수행되는 함수, dhxcmd 에서 loadFolderEntries 함수를 통해서 들어온다 | ||
+ | |||
+ | folderEntry.prototype.addRow = function(id, name, type, size) // 엔트리에 항목을 추가될때 수행하는 함수 | ||
+ | |||
+ | folderEntry.prototype.modifyItem = function(domain, path, list_info) // 항목명이 수정되었을때 수행하는 함수 | ||
+ | |||
+ | folderEntry.prototype.deleteItem = function(domain, path) // 항목 삭제시 수행하는 함수 | ||
+ | |||
+ | folderEntry.prototype.get_selected_domain_paths = function(target_type) | ||
+ | folderEntry.prototype.get_selected_domain_path | ||
+ | //항목 선택시 수행되는 함수 | ||
+ | |||
+ | |||
+ | == mini_folder_tree.js == | ||
+ | |||
+ | mini_folder_entry.js 와 비슷한 성질의 스크립트로 왼쪽창 폴더 트리 관련 스크릡트디아. 이역시 prototype 형태로 클래스를 정의하여 사용한다 | ||
+ | |||
+ | dhxcmd.js 에서 아래와 같이 정의하여 사용하고 있다. | ||
+ | |||
+ | this.folderTree = new folderTree(null, tree); | ||
+ | |||
+ | |||
+ | this.dhtmlxTree.attachEvent("onSelect", function(id) | ||
+ | folderTree.prototype.onTreeSelect | ||
+ | // 왼쪽 트리창 항목을 선택 했을 경우 수행하는 함수 | ||
+ | |||
+ | this.dhtmlxTree.attachEvent("onDblClick", function(id) //왼쪽 트리창 항목을 더블클릭 했을 경우 수행하는 함수 | ||
+ | |||
+ | if(!mini_tree) // 지금 현재의 트리창이 미니창(복사나 이동시 뜨는창) 인지 비교하는 로직 | ||
+ | |||
+ | folderTree.prototype.openFullpathTree = function(domain, path, base_path, openPath)// 트리를 더블클릭으로 열때 수행된다. | ||
+ | |||
+ | folderTree.prototype.onShowContextMenuTree = function (rowId, celInd, grid) // 트리에서 컨텍스트 박스 메뉴를 열때 수행된다 | ||
+ | |||
+ | folderTree.prototype.get_selected_domain_path = function()//트리에서 항목을 선택시 해당 항목의 full path 를 리턴한다 | ||
+ | |||
+ | folderTree.prototype.getFullPath = function(domain, path)//트리에서 항목을 선택시 해당 path 를 deps 별로 리턴한다. | ||
+ | |||
+ | folderTree.prototype.addNewTreeItem = function(domain, path, list_info) //트리에 항목이 추가 될경우 수행하는 함수 | ||
+ | |||
+ | folderTree.prototype.modifyItem = function(domain, path, list_info) //트리의 항목명(폴더명) 이 수정될경우 수행하는 함수 | ||
+ | |||
+ | folderTree.prototype.deleteItem = function(domain, path, move_to_parent) | ||
+ | folderTree.prototype.removeObsoleteTreeItems = function(domain, path, list_infos) | ||
+ | //트리창에 항목이 제거 되었을 경우 수행한다 | ||
+ | |||
+ | folderTree.prototype.loadTreeEntries = function(domain, path, list_infos)//이벤트(삭제,이동,폴더생성)를 수행후 트리를 로딩시 수행하는 함수 | ||
+ | |||
+ | folderTree.prototype.loadEntries = function(domain, path) // domain 이동이나 다른 디렉토리로 포인터를 이동시 xml 로 해당 디렉토리 구조를 읽어와 트리창에 출력한다 | ||
+ | |||
+ | |||
+ | == commander.php== | ||
+ | |||
+ | 웹폴더에서 DB 접근이나 back 단 접근이 필요한 이벤트가 발생시 commander.php 를 거쳐서 정보를 받아온다. | ||
+ | 거의 모든 이벤트는 이 파일을 거쳐 정보를 받아 온다고 생각하면 된다. | ||
+ | |||
+ | function get_tree_xml($domain, $basepath, $pathAry, $level, $eachpathAry, $withFiles,$is_symlink="") | ||
+ | // 웹폴더 왼쪽 트리창에 표시할때 필요한 xml 정보를 받아오는 함수이다. 재귀적 함수이다. | ||
+ | |||
+ | function dsp_category_entries($path, $categoryidAry, $sortkey, $order, $perPage, $CLPage) | ||
+ | //웹폴더 카테고리탭 페이지의 엔트리 리스트를 표시할때 필요한 xml 정보는 받아오는 함수 | ||
+ | |||
+ | function makeParamVal($list_info) // xml 의 param 속성값을 리턴하는 함수이다. 웹폴더 권한을 설정하는 매우 중요한 속성이다 | ||
+ | |||
+ | function get_item_image($list_info, $domain, $path) // 웹폴더 엔트리창의 파일별 이미지를 리턴하는 함수 | ||
+ | |||
+ | if ($_REQUEST['action'] == 'swcheck' ) // 웹폴더 바로열기에 관련된 함수로 확장자에 등록된 s/w 가 있는지 채크한다. | ||
+ | |||
+ | if ($_REQUEST['action'] == 'searchIndex' ) //웹폴더 검색 페이지에서 검색 조건에 맞게 결과값을 리턴해준다 | ||
+ | |||
+ | if ($_REQUEST['action'] == 'readFolder' || $_REQUEST['action']=="getContents") | ||
+ | // 웹폴더 엔트리창 리스트를 표시할때 필요한 xml 정보를 가져오는 로직으로 매우 중요하여 자세히 설명하겠다. | ||
+ | |||
+ | $download_app[$rows['owner'].$rows['file_list_path']]=array($rows['file_type'] => 'apply','down_result_date' => $down_result_date,'file_size' => $rows['file_size'],'file_date' => $rows['file_date']); | ||
+ | // 파일별 다운로드가 승인된 항목을 배열에 저장하는 로직이다. 소유가 파일크기 파일타임 생성날짜등이 저장 | ||
+ | |||
+ | $_wf->wf_list($_SESSION['_s_user_srl_id'], $domain, $path, $entries, $_REQUEST['sortkey'], $_REQUEST['order']) == WF_OK) | ||
+ | |||
+ | //$_wf->wf_list 를 이용하여 시스템(back) 단에 디렉토리 구조를 $entries 배열변수에 받아온다. | ||
+ | |||
+ | if(((($download_app[$key_]['file_size'] ==$entry['size'] && $download_app[$key_]['file_date'] ==$entry['mtime']) || $entry['type'] ==2 ) && $download_app[$key_][$selected_type]) || @strstr(strtoupper($GL_DOWNLOAD_AUTO_APPROVAL),strtoupper($disp_name_ext))) { //다운로드가 가능한지 비교 | ||
+ | // $apply="(d)"; //추후에 이미지로 표현 지금은 임시로 텍스트로 표현한다 | ||
+ | $list_info['down_perm'] = 1; //다운로드 권한 | ||
+ | } else { | ||
+ | // $apply=""; | ||
+ | $list_info['down_perm'] = 0; //다운로드 권한 | ||
+ | } | ||
+ | //다운로드 권한 체크 끝 2013-10-22 by boyoon | ||
+ | |||
+ | $list_info['disp_name'] = $entry['disp_name']; | ||
+ | $list_info['desc'] = (@$entry['desc']) ? $entry['desc']: $entry['disp_name']; | ||
+ | $list_info['has_subdir'] = $entry['has_subdir']; | ||
+ | $list_info['rw_perm'] = $entry['rw_perm']; // 0 : 권한없음, 1 : 읽기전용, 2 : 읽기쓰기 | ||
+ | |||
+ | |||
+ | $list_info['del_perm'] = $entry['del_perm']; //삭제 권한 | ||
+ | $list_info['chg_perm'] = $newstr = str_replace(array("\r\n", "\n", "\r"), "", $entry['chg_perm']); //권한 설정 권한 | ||
+ | $list_info['size'] = get_human_readable_filesize($entry['size']); | ||
+ | // $list_info['size'] = "10"; | ||
+ | $list_info['owner'] = $entry['owner_id']; | ||
+ | $list_info['mtime'] = $entry['mtime']; | ||
+ | $list_info['shared'] = $entry['shared']; | ||
+ | $list_info['has_acl_perms'] = $entry['has_acl_perms']; //값이 1이면 acl이 세팅된 개체입니다. | ||
+ | |||
+ | if($entry['is_symlink']) $list_info['is_symlink'] = $entry['is_symlink']; //심볼릭 링크인지 확인 2013-11-07 | ||
+ | else $list_info['is_symlink'] = $_REQUEST['is_symlink']; | ||
+ | |||
+ | // 위의 형태로 다운로드 권한,읽기,쓰기,삭제 권한과 파일크기, 소유자, 공유타입,심볼릭링크 타입 등등의 정보를 활용하여 xml 형태로 리턴해준다. | ||
+ | |||
+ | if ($_REQUEST['action'] == 'readFullpathFolder') //웹폴더 초기에 위에 설명했던 get_tree_xml 를 이용해 왼쪽 트리창 표시해줄 정보를 전부 읽어온다. | ||
+ | |||
+ | |||
+ | if ($_REQUEST['action'] == 'createFolder') // 폴더생성할때의 로직 | ||
+ | |||
+ | if ($_REQUEST['action'] == 'removeFile') // 폴더나 파일 삭제 로직 | ||
+ | |||
+ | if($_REQUEST['action'] == 'copyFile')// 복사할때 로직 | ||
+ | |||
+ | if ($_REQUEST['action'] == 'moveFile') //이동할때 로직 | ||
+ | |||
+ | if ($_REQUEST['action'] == 'rename') // 이름 변경 로직 | ||
+ | |||
+ | if ($_REQUEST['action'] == 'setPermission') // 권한 설정할때 로직 | ||
+ | |||
+ | if ($_REQUEST['action'] == 'indexSaveData')//속성설정할때 로직 | ||
+ | |||
+ | if($_REQUEST['subaction']=='approvalRequest') //데이터 업로드 승인요청 처리 할때 로직 | ||
+ | |||
+ | if($_REQUEST['action']=='approvalDownload')//다운로드 승인요청할때 로직 | ||
+ | |||
+ | if ($_REQUEST['action'] == 'checkDownloadPerm') //다운로드할때 이 파일이 다운로드 권한이 있는지를 체크하는 로직 | ||
+ | |||
+ | |||
+ | == dc_webfolder.inc == | ||
+ | |||
+ | //시스템(back) 단 정보나 이벤트가 필요할때 사용되는 함수이다. 백단에서의 이벤트 결과를 받아서 commander.php 파일에 결과값을 던져 주는 class 형태 파일이다. | ||
+ | |||
+ | function get_user_id($user_srl_id, &$is_sysadmin) // user_srl_id 으로 user_id 를 가져오고 admin 권한이 있는지 체크 | ||
+ | |||
+ | function get_share_infos($owner_srl_id, $user_id, $groups, $project_code, $share_name, $path, $share_srl_id = 0) | ||
+ | //해당 폴더의 공유정보를 처리하는 함수 | ||
+ | |||
+ | private function query_is_project_member($project_id, $user_srl_id, &$is_admin) | ||
+ | //해당 프로젝트의 구성원과 해당 프로젝트 super user 정보를 가져온다 | ||
+ | |||
+ | private function query_get_project_infos($user_srl_id, $is_my_project = true) | ||
+ | //해당 프로젝트 정보를 가져온다 | ||
+ | |||
+ | function set_permission_policy($domain, $path, $perm_info, &$info) | ||
+ | //시스템 단에서 넘어온 권한 정보를 다시한번 재구성해서 리턴해준다 | ||
+ | |||
+ | function get_perm($user_srl_id, $domain, &$path, &$perm_info,$is_minfo=true,$is_sysadmin=false) | ||
+ | //해당 폴더나 파일의 권한정보를 시스템단, DB단,set_permission_policy() 함수를 거친 재구성단 등등에서 가져온다. | ||
+ | private function get_sysperm($user_id, $domain, $path, $perm_info, &$ret,$is_minfo=true) | ||
+ | //해당 폴더나 파일의 권한 정보를 시스템단에서 가져온다. | ||
+ | |||
+ | function get_list($user_id, $domain, $path, $rpath, $shared_names, $allowed_names, &$entries, $no_children = false, $share_perm_type = WF_PERM_READONLY, $sort_key, $sort_type,$is_sysadmin=false) | ||
+ | //웹폴더 엔트리창에 출력해줄 파일 이나 폴더의 정보를 가져온다. 권한,사이즈.소유자,생성일자 등등의 정보를 가져온다. | ||
+ | |||
+ | function wf_list($user_srl_id, $domain, $path, &$entries, $sort_key = "name", $sort_type = "asc") | ||
+ | // 위의 get_list() get_perm() set_permission_policy() 를 포함하고 있는 함수로 엔트리창에 출력해줄 파일이나 폴더 정보를 가져와 commander.php 에 리턴해준다. | ||
+ | |||
+ | function wf_info($user_srl_id, $domain, $path, &$info,$is_minfo=true) | ||
+ | //wf_list 는 여러개의 파일정보를 가져오는것이고 wf_info 단하나의 파일이나 폴더의 더 많은 자세한 정보를 가져오는 함수 | ||
+ | |||
+ | function wf_preview($user_srl_id, $domain, $path, &$info) | ||
+ | // 웹폴더에서 이미지 미리보기나 txt 미리보기시 수행하는 함수 | ||
+ | |||
+ | function wf_copy($user_srl_id, $src_targets, $dst_domain, $dst_path, $force, &$err, $not_use_a = false, $acl_perms = array(), $is_mv = false) | ||
+ | //복사와 이동할때 사용하는 함수다 $is_mv 값이 true 로 넘어 오면 이동이다. | ||
+ | |||
+ | function wf_check_exist($new_name_postfix, $dst_name_rpath, &$new_name) | ||
+ | // 파일이나 폴더 이름을 체크하여 동일한 이름이 있으면 새로운 이름으로 교체하여 리턴 | ||
+ | |||
+ | function wf_mv2($user_srl_id, $src_targets, $dst_domain, $dst_path, $force = false, &$err) | ||
+ | // 파일이나 폴더 이동시 사용되는 함수로 wf_copy() 함수로 이동할수 없는 상황일 경우 쓴다. | ||
+ | |||
+ | function wf_set_sys_permission($user_srl_id, $targets, $perms) | ||
+ | function set_sys_permission_acl($user_srl_id, $targets, $perms, $is_perm_target_recur, $is_perm_target_only_files) | ||
+ | function wf_set_sys_permission_acl($user_srl_id, $targets, $sys_perms) | ||
+ | function wf_set_sys_permission_ugo($user_srl_id, $targets, $perms) | ||
+ | // 시스템상의 setfacl 명령어를 통해 확장권한등을 처리하는 함수 | ||
+ | |||
+ | |||
+ | function compare_share_info($share_infos, $cmp_info) | ||
+ | function wf_set_share_permission($user_srl_id, $domain, $path, $new_share_infos) | ||
+ | //공유권한설정을 처리하는 함수 | ||
+ | |||
+ | |||
+ | function wf_set_permission($user_srl_id, $domain, $path, $sys_perm_info, $share_perm_infos) | ||
+ | //권한설정을 처리하는 함수 | ||
+ | |||
+ | function do_upload_file($rpath, $total_size, $offset, &$upload_size, &$is_completed) | ||
+ | function wf_upload_dir($user_srl_id, $domain, $path, $names) | ||
+ | function wf_upload($user_srl_id, $domain, $path, $name, $offset, $total_size, $type, $force = false, &$upload_size, &$rpath, &$is_completed) | ||
+ | function wf_upload_infos($user_srl_id, $domain, $path, $names) | ||
+ | //업로드실행시 수행되는 함수 | ||
+ | |||
+ | function wf_download($user_srl_id, $domain, $path, $offset, &$downloaded_size, &$rpath) | ||
+ | function wf_download_infos($user_srl_id, $targets, $download_confirm = 0) | ||
+ | function wf_download_get_infos($user_srl_id, $path) | ||
+ | //다운로드실행시 수행되는 함수 | ||
+ | |||
+ | |||
+ | function initialize_upload_domain($user_id, $path) | ||
+ | //웹폴더에서의 업로드 폴더에 대한 초기 구성하는 함수이다. | ||
+ | |||
+ | == wfhandler.php == | ||
+ | 시스템단에 정보를 요청하고 변경하고 지우는 작업을 하는 함수이다. class 형태로 된 파일이다. | ||
+ | |||
+ | static public function wfh_list($rpath, $user_id, $group_id, $allowed_folders, $folder_only = true, $sort_target, $sort_type, $notuse_acl = 0) | ||
+ | // $process = proc_open("$GL_ENSH_HOME/bin/wfhandler", $spec, $pipes); 라는 명령어로 해당 폴더나 파일의 정보를 가져와 리턴해준다. /bin/wfhandler 은 시스템상에 컴파일되어 있는 라이브러리 파일이다 | ||
+ | |||
+ | public function wfh_info($rpath, $name, $user_id, $group_id, $is_minfo=true, $notuse_acl = 0) | ||
+ | //wfh_list 함수와 비슷한 역활 다만 하나의 폴더 또는 파일의 정보만 가져온다. | ||
+ | |||
+ | public function wfh_upload($rpath, $offset, $total_size, &$uploaded_size, &$is_completed) | ||
+ | // 함수명으로 알수 있듯이 파일 업로드시 수행한다. | ||
+ | |||
+ | public function wfh_checkfile($targets, $user_id, $group_id, $mode, $confirm_infos, $need_confirm, $auto_approval) | ||
+ | //파일 업로드나 다운로드시 파일에 대한 정보를 가져와 리턴해준다. |
2014년 3월 10일 (월) 10:23 판
목차 |
서론
RNTier 웹폴더 시스템에 대하여 보다 편리하고 쉽게 설명하기 위해서 작성했다. 웹폴더는 dhtmlx 에서 제공하는 제공하는 자바 스크립트 라이브러리(jQuery,DOM)를 이용하였다. index.php 페이지가 기본 뼈대를 만들고, jQuery 로 데이터 및 정보를 가져와 Dhtmlx API 이용해 UI를 구성하는 방식이다.
기본 구성
웹폴더 구성
웹폴더는 크게 폴더탭의 개인폴더, 프로젝트 폴더, 데이터 폴더, 공유 폴더, 업로드 폴더, 템플릿 폴더 등으로 이루어 진다. 옵션에 따라서 공유 폴더,업로드 폴더, 템플릿 폴더의 유무가 정해진다. 검색탭에서는 개인폴더,프로젝트폴더,데이터폴더등의 파일들을 검색할수 있다. 파일명,날짜,소유자,속성 등 검색조건에 따라 검색된다.
index.php
웹폴더 뼈대를 생성하는 페이지로 웹폴더 구성이 되는 함수와 사용자권한에 따라서 구성설정을 생성한다.
소스설명
include '../inc/env.inc'; //RNTier 의 기본 설정및 전체적인 함수 include_once 'dc_webfolder.inc'; // 웹폴더 백단에서 돌아가는 모든 함수
if(dfc_check_capability_user(CAPABILITY_WEBFOLDERADMIN,$_SESSION[_s_capability])) $is_webfolder_perm = 1; //사용자권한 체크
if ($_GET[act2] == "PRIV_PRJ_ID") // 웹폴더 바로열기 실행시 자기만의 개인 프로젝트 id 를 가져와 work station 접속시에 값을 리턴.
if ($_GET[act2] == "PRJ_ID")// 바로열기 실행시 CDP 가 아닌 CAP 일경우 해당 프로젝트 id 를 가져와 작업제출 폼으로 값을 리턴
if ($_GET[act2] == "SW_OS_TYPE") // 바로열기 할때 해당 프로그램 OS타입을 가져와 리턴
<meta http-equiv="X-UA-Compatible" content="IE=Edge" /> //호환성보기를 해제한상태로 호환성보기 버튼을 숨기는 태그
<javascript> function omenu_hideopenmenu() // 통합자원 s/w 에 등록된 소프트웨어 리스트들을 전부 가져와 숨긴다.
function omenu_showopenmenu() // 웹폴더에서 선택된 파일에 대한 context 박스를 리턴
function omenu_showopenmenu_ext() // s/w 등록된 확장자와 사용자가 선택한 파일의 확장자를 비교하여 연결되어 있는 s/w 리스트를 리턴
function omenu_showopenmenu_ext_check()// 연결되어 있는 s/w 를 실행할수 있는 노드 수와 기본(대표)s/w 를 표시하기 위해 s/w id 디와 s/w os type 리턴
function loadMask() // 웹폴더 이벤트시 생기는 로딩마크 이벤트 처리
function omenuCheck()// 해당 프로젝트에 할당된 자원그릅(s/w목록) 을 리턴
function autoOpenSW()// 해당 파일을 더블클릭(바로실행) 했을때 실행되는 함수로 확장자에 해당하는 s/w 로 연결해준다.. s/w 리스트가 2개 이상 존재하면 레이어 팝업으로 그 s/w 리스트를 출력하고 단일인 경운 바로 해당 s/w 를 연결
function init2() //가장 핵심적임 함수로 실제로 뼈대에 살을 붙이는 함수로 dhtmlx 를 불러온다.
function omenu_openfile() // 웹폴더 확장자에 등록된 s/w 연결해주는 마지막 함수이다. 위에 나열한 함수를 거쳐 나온 값으로 최종 연결 함수(RunCdpSw)에 리턴한다
function onButtonClick() // context 박스에서 바로열기를 선택할 경우 실행되는 함수
function onButtonBlankClick()// blank 용 context 박스의 메뉴를 실행할 경우
function onButtonTreeClick()// tree 용 context 박스의 메뉴를 실행할 경우
function check_project_dir_lock() //프로젝트가 사용가능한 프로젝트인지 확인 </script> <html>
수많은 div 태그는 이벤트 발생시 해당이벤트 수행 및 수행후 결과 값을 해당 레이어에 출력 하는 용도<?=insertGCLauncher();?> /inc/gcLauncher.inc 파일의 insertGCLauncher 함수 안에 있는 수많은 스크립트 함수들을 출력
function nitResolutionControl()// 접속할려는 work station 이 해상도나 듀얼 모니터 등이 지원되는지를 체크
== dhxcmd.js ==
뼈대에 살을 붙이는 스크립트로 Object 형태로 클래스로 정의 되어 있는 스크립트 파일이다.
this.init = function() // 레이아웃을 생성 하는 함수로 웹폴더 스킨 파일및 가로 세로 사이즈 등등을 정의하는 함수
this.init_folder_tree = function() // 왼쪽 트리창 초기화 한다. 트리창의 컨텍스트 메뉴 활성/비활성 초기값을 설정 디렉토리 이동시 마다 xml을 읽어와 해당 포인터 디렉토리 구조를 엔트리 창에 출력한다
this.init_folder_search = function() // 검색페이지 초기화
this.init_toolbar = function() //웹폴더 상단 툴바 메뉴 구성 정의
this.open = function(domain, path, alertCall, onlyOpen) // 웹폴더가 실행할때 초기위치 설정(ex : 개인폴더 의 /aaa/bbb/ 를 초기에 열어라)
this.displayFullPath = function(domain, path) // 웹폴더 오른쪽창 상단에 전체 경로를 넣어주는 함수
this.loadContentAfterUpload = function(local_paths) // 웹폴더 업로드후 새로생성된 폴더나 파일을 새롭게 로딩해주는 함수
this.setStatusBar = function(statusType, enforce) //상태창 에 표시에 주는 함수 (ex: 파일 0개 폴더 0개)
this.adjustToolbarState = function(reqObj) // 상단 툴바 메뉴를 동적으로 활성/비활성 컨트롤 해주는 함수
this._doOnBarClick = function(pane, id,target_type) // 이벤트(삭제,복사,권한설정 등등) 클릭시 호출되는 함수
this._doParentFolder = function() // 상위 라는 아이콘을 클릭시 호출되는 함수
this.mkdir = function() // 폴더 생성시 ajax 로 commander.php 에 리턴해주는 함수
this._doCreateFolder = function() // 이벤트 폴더 만들기 클릭시 폴더 명을 받기 위해 레이어를 띄어주는 함수
this.doUpload = function() // 업로드 Active x 창에서 업로드 수행시 호출되는 함수
this._doUploadFile = function() // 업로드를 위한 레이어 띄어주는 함수
this.get_selected_domain_path = function(target_type) // 이벤트시 선택된 파일이 어떤 domain(내폴더 or 데이터폴더) 인지와 풀페스를 리턴
this.get_selected_realname2 = function(domain, paths) //이벤트시 선택된 파일의 순수 파일면을 리턴
this.get_selected_domain_dir_names = function(target_type) //복사나 이동시 선택된 파일의 domain 위치 와 패스 순수 파일명을 리턴
this._doFolderDetails = function(target_type)//상세정보 보기시 cmd_info.php 에서 정보를 읽어와 리턴된 정보를 레이어에 출력해주는 함수
this.doSetPermission = function() // 권한설정 창에서 설정한 값을 commander.php 으로 넘겨주고 다시 리턴받은 값으로 이벤트 처리하는함수
this.doSetIndex = function(after_event) // 속성 설정 창에서 설정한 값을 commander.php 으로 넘겨주고 다시 리턴받은 값으로 이벤트 처리하는함수
this.doSetApproval = function() // 업로드승인신청 창에서 설정한 값을 commander.php 으로 넘겨주고 다시 리턴받은 값으로 이벤트 처리하는함수
this.doSetApproval_download // 다운로드승인신청 창에서 설정한 값을 commander.php 으로 넘겨주고 다시 리턴받은 값으로 이벤트 처리하는함수
this._doPermissionSet = function(target_type, calltype) // 권한설정 폼을 레이어에 띄어주는 함수
this._doIndexSet = function(target_type, calltype) // 속성설정 폼을 레이어에 띄어주는 함수
this._miniFolderTree = function() // 작은 폴더 트리 레이어창을 띄어주는 함수
this._doApproval = function(target_type, calltype) //업로드 승인설정 폼을 레이어에 띄어주는 함수
this._doApproval_download = function(target_type, calltype) //다운로드 승인설정 폼을 레이어에 띄어주는 함수
this._doShowWindow = function(w1,text,height) // index 에 정의한this.doRename = function() // 이름변경 창에서 변경한 값을 commander.php 으로 넘겨주고 다시 리턴받은 값으로 이벤트 처리하는함수
this.doDownload = function() //다운로드 Active x 창에서 업로드 수행시 호출되는 함수
this._doDownloadFile = function(target_type) // 다운로드 클릭시 다운로드 권한및 다운로드 가능한파일인지 체크해주는 함수
jQuery(window).resize(function() // 이미지 미리보기시 웹폴더 크기 비율에 맞게 이미지 크기및 위치를 자동 조절해주는 함수
this.ajax_remove = function(domain_paths, force, callback) // 삭제 클릭시 commander.php 으로 넘겨주고 리턴받은 값을 처리하는 함수
this.purgeRemovedItem = function(domain_paths) // 파일 삭제나 이동시 엔트리 창에 해당 항목을 지워주는 함수
this.ajax_copy_move = function(action, src_domain, src_path, src_names, dst_domain, dst_path, force, callback) // 이동,복사 승인시 commander.php 으로 넘겨주고 리턴받은 값을 처리하는 함수
this._doOpenpath = function() // 검색페이지에서 해당 파일 위치 바로열기 처리해주는 함수
== ./js/wf_common.js ==
웹폴더의 이벤트(삭제,이동,권한설정등등) 담당하는 함수이다.
function getRealParam(bitVal, item) // 선택한 항목의 bitVal 값을 비교하여 읽기쓰기 권한 및 폴더인지 파일인지 또한 하위폴더를 가지고 있는지 등등을 체크
function setRealParam(bitVal, item, setVal) // getRealParam 와 비슷하다.. getRealParam 는 값을 가져오는것이고 이함수는 재구성 하는 함수
function realowner_chk(realowner) //선택한 항목의 실제 소유자를 체크 파일을 여러개 선택할경우 소유자가 저마다 다를수 있다 그것을 체크
function getActions(getType, objType, entryIds, userDataObj) // 가장핵심적임 함수로 선택한 항목의 위치(트리,엔트리,빈곳) 과 domain 개인권한 등을 모두 체크하여 이벤트(삭제,복사 등등) 노출 여부와 활성 비활성을 체크한다
이 파일의 다른 함수는 크게 수정할일도 없으니 getActions 함수만 집중적으로 설명하겟다
if(getType == "CONTEXT") var menuItems = new Array("copy","move","remove","detail","attr","permission","foldercreate","rename","upload","download","openfile","approval","approval_download");
else if(getType == "TOOLBAR") var menuItems = new Array("upfolder","copy","move","remove","detail","attr","permission","foldercreate","rename","upload","download","approval_download");
else if(getType == "BLANK") var menuItems = new Array("upfolder","foldercreate","upload","refresh");
//현재 이벤트 항목의 위치가 어디인지 에 따라서 정의해야할 이벤트를 저장
for(idx in menuItems) { //정의해야할 이벤트를 일단 모두 비활성으로 정의한다. returnActAry[menuItems[idx]] = false; }
var paramVal = userDataObj.getUserData(entryIds[0],"param"); //시스템에서 구성된 디렉토리 구조를 xml 형태로 정의 하여 가져오게 되는데 그 xml 로 정의된 내용을 DOM 방식으로 접근하여 param 속성값을 가져온다
checkPermAry["rw_perm"] = getRealParam(paramVal,"rw_perm"); checkPermAry["del_perm"] = getRealParam(paramVal,"del_perm"); checkPermAry["chg_perm"] = getRealParam(paramVal,"chg_perm"); checkPermAry["down_perm"] = getRealParam(paramVal,"down_perm"); if(checkPermAry["down_perm"] > 0) checkPermAry["approval_download"]=0; //위와 같이 paramVal 값을 통하여 쓰기 권한이 있는지 삭제 권한이 있는지 등등을 체크한다
if(domain == WF_DOMAIN_TEMPLATE_FOLDER){ if(cLevel == 1 && getType != "BLANK") { returnActAry["copy"] = false; returnActAry["download"] = false; } }
// 위와 같이 domain == WF_DOMAIN_TEMPLATE_FOLDER(domain 이 템플릿 폴더인지) cLevel(현재 항목의 디렉토리 deps) == 1 && getType != "BLANK" 등등 을 비교하여 returnActAry["copy"] = false; returnActAry["download"] = false; 와 같이 복사와 다운로드 이벤트를 비활성 시키는 로직이다.
== vlist.js ==
Dhtmlx API 를 이용해 grid 를 만드는 스크립트 파일이다.
function grid() { // 기본 grid 구성 grid = new dhtmlXGridObject('gridbox'); // Grid 오브젝트 생성. //mygrid.setImagePath("./codebase/imgs/"); // path to images required by grid grid.setHeader("첫번째 컬럼, 두번째 컬럼"); // 컬럼명 지정. grid.setInitWidths("250,250"); // 컬럼의 width 값 지정. grid.setColAlign("center,center"); // 컬럼 내의 Alingn 정렬 지정. grid.setColTypes("ro,ed"); // set column types grid.setColSorting("int,str"); // set sorting grid.init(); // initialize grid grid.setSkin("dhx_skyblue"); // Grid 스킨 지정. grid.loadXML("xml/grid.xml"); //Grid에 표현할 Data xml 파일을 지정. }
this.init = function() // 미니 트리구조(복사나 이동 선택시 생성됨) 생성시 수행 하는 함수
this.init_with_grid // 웹폴더 grid 설정 함수
this.onShowContextMenu = function (rowId, celInd, grid) // 컨텍스트 박스 메뉴자체를 보이게 하거나 숨기게 하는함수다
this.addRow , this.deleteRow // 이동, 삭제나 추가시 엔트리에 항목을 추가해주는 함수다
이외 기타 다른 함수들이 있는데 쓰임세는 잘 모르겟다
mini_category_tree.js
웹폴더 카테고리 페이지 관련 스크립트이다...
mini_folder_entry.js
웹폴더 오른쪽 창 엔트리 관련 스크립트이다. 이 스크립트는 prototype 형태로 클래스를 정의하여 사용한다.
dhxcmd.js 에서 아래와 같이 정의하여 사용하고 있다.
this.folderEntry = new folderEntry('webfolder', grid, grid.uid(), true, true);
headers = [ , PO_NAME, PO_OWNER, PO_SIZE, PO_DATE ]; // 파일명,소유자,파일 크기 등등 명칭 설정 sortables = [ false, true, true, true, true ]; // sorting 여부 설정 sizes = "25,290,80,80,130"; // 각 td 단위 사이즈 설정 aligns = "right,left,center,right,center"; // 각 td 단위 정렬 설정 resizing = "false,true,true,true,true"; // td 단위로 사이즈 변경 활성/비활성 설정 tooltip = "false,false,false"; // 툴팁설정 sortkey = ["type","name","owner","size","mtime"]; //sorting 키 설정 이키를 가지고 xml 정렬을 한다
folderEntry.prototype.onRowDblClicked = function(item_id) // 엔트리창 항목을 더블클릭하면 수행하는 함수
folderEntry.prototype.onResultRowDblClicked = function(item_id) // 검색 탭 엔트리창 항목을 더블클릭하면 수행하는 함수
folderEntry.prototype.addNewFolderItemWithId folderEntry.prototype.addNewFolderItem folderEntry.prototype.addEntriesWithListInfos folderEntry.prototype.build_row_from_list_info folderEntry.prototype.loadFolderEntries
// 폴더 새로 생성시 수행되는 함수, dhxcmd 에서 loadFolderEntries 함수를 통해서 들어온다
folderEntry.prototype.addRow = function(id, name, type, size) // 엔트리에 항목을 추가될때 수행하는 함수
folderEntry.prototype.modifyItem = function(domain, path, list_info) // 항목명이 수정되었을때 수행하는 함수
folderEntry.prototype.deleteItem = function(domain, path) // 항목 삭제시 수행하는 함수
folderEntry.prototype.get_selected_domain_paths = function(target_type) folderEntry.prototype.get_selected_domain_path //항목 선택시 수행되는 함수
mini_folder_tree.js
mini_folder_entry.js 와 비슷한 성질의 스크립트로 왼쪽창 폴더 트리 관련 스크릡트디아. 이역시 prototype 형태로 클래스를 정의하여 사용한다
dhxcmd.js 에서 아래와 같이 정의하여 사용하고 있다.
this.folderTree = new folderTree(null, tree);
this.dhtmlxTree.attachEvent("onSelect", function(id)
folderTree.prototype.onTreeSelect
// 왼쪽 트리창 항목을 선택 했을 경우 수행하는 함수
this.dhtmlxTree.attachEvent("onDblClick", function(id) //왼쪽 트리창 항목을 더블클릭 했을 경우 수행하는 함수
if(!mini_tree) // 지금 현재의 트리창이 미니창(복사나 이동시 뜨는창) 인지 비교하는 로직
folderTree.prototype.openFullpathTree = function(domain, path, base_path, openPath)// 트리를 더블클릭으로 열때 수행된다.
folderTree.prototype.onShowContextMenuTree = function (rowId, celInd, grid) // 트리에서 컨텍스트 박스 메뉴를 열때 수행된다
folderTree.prototype.get_selected_domain_path = function()//트리에서 항목을 선택시 해당 항목의 full path 를 리턴한다
folderTree.prototype.getFullPath = function(domain, path)//트리에서 항목을 선택시 해당 path 를 deps 별로 리턴한다.
folderTree.prototype.addNewTreeItem = function(domain, path, list_info) //트리에 항목이 추가 될경우 수행하는 함수
folderTree.prototype.modifyItem = function(domain, path, list_info) //트리의 항목명(폴더명) 이 수정될경우 수행하는 함수
folderTree.prototype.deleteItem = function(domain, path, move_to_parent) folderTree.prototype.removeObsoleteTreeItems = function(domain, path, list_infos) //트리창에 항목이 제거 되었을 경우 수행한다
folderTree.prototype.loadTreeEntries = function(domain, path, list_infos)//이벤트(삭제,이동,폴더생성)를 수행후 트리를 로딩시 수행하는 함수
folderTree.prototype.loadEntries = function(domain, path) // domain 이동이나 다른 디렉토리로 포인터를 이동시 xml 로 해당 디렉토리 구조를 읽어와 트리창에 출력한다
commander.php
웹폴더에서 DB 접근이나 back 단 접근이 필요한 이벤트가 발생시 commander.php 를 거쳐서 정보를 받아온다. 거의 모든 이벤트는 이 파일을 거쳐 정보를 받아 온다고 생각하면 된다.
function get_tree_xml($domain, $basepath, $pathAry, $level, $eachpathAry, $withFiles,$is_symlink="") // 웹폴더 왼쪽 트리창에 표시할때 필요한 xml 정보를 받아오는 함수이다. 재귀적 함수이다.
function dsp_category_entries($path, $categoryidAry, $sortkey, $order, $perPage, $CLPage) //웹폴더 카테고리탭 페이지의 엔트리 리스트를 표시할때 필요한 xml 정보는 받아오는 함수
function makeParamVal($list_info) // xml 의 param 속성값을 리턴하는 함수이다. 웹폴더 권한을 설정하는 매우 중요한 속성이다
function get_item_image($list_info, $domain, $path) // 웹폴더 엔트리창의 파일별 이미지를 리턴하는 함수
if ($_REQUEST['action'] == 'swcheck' ) // 웹폴더 바로열기에 관련된 함수로 확장자에 등록된 s/w 가 있는지 채크한다.
if ($_REQUEST['action'] == 'searchIndex' ) //웹폴더 검색 페이지에서 검색 조건에 맞게 결과값을 리턴해준다
if ($_REQUEST['action'] == 'readFolder' || $_REQUEST['action']=="getContents") // 웹폴더 엔트리창 리스트를 표시할때 필요한 xml 정보를 가져오는 로직으로 매우 중요하여 자세히 설명하겠다.
$download_app[$rows['owner'].$rows['file_list_path']]=array($rows['file_type'] => 'apply','down_result_date' => $down_result_date,'file_size' => $rows['file_size'],'file_date' => $rows['file_date']); // 파일별 다운로드가 승인된 항목을 배열에 저장하는 로직이다. 소유가 파일크기 파일타임 생성날짜등이 저장
$_wf->wf_list($_SESSION['_s_user_srl_id'], $domain, $path, $entries, $_REQUEST['sortkey'], $_REQUEST['order']) == WF_OK)
//$_wf->wf_list 를 이용하여 시스템(back) 단에 디렉토리 구조를 $entries 배열변수에 받아온다.
if(((($download_app[$key_]['file_size'] ==$entry['size'] && $download_app[$key_]['file_date'] ==$entry['mtime']) || $entry['type'] ==2 ) && $download_app[$key_][$selected_type]) || @strstr(strtoupper($GL_DOWNLOAD_AUTO_APPROVAL),strtoupper($disp_name_ext))) { //다운로드가 가능한지 비교 // $apply="(d)"; //추후에 이미지로 표현 지금은 임시로 텍스트로 표현한다 $list_info['down_perm'] = 1; //다운로드 권한 } else { // $apply=""; $list_info['down_perm'] = 0; //다운로드 권한 } //다운로드 권한 체크 끝 2013-10-22 by boyoon
$list_info['disp_name'] = $entry['disp_name']; $list_info['desc'] = (@$entry['desc']) ? $entry['desc']: $entry['disp_name']; $list_info['has_subdir'] = $entry['has_subdir']; $list_info['rw_perm'] = $entry['rw_perm']; // 0 : 권한없음, 1 : 읽기전용, 2 : 읽기쓰기
$list_info['del_perm'] = $entry['del_perm']; //삭제 권한
$list_info['chg_perm'] = $newstr = str_replace(array("\r\n", "\n", "\r"), "", $entry['chg_perm']); //권한 설정 권한
$list_info['size'] = get_human_readable_filesize($entry['size']);
// $list_info['size'] = "10";
$list_info['owner'] = $entry['owner_id'];
$list_info['mtime'] = $entry['mtime'];
$list_info['shared'] = $entry['shared'];
$list_info['has_acl_perms'] = $entry['has_acl_perms']; //값이 1이면 acl이 세팅된 개체입니다.
if($entry['is_symlink']) $list_info['is_symlink'] = $entry['is_symlink']; //심볼릭 링크인지 확인 2013-11-07 else $list_info['is_symlink'] = $_REQUEST['is_symlink'];
// 위의 형태로 다운로드 권한,읽기,쓰기,삭제 권한과 파일크기, 소유자, 공유타입,심볼릭링크 타입 등등의 정보를 활용하여 xml 형태로 리턴해준다.
if ($_REQUEST['action'] == 'readFullpathFolder') //웹폴더 초기에 위에 설명했던 get_tree_xml 를 이용해 왼쪽 트리창 표시해줄 정보를 전부 읽어온다.
if ($_REQUEST['action'] == 'createFolder') // 폴더생성할때의 로직
if ($_REQUEST['action'] == 'removeFile') // 폴더나 파일 삭제 로직
if($_REQUEST['action'] == 'copyFile')// 복사할때 로직
if ($_REQUEST['action'] == 'moveFile') //이동할때 로직
if ($_REQUEST['action'] == 'rename') // 이름 변경 로직
if ($_REQUEST['action'] == 'setPermission') // 권한 설정할때 로직
if ($_REQUEST['action'] == 'indexSaveData')//속성설정할때 로직
if($_REQUEST['subaction']=='approvalRequest') //데이터 업로드 승인요청 처리 할때 로직
if($_REQUEST['action']=='approvalDownload')//다운로드 승인요청할때 로직
if ($_REQUEST['action'] == 'checkDownloadPerm') //다운로드할때 이 파일이 다운로드 권한이 있는지를 체크하는 로직
dc_webfolder.inc
//시스템(back) 단 정보나 이벤트가 필요할때 사용되는 함수이다. 백단에서의 이벤트 결과를 받아서 commander.php 파일에 결과값을 던져 주는 class 형태 파일이다.
function get_user_id($user_srl_id, &$is_sysadmin) // user_srl_id 으로 user_id 를 가져오고 admin 권한이 있는지 체크
function get_share_infos($owner_srl_id, $user_id, $groups, $project_code, $share_name, $path, $share_srl_id = 0) //해당 폴더의 공유정보를 처리하는 함수
private function query_is_project_member($project_id, $user_srl_id, &$is_admin) //해당 프로젝트의 구성원과 해당 프로젝트 super user 정보를 가져온다
private function query_get_project_infos($user_srl_id, $is_my_project = true) //해당 프로젝트 정보를 가져온다
function set_permission_policy($domain, $path, $perm_info, &$info) //시스템 단에서 넘어온 권한 정보를 다시한번 재구성해서 리턴해준다
function get_perm($user_srl_id, $domain, &$path, &$perm_info,$is_minfo=true,$is_sysadmin=false) //해당 폴더나 파일의 권한정보를 시스템단, DB단,set_permission_policy() 함수를 거친 재구성단 등등에서 가져온다. private function get_sysperm($user_id, $domain, $path, $perm_info, &$ret,$is_minfo=true) //해당 폴더나 파일의 권한 정보를 시스템단에서 가져온다.
function get_list($user_id, $domain, $path, $rpath, $shared_names, $allowed_names, &$entries, $no_children = false, $share_perm_type = WF_PERM_READONLY, $sort_key, $sort_type,$is_sysadmin=false) //웹폴더 엔트리창에 출력해줄 파일 이나 폴더의 정보를 가져온다. 권한,사이즈.소유자,생성일자 등등의 정보를 가져온다.
function wf_list($user_srl_id, $domain, $path, &$entries, $sort_key = "name", $sort_type = "asc") // 위의 get_list() get_perm() set_permission_policy() 를 포함하고 있는 함수로 엔트리창에 출력해줄 파일이나 폴더 정보를 가져와 commander.php 에 리턴해준다.
function wf_info($user_srl_id, $domain, $path, &$info,$is_minfo=true) //wf_list 는 여러개의 파일정보를 가져오는것이고 wf_info 단하나의 파일이나 폴더의 더 많은 자세한 정보를 가져오는 함수
function wf_preview($user_srl_id, $domain, $path, &$info) // 웹폴더에서 이미지 미리보기나 txt 미리보기시 수행하는 함수
function wf_copy($user_srl_id, $src_targets, $dst_domain, $dst_path, $force, &$err, $not_use_a = false, $acl_perms = array(), $is_mv = false) //복사와 이동할때 사용하는 함수다 $is_mv 값이 true 로 넘어 오면 이동이다.
function wf_check_exist($new_name_postfix, $dst_name_rpath, &$new_name) // 파일이나 폴더 이름을 체크하여 동일한 이름이 있으면 새로운 이름으로 교체하여 리턴
function wf_mv2($user_srl_id, $src_targets, $dst_domain, $dst_path, $force = false, &$err) // 파일이나 폴더 이동시 사용되는 함수로 wf_copy() 함수로 이동할수 없는 상황일 경우 쓴다.
function wf_set_sys_permission($user_srl_id, $targets, $perms) function set_sys_permission_acl($user_srl_id, $targets, $perms, $is_perm_target_recur, $is_perm_target_only_files) function wf_set_sys_permission_acl($user_srl_id, $targets, $sys_perms) function wf_set_sys_permission_ugo($user_srl_id, $targets, $perms) // 시스템상의 setfacl 명령어를 통해 확장권한등을 처리하는 함수
function compare_share_info($share_infos, $cmp_info)
function wf_set_share_permission($user_srl_id, $domain, $path, $new_share_infos)
//공유권한설정을 처리하는 함수
function wf_set_permission($user_srl_id, $domain, $path, $sys_perm_info, $share_perm_infos)
//권한설정을 처리하는 함수
function do_upload_file($rpath, $total_size, $offset, &$upload_size, &$is_completed) function wf_upload_dir($user_srl_id, $domain, $path, $names) function wf_upload($user_srl_id, $domain, $path, $name, $offset, $total_size, $type, $force = false, &$upload_size, &$rpath, &$is_completed) function wf_upload_infos($user_srl_id, $domain, $path, $names) //업로드실행시 수행되는 함수
function wf_download($user_srl_id, $domain, $path, $offset, &$downloaded_size, &$rpath) function wf_download_infos($user_srl_id, $targets, $download_confirm = 0) function wf_download_get_infos($user_srl_id, $path) //다운로드실행시 수행되는 함수
function initialize_upload_domain($user_id, $path)
//웹폴더에서의 업로드 폴더에 대한 초기 구성하는 함수이다.
wfhandler.php
시스템단에 정보를 요청하고 변경하고 지우는 작업을 하는 함수이다. class 형태로 된 파일이다.
static public function wfh_list($rpath, $user_id, $group_id, $allowed_folders, $folder_only = true, $sort_target, $sort_type, $notuse_acl = 0) // $process = proc_open("$GL_ENSH_HOME/bin/wfhandler", $spec, $pipes); 라는 명령어로 해당 폴더나 파일의 정보를 가져와 리턴해준다. /bin/wfhandler 은 시스템상에 컴파일되어 있는 라이브러리 파일이다
public function wfh_info($rpath, $name, $user_id, $group_id, $is_minfo=true, $notuse_acl = 0) //wfh_list 함수와 비슷한 역활 다만 하나의 폴더 또는 파일의 정보만 가져온다.
public function wfh_upload($rpath, $offset, $total_size, &$uploaded_size, &$is_completed) // 함수명으로 알수 있듯이 파일 업로드시 수행한다.
public function wfh_checkfile($targets, $user_id, $group_id, $mode, $confirm_infos, $need_confirm, $auto_approval)
//파일 업로드나 다운로드시 파일에 대한 정보를 가져와 리턴해준다.