사용자:Choakira

Clunix Wiki
(버전 사이의 차이)
(./js/wf_common.js)
(wf_fsop.php)
 
(한 사용자의 중간의 편집 15개 숨겨짐)
159번째 줄: 159번째 줄:
 
== ./js/wf_common.js ==
 
== ./js/wf_common.js ==
  
웹폴더의 이벤트(삭제,이동,권한설정등등) 담당하는 함수이다.  
+
웹폴더의 이벤트(삭제,이동,권한설정등등) 담당하는 함수이다.  
  
 
  function getRealParam(bitVal, item) // 선택한 항목의 bitVal 값을 비교하여 읽기쓰기 권한 및 폴더인지 파일인지 또한 하위폴더를 가지고 있는지 등등을 체크
 
  function getRealParam(bitVal, item) // 선택한 항목의 bitVal 값을 비교하여 읽기쓰기 권한 및 폴더인지 파일인지 또한 하위폴더를 가지고 있는지 등등을 체크
176번째 줄: 176번째 줄:
 
  else if(getType == "TOOLBAR") var menuItems = new Array("upfolder","copy","move","remove","detail","attr","permission","foldercreate","rename","upload","download","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");
 
  else if(getType == "BLANK") var menuItems = new Array("upfolder","foldercreate","upload","refresh");
//현재 이벤트 항목의 위치가 어디인지 에 따라서 정의해야할 이벤트를 저장
+
현재 이벤트 항목의 위치가 어디인지 에 따라서 정의해야할 이벤트를 저장
  
  for(idx in menuItems) { //정의해야할 이벤트를 일단 모두 비활성으로 정의한다.
+
  for(idx in menuItems) {  
returnActAry[menuItems[idx]] = false;
+
returnActAry[menuItems[idx]] = false;
}
+
}
 +
정의해야할 이벤트를 일단 모두 비활성으로 정의한다.
  
  
 
+
  var paramVal = userDataObj.getUserData(entryIds[0],"param");//시스템에서 구성된 디렉토리 구조를 xml 형태로 정의 하여 가져오게 되는데 그 xml 로 정의된 내용을 DOM 방식으로 접근하여 param 속성값을 가져온다
  var paramVal = userDataObj.getUserData(entryIds[0],"param");
+
//시스템에서 구성된 디렉토리 구조를 xml 형태로 정의 하여 가져오게 되는데 그 xml 로 정의된 내용을 DOM 방식으로 접근하여 param 속성값을 가져온다
+
  
 
  checkPermAry["rw_perm"] = getRealParam(paramVal,"rw_perm");
 
  checkPermAry["rw_perm"] = getRealParam(paramVal,"rw_perm");
192번째 줄: 191번째 줄:
 
  checkPermAry["down_perm"] = getRealParam(paramVal,"down_perm");
 
  checkPermAry["down_perm"] = getRealParam(paramVal,"down_perm");
 
  if(checkPermAry["down_perm"] > 0) checkPermAry["approval_download"]=0;
 
  if(checkPermAry["down_perm"] > 0) checkPermAry["approval_download"]=0;
//위와 같이  paramVal 값을 통하여 쓰기 권한이 있는지 삭제 권한이 있는지 등등을 체크한다
+
위와 같이  paramVal 값을 통하여 쓰기 권한이 있는지 삭제 권한이 있는지 등등을 체크한다
  
 
  if(domain == WF_DOMAIN_TEMPLATE_FOLDER){
 
  if(domain == WF_DOMAIN_TEMPLATE_FOLDER){
if(cLevel == 1 && getType != "BLANK") {
+
  if(cLevel == 1 && getType != "BLANK") {
returnActAry["copy"] = false;
+
  returnActAry["copy"] = false;
returnActAry["download"] = false;
+
  returnActAry["download"] = false;
}
+
  }
}
+
}
  
// 위와 같이 domain == WF_DOMAIN_TEMPLATE_FOLDER(domain 이 템플릿 폴더인지) cLevel(현재 항목의 디렉토리 deps) == 1 && getType != "BLANK"  등등 을 비교하여
+
위와 같이 domain == WF_DOMAIN_TEMPLATE_FOLDER(domain 이 템플릿 폴더인지) cLevel(현재 항목의 디렉토리 deps) == 1 && getType != "BLANK"  등등 을 비교하여
 
