안녕하세요...낮에도 전화를 한번 드렸습니다.
계속 수정하다가 방향이 잘 잡히지 않아서 여기에 글을 남깁니다.
하나의 공유아이디로 사용하다보니, 게시글 각각을 제어(수정, 삭제)하기 위하여 각 게시글에 비밀번호를 부여하여 사용할 수 있도록 하고 싶습니다.
1. default스킨의 editor.php 파일에 로그인 사용자 비밀번호 부여
<?php if(is_user_logged_in()):?>
<div class="kboard-attr-row">
<label class="attr-name" for="kboard-input-password"><?php echo __('Password', 'kboard')?></label>
<div class="attr-value"><input type="password" id="kboard-input-password" name="password" value="<?php echo $content->password?>" placeholder="<?php echo __('Password', 'kboard')?>..."></div>
</div>
<div class="kboard-attr-row">
<label class="attr-name"><img src="<?php echo kboard_captcha()?>" alt=""></label>
<div class="attr-value"><input type="text" name="captcha" value=""></div>
</div>
<?php endif?>
2. 스킨의 document.php파일의 right영역
<div class="right">
<a href="<?php echo $url->set('uid', $this->uid)->set('mod', 'list')->toString();
if(is_user_logged_in() && (isset($_POST['password']) || $_POST['password'])){
echo '<script>alert("'.__('Please enter your password.', 'kboard').'");</script>';
echo '<script>window.location.href="' . $url . '";</script>';
exit;
}?>" class="kboard-default-button-small" onclick="return confirm('<?php echo __('수정권한은 관리자 승인을 통하여 글쓴이만 가능합니다. 관리자에게 문의하세요.', 'kboard')?>');"><?php echo __('Edit', 'kboard')?></a>
<a href="<?php echo $url->set('uid', $this->uid)->set('mod', 'list')->toString();
if(is_user_logged_in() && (isset($_POST['password']) || $_POST['password'])){
echo '<script>alert("'.__('Please enter your password.', 'kboard').'");</script>';
echo '<script>window.location.href="' . $url . '";</script>';
exit;
}?>" class="kboard-default-button-small" onclick="return confirm('<?php echo __('삭제권한은 관리자 승인을 통하여 글쓴이만 가능합니다. 관리자에게 문의하세요.', 'kboard')?>');"><?php echo __('Delete', 'kboard')?></a>
</div>
그런데, 현재는 alert창 형태로 관리자에게 문의하는 형태로만 되어 있는데요. 이것을 비밀번호 확인을 통하여 수정, 삭제 권한을 주고 싶은데, class파일의 어디를 제어해야 할지 모르겠군요.
전화문의시에는 KBoardBuilder.class.php 파일의 builderEditor()와 builderRemove()를 수정하라 하셨는데요....
좀더 구체적으로 혹시 가이드 좀 가능할까요?
바쁘실텐데 죄송하오며,
항상 감사합니다.
수정해야 할 부분이 많을 듯합니다.
우선 삭제 기능 관련해서는 아래 굵게 표시된 코드를 수정하면 어떨까 합니다.
public function builderRemove(){
$url = new KBUrl();
if(strpos($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']) === false){
echo '<script>alert("'.__('This page is restricted from external access.', 'kboard').'");</script>';
echo "<script>window.location.href='{$url->set('mod', 'list')->toString()}';</script>";
exit;
}
$content = new KBContent($this->board_id);
$content->initWithUID($this->uid);
$confirm_view = false;
if(!$this->board->isEditor($content->member_uid)){
if($this->board->permission_write=='all' && !$content->member_uid){
if(!$this->board->isConfirm($content->password, $content->uid, true)){
$confirm_view = true;
}
}
else{
echo '<script>alert("'.__('You do not have permission.', 'kboard').'");history.go(-1);</script>';
exit;
}
}
if($confirm_view){
$board = $this->board;
$content->board = $board;
$board->content = $content;
$vars = array(
'content' => $content,
'url' => $url,
'skin_path' => $this->skin->url($this->skin_name),
'skin_dir' => $this->skin->dir($this->skin_name),
'board' => $board,
'boardBuilder' => $this,
);
echo $this->skin->load($this->skin_name, 'confirm.php', $vars);
}
else{
$delete_immediately = get_option('kboard_content_delete_immediately');
if($delete_immediately){
$content->remove();
}
else{
$content->status = 'trash';
$content->updateContent();
}
// 삭제뒤 게시판 리스트로 이동한다.
echo "<script>window.location.href='{$url->set('mod', 'list')->toString()}';</script>";
exit;
}
}
아래처럼 바꿔보시겠어요?
public function builderRemove(){
$url = new KBUrl();
if(strpos($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']) === false){
echo '<script>alert("'.__('This page is restricted from external access.', 'kboard').'");</script>';
echo "<script>window.location.href='{$url->set('mod', 'list')->toString()}';</script>";
exit;
}
$content = new KBContent($this->board_id);
$content->initWithUID($this->uid);
$confirm_view = false;
if(!$this->board->isConfirm($content->password, $content->uid, true)){
$confirm_view = true;
}
if($confirm_view){
$board = $this->board;
$content->board = $board;
$board->content = $content;
$vars = array(
'content' => $content,
'url' => $url,
'skin_path' => $this->skin->url($this->skin_name),
'skin_dir' => $this->skin->dir($this->skin_name),
'board' => $board,
'boardBuilder' => $this,
);
echo $this->skin->load($this->skin_name, 'confirm.php', $vars);
}
else{
$delete_immediately = get_option('kboard_content_delete_immediately');
if($delete_immediately){
$content->remove();
}
else{
$content->status = 'trash';
$content->updateContent();
}
// 삭제뒤 게시판 리스트로 이동한다.
echo "<script>window.location.href='{$url->set('mod', 'list')->toString()}';</script>";
exit;
}
}
네....바쁘실텐데, 밤에 답글 달아주시고....
한번 해보겠습니다...
감사합니다.
if(!$this->board->isConfirm($content->password, $content->uid, true)){
$confirm_view = true;
}
위의 부분은 가능하온데, 최고관리자와 공유아이디의 권한을 적절히 주니, 다른게시판을 건드리지 않고, skin만 수정해서 되더군요..
감사합니다.
if(!$this->board->isEditor($content->member_uid)){
if($this->board->permission_write=='all' && !$content->member_uid){
if(!$this->board->isConfirm($content->password, $content->uid, true)){
$confirm_view = true;
}
}
else{
echo '<script>alert("'.__('You do not have permission.', 'kboard').'");history.go(-1);</script>';
exit;
}
}
/**추가코드 **/
elseif(!current_user_can('administrator') || current_user_can('editor') ){
if(!$this->board->isConfirm($content->password, $content->uid, true)){
$confirm_view = true;
}
}
/**추가코드 end**/
그런데, 수정시에는 boardEditor()를 건드려야하는데,,,이것은 따로 함수를 만들던지 방법을 강구해야 할 것 같은데요...ㅜㅜ