묻고답하기

안녕하세요. xe 초보입니다.


혼자서 xe 를 좀 익혀보고자 게시판 dx 라는 모듈의  코드를 뒤적거리고 있는데요...


beluxe.controller.php  파일에서 궁금한 점이 하나 생겨서 질문 드리게 되었습니다.


이 파일의 function 중에 procBoardInsertDocument 라는 것이 

쓴 글을 게시판에 등록해주는 역할을 담당하고 있는 부분이라고 생각되는데요.



이 파일에 등록되어 있는 다른 대부분의 function 들이 대부분 executequery 명령을 실행하는 것과는 달리 

여기에는 executequery 나 그 비슷한 명령들이 안보이는 것 같아서요.


내용을 디비에 등록하려면 쿼리를 실행하는 부분이 분명히 있을거라고 생각하는데, 능력이 부족해 찾을수가 없으니 답답합니다.


설명 가능하신분은 좀 알려주시면 감사하겠습니다.^^;


아래는 해당 function 부분의 코드입니다.





function procBoardInsertDocument()

{

if(!$this->grant->write_document) return new Object(-1, 'msg_not_permitted');


// TODO 카테고리 grant 체크해라, 근데 코어에서 해야될거 같거든?

$args = Context::getRequestVars();


$mod_srl = (int) $args->module_srl;

$doc_srl = (int) $args->document_srl;

if(!$mod_srl || $this->module_srl != $mod_srl) return new Object(-1,'msg_invalid_request');


$oLogIfo = Context::get('logged_info');

$log_mbr_srl = $oLogIfo->member_srl;


// 회원이라면 닉,암호 제거, 상담기능 사용시 비회원 에러

if(Context::get('is_logged'))

{

unset($args->nick_name);

unset($args->password);

}

else if($this->module_info->consultation == 'Y')

{

return new Object(-1,'msg_invalid_request');

}


if(!$this->grant->manager)

{

// 제목 색상 변경 허용이 아니라면 게시글 색상/굵기 제거

if($this->module_info->use_title_color != 'Y')

{

unset($args->title_color);

unset($args->title_bold);

}


if($this->module_info->allow_comment == 'Y' || $this->module_info->allow_comment == 'N')

{

$args->allow_comment = $this->module_info->allow_comment == 'Y' ? 'Y' : 'N';

}


if($this->module_info->allow_trackback == 'Y' || $this->module_info->allow_trackback == 'N')

{

$args->allow_trackback = $this->module_info->allow_trackback == 'Y' ? 'Y' : 'N';

}

}


$args->allow_comment = $args->allow_comment == 'Y' ? 'Y' : 'N';

$args->allow_trackback = $args->allow_trackback == 'Y' ? 'Y' : 'N';


// 사용 상태에 없는 값이면 임시로 설정

$use_status = explode(',', $this->module_info->use_status);

if(!in_array($args->status, $use_status)) $args->status = count($use_status) ? 'TEMP' : 'PUBLIC';


// 사용자 상태 사용시 관리자이고 공지가 아니면 is_notice 필드에 상태입력 TODO is_notice 필드 사용하는이유는 상태를 넣을 필드가 없어서...

if($args->is_notice != 'Y' || !$this->grant->manager) $args->is_notice = 'N';

$args->custom_status = (string) (((int) $args->custom_status < 1 && (int) $args->custom_status > 9) ? 'N' : $args->custom_status);

if($this->module_info->custom_status && $this->grant->manager && $args->is_notice != 'Y'+ ') $args->is_notice = $args->custom_status;


// 값 체크

settype($args->title, "string");

if($args->title == '') $args->title = cut_str(strip_tags($args->content), 20);

if($args->title == '') $args->title = 'Untitled';

if($args->tags) $args->tags = preg_replace('/\s+/', ',', strip_tags($args->tags));


// 포인트 사용이 아니면 포인트 값 제거

$args->use_point = (int) $args->use_point;

$is_use_point = Context::get('is_logged') && ($this->module_info->use_restrict_view == 'P' || $this->module_info->use_restrict_down == 'P');

if(!$is_use_point) unset($args->use_point);


// document module의 객체 생성

$cmDocument = &getModel('document');

$ccDocument = &getController('document');


// 이미 존재하는 글인지 체크

$oDocIfo = $cmDocument->getDocument($doc_srl, FALSE, FALSE);

if($oDocIfo->isExists() && $oDocIfo->get('module_srl') != $mod_srl) return new Object(-1, 'msg_invalid_request');


// 사용자 정의 확장 필드 최대 20개로 제한함

$outvars = $this->_arrangeExtraField($oDocIfo->isExists() ? $oDocIfo->get('extra_vars') : NULL, &$args);

if(!$outvars->toBool()) return $outvars;

if(count($args->extra_vars->beluxe->extra) > 20) return new Object(-1, 'msg_max_extra_fields');


// 포인트  없으면 중단

if($is_use_point && $args->use_point > 0)

{

$cmPoint = &getModel('point');

if($cmPoint->getPoint($log_mbr_srl) < $args->use_point) return new Object(-1, 'msg_not_enough_point');

}


// 익명 사용중인지 체크

$is_anonymous = $log_mbr_srl && in_array($this->module_info->use_anonymous, array('Y', 'S'));

$args->anonymous = ($is_anonymous && ($this->module_info->use_anonymous == 'Y' || $args->anonymous == 'Y')) ? 'Y' : 'N';


$oDB = &DB::getInstance();

if($oDB)

{

$oDB->begin();


// 이미 존재하는 경우 수정

if($oDocIfo->isExists())

{

// 권한 체크

if(!$oDocIfo->isGranted())

{

$oDB->rollback();

return new Object(-1,'msg_not_permitted');

}


if(!$this->grant->manager)

{

//수정,삭제 잠금

if($this->module_info->use_lock_document == 'Y')

{

$is_lock = TRUE;

}

else if($this->module_info->use_lock_document == 'C')

{

$is_lock = (int) $this->module_info->use_lock_document_option <= $oDocIfo->get('comment_count');

}

else if($this->module_info->use_lock_document == 'T')

{

$is_lock = (time() - ztime($oDocIfo->get('regdate'))) > ((int) $this->module_info->use_lock_document_option * 60 * 60 * 24);

}


if($is_lock)

{

$oDB->rollback();

return new Object(-1,'msg_is_locked_document');

}

}


// 관리자 아니면 수정 불가

if(!$this->grant->manager) $args->is_notice = $oDocIfo->get('is_notice');


$out = $ccDocument->updateDocument($oDocIfo, $args);


// 익명 사용시 멥버 정보만 따로 업데이트

if($out->toBool() && $log_mbr_srl && $is_anonymous)

{

$cmMember = &getModel('member');

$oMbrIfo = $cmMember->getMemberInfoByMemberSrl(abs($oDocIfo->get('member_srl')));

$this->_setAnonymous($args, $oMbrIfo);

executeQuery('beluxe.updateDocumentMemberInfo', $args);

}


$is_upCateCnt = $oDocIfo->get('category_srl') != $args->category_srl;

$msg_code = 'success_updated';

$page = Context::get('page');

}

else

{

// 그렇지 않으면 신규 등록

//익명 사용시

if($is_anonymous = $args->anonymous == 'Y') $this->_setAnonymous($args, $oLogIfo);


// 신규에 srl 이 있으면 첨부 파일이 들어있는 경우

$out = $ccDocument->insertDocument($args, $is_anonymous);

$doc_srl = $out->get('document_srl');


// 관리자 메일이 등록되어 있으면 메일 발송

if($out->toBool() && $this->module_info->admin_mail)

{

$tmp_url = getFullUrl(''+ ','document_srl',$doc_srl);

$this->_sendMail(

($is_anonymous || $args->user_name) ? $args->user_name : $oLogIfo->user_name,

($is_anonymous || $args->email_address) ? $args->email_address : $oLogIfo->email_address,

$this->module_info->admin_mail,

$args->title,

sprintf("From : <a href=\"%s\">%s</a><br/>\r\n%s", $tmp_url, $tmp_url, $args->content)

);

}


$is_upCateCnt = TRUE;

$msg_code = 'success_registed';

}


// 오류 발생시 멈춤

if(!$out->toBool())

{

$oDB->rollback();

return $out;

}


$doc_srl = $out->get('document_srl');


// 포인트 사용이면 빼기

if($is_use_point && $args->use_point)

{

$ccPoint = &getController('point');

$ccPoint->setPoint($log_mbr_srl, $args->use_point, 'minus');

}


$oDB->commit();

}

else return new Object(-1,'msg_dbconnect_failed');


// 캐쉬 갱신

if($is_upCateCnt)

{

require_once(__XEFM_PATH__ . 'classes.cache.php');

BeluxeCache::categoryList($mod_srl);

}


// addons 에서 사용하기에 variables 입력 필요.

$this->add('mid', Context::get('mid'));

$this->add('document_srl', $doc_srl);


$this->setMessage($msg_code);

$this->_setLocation('document_srl', $doc_srl);

}


글쓴이 제목 최종 글
XE 공지 글 쓰기,삭제 운영방식 변경 공지 [16] 2019.03.05 by 남기남
스파기 xe코어 1.5.1.3 업하면서 phpmailer? 에러라면서 안됩니다. [1] 2012.01.25 by 백성찬
루큐모닷컴 게시판DX 말머리 추가  
JHN 해외서버로 이전이후 메뉴 수정이 안되요.. [1] 2012.01.25
natetan body에 onload 추가하는 방법은/  
카니엘 mysql select시 반복(중복)되서... [1] 2012.01.25 by 카니엘
당근11 TypeError: 's'은(는) null 이거나 개체가 아닙니다 라는 메시지와 함께 로그인 [2] 2012.01.25 by 천마리
nobleman 제로보드 첨부파일이 안됩니다 [2] 2012.01.25 by 우병규971
이경동747 레이아웃 추가 질문 ㅠㅠ (초보) [1] file 2012.01.25 by 송동우
왈라비 XE 설치시 Access Denied 에러 [2] 2012.01.25 by 송동우
sunmin 스크립트관련 질문 다시 올립니다; [1] 2012.01.25 by KanTa
때린데 또때려 레이아웃에서 페이지 수정시 만들어 놓은 위젯설정값이 초기화 ? [1] 2012.01.25
apollos 탭형식의 최신글에서 ....이런 공간이 생기는 이유는 무엇일까요 >?? [3] file 2012.01.25 by 송동우
whitemind 모바일 게시판 스킨 중에 갤러리형태로 볼 수 있는 스킨은 없나요?  
느림에의미 게시판 하단 형태를 이렇게 바꾸고 싶습니다. file  
구름나무바위 게시판 제목을 이미지로 출력하게 하는 방법 없을까요? [1] 2012.01.25 by KanTa
sunmin 게시판페이지에서만 스크립트 적용이 안됩니다ㅠㅠ  
에어라인 procBoardInsertDocument function 에서의 query 실행 부분 관련  
달진 확장변수 저장값은 DB중 어디에 있나요? [1] 2012.01.25 by 송동우
HoDong zb4.1 에서 XE1.5.1.2로 회원정보 및 게시판 데이터 db 이전시 추출한 xml 데이터가 이전이 모두 완료가 안될 때 어떻게 해야 하나요?ㅠ  
JHN 해외서버에서 rewrite_mod 사용어떻게설정해야하나요?  
whitemind 모바일 페이지에 대해서 질문드립니다.  
시크한민 디도스 공격을 받았을때 법적처리는???  
hellomi Contact us 모듈에서 파일첨부 기능 추가  
로그인, 회원가입란에 대해서 질문이 있습니다. [1] 2012.01.25 by 송동우
김희예 메뉴가 안보이는 문제.. [1] 2012.01.25 by 송동우
성호군 제로보드 게시판  
66index99 질문 세가지가 있습니다  
스풀링 제로보드XE... 한글관련 질문좀 드려요..(고수님들..제발좀..ㅠ.ㅠ) [2] file 2012.01.24 by 송동우
스풀링 마이그레이션 질문좀 할께요... file  
joyfuI 공홈 비밀번호 변경 어떻게 하나요? [1] file 2012.01.24 by 송동우