returnActAry["copy"] = false; returnActAry["download"] = false;  와 같이 복사와 다운로드 이벤트를 비활성 시키는 로직이다.
 
returnActAry["copy"] = false; returnActAry["download"] = false;  와 같이 복사와 다운로드 이벤트를 비활성 시키는 로직이다.
  
220번째 줄: 219번째 줄:
 
   grid.loadXML("xml/grid.xml"); //Grid에 표현할 Data xml 파일을 지정.
 
   grid.loadXML("xml/grid.xml"); //Grid에 표현할 Data xml 파일을 지정.
 
   }
 
   }
+
위의 내용은 기본 grid 를 구성하는 샘플 화면이다. 잘 숙지하길 바란다.
this.init = function() // 미니 트리구조(복사나 이동 선택시 생성됨) 생성시 수행 하는 함수
+
  
this.init_with_grid // 웹폴더 grid 설정 함수
 
  
 +
 +
this.init = function() // 미니 트리구조(복사나 이동 선택시 생성됨) 생성시 수행 하는 함수
 +
 +
this.init_with_grid = function()// 메인웹폴더 grid 설정 함수
  
this.onShowContextMenu = function (rowId, celInd, grid) // 컨텍스트 박스 메뉴자체를 보이게 하거나 숨기게 하는함수다
+
this.onShowContextMenu = function (rowId, celInd, grid) // 컨텍스트 박스 메뉴자체를 보이게 하거나 숨기게 하는함수다
  
this.addRow , this.deleteRow  // 이동, 삭제나 추가시 엔트리에 항목을 추가해주는 함수다
+
this.addRow = function(), this.deleteRow = function() // 이동, 삭제나 추가시 엔트리에 항목을 추가해주는 함수다
  
 
이외 기타 다른 함수들이 있는데 쓰임세는 잘 모르겟다
 
이외 기타 다른 함수들이 있는데 쓰임세는 잘 모르겟다
234번째 줄: 235번째 줄:
 
== mini_category_tree.js ==
 
== mini_category_tree.js ==
  
웹폴더 카테고리 페이지 관련 스크립트이다...  
+
웹폴더 카테고리 페이지 관련 스크립트이다... 카테고리 페이지는 거의 이용을 안하여서 잘 모르겠따. 추후에 업데이트 할 예정이다
  
 
== mini_folder_entry.js ==
 
== mini_folder_entry.js ==
240번째 줄: 241번째 줄:
 
웹폴더 오른쪽 창 엔트리 관련 스크립트이다. 이 스크립트는 prototype 형태로 클래스를 정의하여 사용한다.
 
웹폴더 오른쪽 창 엔트리 관련 스크립트이다. 이 스크립트는 prototype 형태로 클래스를 정의하여 사용한다.
  
dhxcmd.js 에서 아래와 같이 정의하여 사용하고 있다.
 
  
this.folderEntry = new folderEntry('webfolder', grid, grid.uid(), true, true);
+
this.folderEntry = new folderEntry('webfolder', grid, grid.uid(), true, true);
 +
dhxcmd.js 에서 위와 같이 정의하여 사용하고 있다.
  
headers = [ '', PO_NAME, PO_OWNER, PO_SIZE, PO_DATE ]; //  파일명,소유자,파일 크기 등등 명칭 설정
+
headers = [ '', PO_NAME, PO_OWNER, PO_SIZE, PO_DATE ]; //  파일명,소유자,파일 크기 등등 명칭 설정
sortables =  [ false, true, true, true, true ]; // sorting 여부 설정
+
sortables =  [ false, true, true, true, true ]; // sorting 여부 설정
sizes = "25,290,80,80,130"; // 각 td 단위 사이즈 설정
+
sizes = "25,290,80,80,130"; // 각 td 단위 사이즈 설정
aligns = "right,left,center,right,center"; // 각 td 단위 정렬 설정
+
aligns = "right,left,center,right,center"; // 각 td 단위 정렬 설정
resizing = "false,true,true,true,true"; // td 단위로 사이즈 변경 활성/비활성 설정
+
resizing = "false,true,true,true,true"; // td 단위로 사이즈 변경 활성/비활성 설정
tooltip = "false,false,false"; // 툴팁설정
+
tooltip = "false,false,false"; // 툴팁설정
sortkey = ["type","name","owner","size","mtime"]; //sorting 키 설정 이키를 가지고 xml  정렬을 한다
+
sortkey = ["type","name","owner","size","mtime"]; //sorting 키 설정 이키를 가지고 xml  정렬을 한다
  
