사용자:Choakira
(→웹폴더 구성) |
(→commander.php) |
||
344번째 줄: | 344번째 줄: | ||
//$_wf->wf_list 를 이용하여 시스템(back) 단에 디렉토리 구조를 $entries 배열변수에 받아온다. | //$_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))) { |
− | + | $list_info['down_perm'] = 1; | |
− | + | } else { | |
− | } else { | + | $list_info['down_perm'] = 0; |
− | + | } | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
$list_info['disp_name'] = $entry['disp_name']; | $list_info['disp_name'] = $entry['disp_name']; | ||
$list_info['desc'] = (@$entry['desc']) ? $entry['desc']: $entry['disp_name']; | $list_info['desc'] = (@$entry['desc']) ? $entry['desc']: $entry['disp_name']; | ||
395번째 줄: | 392번째 줄: | ||
if ($_REQUEST['action'] == 'checkDownloadPerm') //다운로드할때 이 파일이 다운로드 권한이 있는지를 체크하는 로직 | if ($_REQUEST['action'] == 'checkDownloadPerm') //다운로드할때 이 파일이 다운로드 권한이 있는지를 체크하는 로직 | ||
− | |||
== dc_webfolder.inc == | == dc_webfolder.inc == |
2014년 3월 10일 (월) 13:21 판
목차 |
서론
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.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))) { $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['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)
//파일 업로드나 다운로드시 파일에 대한 정보를 가져와 리턴해준다.