folderEntry.prototype.onRowDblClicked = function(item_id) // 엔트리창 항목을 더블클릭하면 수행하는 함수
+
folderEntry.prototype.onRowDblClicked = function(item_id) // 엔트리창 항목을 더블클릭하면 수행하는 함수
  
folderEntry.prototype.onResultRowDblClicked = function(item_id) // 검색 탭 엔트리창 항목을 더블클릭하면 수행하는 함수
+
folderEntry.prototype.onResultRowDblClicked = function(item_id) // 검색 탭 엔트리창 항목을 더블클릭하면 수행하는 함수
  
folderEntry.prototype.addNewFolderItemWithId  
+
folderEntry.prototype.addNewFolderItemWithId  
folderEntry.prototype.addNewFolderItem  
+
folderEntry.prototype.addNewFolderItem  
folderEntry.prototype.addEntriesWithListInfos
+
folderEntry.prototype.addEntriesWithListInfos
folderEntry.prototype.build_row_from_list_info
+
folderEntry.prototype.build_row_from_list_info
folderEntry.prototype.loadFolderEntries
+
folderEntry.prototype.loadFolderEntries
  
// 폴더 새로 생성시 수행되는 함수, dhxcmd 에서 loadFolderEntries 함수를 통해서 들어온다
+
위 수는 폴더 새로 생성시 수행되는 함수, dhxcmd.loadFolderEntries() 함수를 통해서 접근후 순차적으로 수행된다.
  
folderEntry.prototype.addRow = function(id, name, type, size) // 엔트리에 항목을 추가될때 수행하는 함수
+
folderEntry.prototype.addRow = function(id, name, type, size) // 엔트리에 항목을 추가될때 수행하는 함수
  
folderEntry.prototype.modifyItem = function(domain, path, list_info) // 항목명이 수정되었을때 수행하는 함수
+
folderEntry.prototype.modifyItem = function(domain, path, list_info) // 항목명이 수정되었을때 수행하는 함수
  
folderEntry.prototype.deleteItem = function(domain, path) // 항목 삭제시 수행하는 함수
+
folderEntry.prototype.deleteItem = function(domain, path) // 항목 삭제시 수행하는 함수
 
+
folderEntry.prototype.get_selected_domain_paths = function(target_type)
+
folderEntry.prototype.get_selected_domain_path
+
//항목 선택시 수행되는 함수
+
  
 +
folderEntry.prototype.get_selected_domain_paths = function(target_type)
 +
folderEntry.prototype.get_selected_domain_path = function(target_type)
 +
위 함수는 항목 선택시 수행되는 함수
  
 
== mini_folder_tree.js ==
 
== mini_folder_tree.js ==
  
mini_folder_entry.js 와 비슷한 성질의 스크립트로 왼쪽창 폴더 트리 관련 스크릡트디아. 이역시  prototype 형태로 클래스를 정의하여 사용한다
+
mini_folder_entry.js 와 비슷한 성질의 스크립트로 왼쪽창 폴더 트리 관련 스크릡트이다. 이역시  prototype 형태로 클래스를 정의하여 사용한다
 
+
dhxcmd.js 에서 아래와 같이 정의하여 사용하고 있다.
+
  
 
this.folderTree = new folderTree(null, tree);
 
this.folderTree = new folderTree(null, tree);
 +
dhxcmd.js 에서 위와 같이 정의하여 사용하고 있다.
  
 +
this.dhtmlxTree.attachEvent("onSelect", function(id))
 +
folderTree.prototype.onTreeSelect()
 +
왼쪽 트리창 항목을 선택 했을 경우 관련있는 함수들
  
this.dhtmlxTree.attachEvent("onSelect", function(id)
+
this.dhtmlxTree.attachEvent("onDblClick", function(id) //왼쪽 트리창 항목을 더블클릭 했을 경우 수행하는 함수
folderTree.prototype.onTreeSelect
+
// 왼쪽 트리창 항목을 선택 했을 경우 수행하는 함수
+
  
this.dhtmlxTree.attachEvent("onDblClick", function(id) //왼쪽 트리창 항목을 더블클릭 했을 경우 수행하는 함수
+
if(!mini_tree) // 지금 현재의 트리창이 미니창(복사나 이동시 뜨는창) 인지 비교하는 로직
  
if(!mini_tree) // 지금 현재의 트리창이 미니창(복사나 이동시 뜨는창) 인지 비교하는 로직
+
folderTree.prototype.openFullpathTree = function(domain, path, base_path, openPath)// 트리를 더블클릭으로 열때 수행된다.
  
folderTree.prototype.openFullpathTree = function(domain, path, base_path, openPath)// 트리를 더블클릭으로 열때 수행된다.
+
folderTree.prototype.onShowContextMenuTree = function (rowId, celInd, grid) // 트리에서 컨텍스트 박스 메뉴를 열때 수행된다
  
folderTree.prototype.onShowContextMenuTree = function (rowId, celInd, grid) // 트리에서 컨텍스트 박스 메뉴를 열때 수행된다
+
folderTree.prototype.get_selected_domain_path = function()//트리에서 항목을 선택시 해당 항목의 full path 를 리턴한다
  
folderTree.prototype.get_selected_domain_path = function()//트리에서 항목을 선택시 해당 항목의 full path 를 리턴한다
+
folderTree.prototype.getFullPath = function(domain, path)//트리에서 항목을 선택시 해당 path 를 deps 별로 리턴한다.
  
folderTree.prototype.getFullPath = function(domain, path)//트리에서 항목을 선택시 해당 path 를 deps 별로 리턴한다.
+
folderTree.prototype.addNewTreeItem = function(domain, path, list_info) //트리에 항목이 추가 될경우 수행하는 함수
  
folderTree.prototype.addNewTreeItem = function(domain, path, list_info) //트리에 항목이 추가 될경우 수행하는 함수
+
folderTree.prototype.modifyItem = 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.deleteItem = function(domain, path, move_to_parent)
+
folderTree.prototype.loadTreeEntries = function(domain, path, list_infos)//이벤트(삭제,이동,폴더생성)를 수행후  트리를 로딩시 수행하는 함수
folderTree.prototype.removeObsoleteTreeItems = function(domain, path, list_infos)
+
//트리창에 항목이 제거 되었을 경우 수행한다
+
 
+
folderTree.prototype.loadTreeEntries = function(domain, path, list_infos)//이벤트(삭제,이동,폴더생성)를 수행후  트리를 로딩시 수행하는 함수
+
 
+
folderTree.prototype.loadEntries = function(domain, path) // domain 이동이나 다른 디렉토리로 포인터를 이동시 xml 로 해당 디렉토리 구조를 읽어와 트리창에 출력한다
+
  
 +
folderTree.prototype.loadEntries = function(domain, path) // domain 이동이나 다른 디렉토리로 포인터를 이동시 xml 로 해당 디렉토리 구조를 읽어와 트리창에 출력한다
  
 
== commander.php==
 
== commander.php==
334번째 줄: 331번째 줄:
  
  
  $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']); // 파일별 다운로드가 승인된 항목을 배열에 저장하는 로직이다. 소유가 파일크기 파일타임 생성날짜등이 저장
+
  $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 배열변수에 받아온다.
+
  $_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))) {   
 
  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))) {   
355번째 줄: 354번째 줄:
 
  $list_info['has_acl_perms'] = $entry['has_acl_perms']; //값이 1이면 acl이 세팅된 개체입니다.
 
  $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
 
  if($entry['is_symlink']) $list_info['is_symlink'] = $entry['is_symlink']; //심볼릭 링크인지 확인 2013-11-07
  else $list_info['is_symlink'] = $_REQUEST['is_symlink']; // 위의 형태로 다운로드 권한,읽기,쓰기,삭제 권한과 파일크기, 소유자, 공유타입,심볼릭링크 타입 등등의 정보를 활용하여 xml 형태로 리턴해준다.
+
  else $list_info['is_symlink'] = $_REQUEST['is_symlink'];  
 +
위의 형태로 다운로드 권한,읽기,쓰기,삭제 권한과 파일크기, 소유자, 공유타입,심볼릭링크 타입 등등의 정보를 활용하여 xml 형태로 리턴해준다.
  
 
  if ($_REQUEST['action'] == 'readFullpathFolder') //웹폴더 초기에 위에 설명했던 get_tree_xml 를 이용해 왼쪽 트리창 표시해줄 정보를 전부 읽어온다.
 
  if ($_REQUEST['action'] == 'readFullpathFolder') //웹폴더 초기에 위에 설명했던 get_tree_xml 를 이용해 왼쪽 트리창 표시해줄 정보를 전부 읽어온다.
382번째 줄: 382번째 줄:
 
== dc_webfolder.inc ==
 
== dc_webfolder.inc ==
  
//시스템(back) 단 정보나 이벤트가 필요할때 사용되는 함수이다. 백단에서의 이벤트 결과를 받아서  commander.php 파일에 결과값을 던져 주는 class 형태 파일이다.
+
시스템(back) 단 정보나 이벤트가 필요할때 사용되는 함수이다. 백단에서의 이벤트 결과를 받아서  commander.php 파일에 결과값을 던져 주는 class 형태 파일이다.
  
function get_user_id($user_srl_id, &$is_sysadmin) // user_srl_id 으로 user_id 를 가져오고 admin 권한이 있는지 체크
+
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)  
+
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)
+
private function query_is_project_member($project_id, $user_srl_id, &$is_admin) //해당 프로젝트의 구성원과 해당 프로젝트 super user 정보를 가져온다
//해당 프로젝트의 구성원과 해당 프로젝트 super user 정보를 가져온다
+
  
private function query_get_project_infos($user_srl_id, $is_my_project = true)
+
private function query_get_project_infos($user_srl_id, $is_my_project = true) //해당 프로젝트 정보를 가져온다
//해당 프로젝트 정보를 가져온다
+
  
function set_permission_policy($domain, $path, $perm_info, &$info)
+
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)
+
function get_perm($user_srl_id, $domain, &$path, &$perm_info,$is_minfo=true,$is_sysadmin=false) //해당 폴더나 파일의 권한정보를 시스템단, DB단,set_permission_policy() 함수를 거친 재구성단 등등에서 가져온다.   
//해당 폴더나 파일의 권한정보를 시스템단, 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)
+
private function get_sysperm($user_id, $domain, $path, $perm_info, &$ret,$is_minfo=true)//해당 폴더나 파일의 권한 정보를 시스템단에서 가져온다.
//웹폴더 엔트리창에 출력해줄 파일 이나 폴더의 정보를 가져온다. 권한,사이즈.소유자,생성일자 등등의 정보를 가져온다.
+
  
function wf_list($user_srl_id, $domain, $path, &$entries, $sort_key = "name", $sort_type = "asc")
+
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)
// 위의 get_list() get_perm() set_permission_policy() 를 포함하고 있는 함수로 엔트리창에 출력해줄 파일이나 폴더 정보를 가져와 commander.php  에 리턴해준다.
+
웹폴더 엔트리창에 출력해줄 파일 이나 폴더의 정보를 가져온다. 권한,사이즈.소유자,생성일자 등등의 정보를 가져온다.
  
function wf_info($user_srl_id, $domain, $path, &$info,$is_minfo=true)
+
function wf_list($user_srl_id, $domain, $path, &$entries, $sort_key = "name", $sort_type = "asc")
//wf_list 는 여러개의 파일정보를 가져오는것이고 wf_info 단하나의 파일이나 폴더의 더 많은 자세한 정보를 가져오는 함수
+
위의 get_list() get_perm() set_permission_policy() 를 포함하고 있는 함수로 엔트리창에 출력해줄 파일이나 폴더 정보를 가져와 commander.php  에 리턴해준다.
  
function wf_preview($user_srl_id, $domain, $path, &$info)
+
function wf_info($user_srl_id, $domain, $path, &$info,$is_minfo=true)//wf_list 는 여러개의 파일정보를 가져오는것이고 wf_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)
+
function wf_preview($user_srl_id, $domain, $path, &$info)//웹폴더에서 이미지 미리보기나 txt 미리보기시 수행하는 함수
//복사와 이동할때 사용하는 함수다 $is_mv 값이 true 로 넘어 오면 이동이다.
+
  
function wf_check_exist($new_name_postfix, $dst_name_rpath, &$new_name)
+
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_mv2($user_srl_id, $src_targets, $dst_domain, $dst_path, $force = false, &$err)
+
function wf_check_exist($new_name_postfix, $dst_name_rpath, &$new_name)//파일이나 폴더 이름을 체크하여 동일한 이름이 있으면 새로운 이름으로 교체하여 리턴
// 파일이나 폴더 이동시 사용되는 함수로 wf_copy() 함수로 이동할수 없는 상황일 경우 쓴다.
+
  
function wf_set_sys_permission($user_srl_id, $targets, $perms)  
+
  function wf_mv2($user_srl_id, $src_targets, $dst_domain, $dst_path, $force = false, &$err)//파일이나 폴더 이동시 사용되는 함수로 wf_copy() 함수로 이동할수 없는 상황일 경우 쓴다.
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 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 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_set_permission($user_srl_id, $domain, $path, $sys_perm_info, $share_perm_infos) //권한설정을 처리하는 함수
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 do_upload_file($rpath, $total_size, $offset, &$upload_size, &$is_completed)  
function wf_download_infos($user_srl_id, $targets, $download_confirm = 0)
+
function wf_upload_dir($user_srl_id, $domain, $path, $names)
function wf_download_get_infos($user_srl_id, $path)
+
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)
+
 
//웹폴더에서의  업로드 폴더에 대한 초기 구성하는 함수이다.
+
function initialize_upload_domain($user_id, $path) //웹폴더에서의  업로드 폴더에 대한 초기 구성하는 함수이다.
  
 
== wfhandler.php ==
 
== wfhandler.php ==
시스템단에 정보를 요청하고 변경하고 지우는 작업을 하는 함수이다. class 형태로 된 파일이다.
+
시스템단에 정보를 전달하거나 체크해주는 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)
 +
파일 업로드나 다운로드시 파일에 대한 정보를 가져와 리턴해준다.
 +
 
 +
== wf_fsop.php ==
 +
시스템단의 내용을 복사,수정,이동,삭제 등을 하는 class 형태로 된 파일이다. wfhandler.php 와 마찬가지로 대부분 함수명만으로도 해당작업을 짐작할수 있다.
 +
 
 +
private function convert_input($input) //인코딩 변경해주는 함수
 +
 
 +
public function chown($rpath, $option, $user_id, $group_id = null, $is_recur = false)//시스템상의 chown 명령어를 수행
 +
 
 +
public function chmod($rpath, $option, $is_recur = false) //시스템상의 chmod 명령어를 수행
 +
 
 +
public function chmod_ext($rpath, $option, $is_recur = false, $is_only_files = false)//시스템상의 setfacl 명령어를 수행
 +
 
 +
public function stat($rpath, $fmt) // 시스템상의 stat를 수행
 +
 
 +
public function file_exist($rpath)  // 시스템상의 파일 존재 유무 체크
 +
 
 +
public function ls($rpath, $ls_option, $is_arr) //시스템상 ls 명령어를 수행후 결과값 리턴
 +
 
 +
public function readlink($rpath) // 시스템상  readlink 수행후 결과값 리턴
 +
 
 +
public function mkdir($rpath, $user_id, $group_id = null, $domain, $perm_group=WF_PERM_READONLY, $perm_all=WF_PERM_NONE)
 +
시스템상의 디렉토리를 추가하고 user_id 와 group_id 를 받아와 소유자와 권한 변경
 +
 
 +
public function rm_rf($rpath, $user_id = "") // 파일 삭제처리 후 결과값 리턴
  
static public function wfh_list($rpath, $user_id, $group_id, $allowed_folders, $folder_only = true, $sort_target, $sort_type, $notuse_acl = 0)
+
public function cp($src_domain, $dst_domain, $src_rpath, $dst_name_rpath, $user_id, $group_id, $force_option, $not_use_a = false, $perm_group, $perm_all, $src_name)
// $process = proc_open("$GL_ENSH_HOME/bin/wfhandler", $spec, $pipes); 라는 명령어로 해당 폴더나 파일의 정보를 가져와 리턴해준다. /bin/wfhandler 은 시스템상에 컴파일되어 있는 라이브러리 파일이다 
+
시스템상의 복사 처리후 user_id 와 group_id 를 받아와 소유자와 권한 변경
  
public function wfh_info($rpath, $name, $user_id, $group_id, $is_minfo=true, $notuse_acl = 0)
+
public function mv($dst_domain, $src_rpath, $dst_name_rpath, $user_id, $group_id, $force_option, $perm_group, $perm_all , $src_name)
//wfh_list 함수와 비슷한 역활 다만 하나의 폴더 또는 파일의 정보만 가져온다.
+
시스템상의 이동 처리후 user_id 와 group_id 를 받아와 소유자와 권한 변경
  
public function wfh_upload($rpath, $offset, $total_size, &$uploaded_size, &$is_completed)
+
public function rename($src_rpath, $dst_rpath, $user_id = "")// 이름변경후 수형결과 리턴
// 함수명으로 알수 있듯이 파일 업로드시 수행한다.
+
  
public function wfh_checkfile($targets, $user_id, $group_id, $mode, $confirm_infos, $need_confirm, $auto_approval)
+
public function dirname($path) // dirname 명령어 수행후 결과 값 리턴
//파일 업로드나 다운로드시 파일에 대한 정보를 가져와 리턴해준다.
+

2014년 3월 10일 (월) 17:19 현재 판

목차

서론

RNTier 웹폴더 시스템에 대하여 보다 편리하고 쉽게 설명하기 위해서 작성했다. 웹폴더는 dhtmlx 에서 제공하는 제공하는 자바 스크립트 라이브러리(jQuery,DOM)를 이용하였다. index.php 페이지가 기본 뼈대를 만들고, jQuery 로 데이터 및 정보를 가져와 Dhtmlx API 이용해 UI를 구성하는 방식이다.

기본 구성

웹폴더 구성

웹폴더 기본 페이지인 index.php 에서 웹폴더를 구성할 뼈대를 구축한다. 각 php 파일과 js 파일을 선언하고 기본적으로 필요한 DB 정보를 각 변수에 셋팅한다.

그리고 레이어 팝업에 쓰일 DIV 태그를 준비하고 기다린다.

그후 dhxCMD = new dhxCMDObject(); 형태로 dhxcmd.js 스크립트를 선언하여 사용하는데. dhxcmd.js 는 DB와 시스템(서버)을 Dhtmlx API 와 연계하는 아주 중요한 핵심 스크립트이다. dhxcmd.js 동적으로 시스템(서버)의 디렉토리 구조를 요청하여 XML 형태로 읽어온다. 그 후 XML 파일을 Dhtmlx API 에게 리턴해주고 Dhtmlx API 는 그정보를 웹폴더 UI 로 출력하는 형태이다.

wf_common.js 은 이벤트를 담당하는 파일로 이미 웹폴더가 다 만들어 진 이후의 이벤트(삭제,복사,승인,폴더 이동 등등) 에 대한 권한 체크및 이벤트 처리등을 담당한다. 일단 현재 XML 파일을 DOM 방식으로 접근하여 현재 권한을 체킹 그후 해당하는 이벤트만 노출하고, 그 노출된 이벤트에 액션이 들어오면 dhxcmd.js 통해서 해당 내용을 DB 저장나 시스템에 저장을 하고 그 저장된 내용을 다시 Dhtmlx API 에게 리턴하여 웹폴더 UI 를 변경하는 형태이다.

commander.php 파일은 DB 와 시스템을 dhxcmd.js 과 연계 해주는 아주 중요한 파일이다. dhxcmd.js 에서 정보읽기 및 변경을 요청해 오면 그 내용을 DB 및 백단(시스템) 처리하고 XML 형태로 리턴해준다.

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.clearWindow = function(divid) // 띄운 레이어 내용을 지워주는 함수 
this.closeWindow = function(divid) // 노출한 레이어 를 다시 숨겨주는 함수
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 파일을 지정.
 }

위의 내용은 기본 grid 를 구성하는 샘플 화면이다. 잘 숙지하길 바란다.


this.init = function() // 미니 트리구조(복사나 이동 선택시 생성됨) 생성시 수행 하는 함수
this.init_with_grid = function()// 메인웹폴더 grid 설정 함수
this.onShowContextMenu = function (rowId, celInd, grid) // 컨텍스트 박스 메뉴자체를 보이게 하거나 숨기게 하는함수다
this.addRow = function(), this.deleteRow = function()  // 이동, 삭제나 추가시 엔트리에 항목을 추가해주는 함수다

이외 기타 다른 함수들이 있는데 쓰임세는 잘 모르겟다

mini_category_tree.js

웹폴더 카테고리 페이지 관련 스크립트이다... 카테고리 페이지는 거의 이용을 안하여서 잘 모르겠따. 추후에 업데이트 할 예정이다

mini_folder_entry.js

웹폴더 오른쪽 창 엔트리 관련 스크립트이다. 이 스크립트는 prototype 형태로 클래스를 정의하여 사용한다.


this.folderEntry = new folderEntry('webfolder', grid, grid.uid(), true, true);

dhxcmd.js 에서 위와 같이 정의하여 사용하고 있다.

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 = function(target_type)

위 함수는 항목 선택시 수행되는 함수

mini_folder_tree.js

mini_folder_entry.js 와 비슷한 성질의 스크립트로 왼쪽창 폴더 트리 관련 스크릡트이다. 이역시 prototype 형태로 클래스를 정의하여 사용한다

this.folderTree = new folderTree(null, tree); dhxcmd.js 에서 위와 같이 정의하여 사용하고 있다.

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))) {  
$list_info['down_perm'] = 1; 	
} else {
$list_info['down_perm'] = 0; 	
}
$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['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)

파일 업로드나 다운로드시 파일에 대한 정보를 가져와 리턴해준다.

wf_fsop.php

시스템단의 내용을 복사,수정,이동,삭제 등을 하는 class 형태로 된 파일이다. wfhandler.php 와 마찬가지로 대부분 함수명만으로도 해당작업을 짐작할수 있다.

private function convert_input($input) //인코딩 변경해주는 함수
public function chown($rpath, $option, $user_id, $group_id = null, $is_recur = false)//시스템상의 chown 명령어를 수행
public function chmod($rpath, $option, $is_recur = false) //시스템상의 chmod 명령어를 수행
public function chmod_ext($rpath, $option, $is_recur = false, $is_only_files = false)//시스템상의 setfacl 명령어를 수행
public function stat($rpath, $fmt) // 시스템상의 stat를 수행
public function file_exist($rpath)  // 시스템상의 파일 존재 유무 체크
public function ls($rpath, $ls_option, $is_arr) //시스템상 ls 명령어를 수행후 결과값 리턴
public function readlink($rpath) // 시스템상  readlink 수행후 결과값 리턴
public function mkdir($rpath, $user_id, $group_id = null, $domain, $perm_group=WF_PERM_READONLY, $perm_all=WF_PERM_NONE)

시스템상의 디렉토리를 추가하고 user_id 와 group_id 를 받아와 소유자와 권한 변경

public function rm_rf($rpath, $user_id = "") // 파일 삭제처리 후 결과값 리턴
public function cp($src_domain, $dst_domain, $src_rpath, $dst_name_rpath, $user_id, $group_id, $force_option, $not_use_a = false, $perm_group, $perm_all, $src_name)

시스템상의 복사 처리후 user_id 와 group_id 를 받아와 소유자와 권한 변경

public function mv($dst_domain, $src_rpath, $dst_name_rpath, $user_id, $group_id, $force_option, $perm_group, $perm_all , $src_name)

시스템상의 이동 처리후 user_id 와 group_id 를 받아와 소유자와 권한 변경

public function rename($src_rpath, $dst_rpath, $user_id = "")// 이름변경후 수형결과 리턴
public function dirname($path) // dirname 명령어 수행후 결과 값 리턴
부서별 위키