https://t.me/RX1948
Server : Apache/2.4.58 (Ubuntu)
System : Linux yumsem00.cafe24.com 5.4.0-131-generic #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022 x86_64
User : root ( 0)
PHP Version : 8.2.14
Disable Function : NONE
Directory :  /var/www/html/wp-content/plugins/kboard-comments/class/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/wp-content/plugins/kboard-comments/class/KBComment.class.php
<?php
/**
 * KBoard 워드프레스 게시판 댓글
 * @link www.cosmosfarm.com
 * @copyright Copyright 2021 Cosmosfarm. All rights reserved.
 * @license http://www.gnu.org/licenses/gpl.html
 */
class KBComment {
	
	private $abspath;
	
	var $board;
	var $row;
	var $option;
	var $attach;
	var $login_is_required_for_reading;
	var $you_do_not_have_permission_for_reading;
	var $remaining_time_for_reading;
	
	public function __construct(){
		$this->abspath = untrailingslashit(ABSPATH);
		$this->board = new KBoard();
		$this->row = new stdClass();
		$this->option = new KBCommentOption();
	}
	
	public function __get($name){
		$value = '';
		if(isset($this->row->{$name})){
			if($name == 'content'){
				$content = $this->row->{$name};
				$content = apply_filters('kboard_comments_content', $content, $this->row->uid, $this->row->content_uid);
				$content = str_replace('[', '&#91;', $content);
				$content = str_replace(']', '&#93;', $content);
				$value = $content;
			}
			else{
				$value = $this->row->{$name};
			}
		}
		return apply_filters('kboard_comments_value', $value, $name, $this);
	}
	
	public function __set($name, $value){
		$this->row->{$name} = $value;
	}
	
	/**
	 * 댓글 고유번호를 입력받아 정보를 초기화한다.
	 * @param int $uid
	 * @return KBComment
	 */
	public function initWithUID($uid){
		global $wpdb;
		$uid = intval($uid);
		$this->row = $wpdb->get_row("SELECT * FROM `{$wpdb->prefix}kboard_comments` WHERE `uid`='{$uid}'");
		$this->option = new KBCommentOption($this->uid);
		$this->initAttachedFiles();
		$wpdb->flush();
		return $this;
	}
	
	/**
	 * 댓글 정보를 입력받아 초기화한다.
	 * @param object $comment
	 * @return KBComment
	 */
	public function initWithRow($comment){
		global $wpdb;
		$this->row = $comment;
		$this->option = new KBCommentOption($this->uid);
		$this->initAttachedFiles();
		$wpdb->flush();
		return $this;
	}
	
	/**
	 * 댓글 첨부파일 정보를 초기화 한다.
	 * @return array
	 */
	public function initAttachedFiles(){
		global $wpdb;
		$this->attach = new stdClass();
		if($this->uid){
			$url = new KBCommentUrl($this->uid);
			$url->setBoard($this->getBoard());
			$result = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_board_attached` WHERE `comment_uid`='{$this->uid}'");
			foreach($result as $row){
				$this->attach->{$row->file_key} = array($row->file_path, $row->file_name, $url->getDownloadURLWithAttach($row->file_key), intval($row->file_size), intval($row->download_count), $row->metadata);
			}
		}
		return $this->attach;
	}
	
	/**
	 * 게시판 정보를 반환한다.
	 * @return KBoard
	 */
	public function getBoard(){
		if(isset($this->board->id) && $this->board->id){
			return $this->board;
		}
		else if($this->content_uid){
			$this->board = new KBoard();
			$this->board->initWithContentUID($this->content_uid);
			return $this->board;
		}
		return new KBoard();
	}
	
	/**
	 * 관리 권한이 있는지 확인한다.
	 * @return boolean
	 */
	public function isEditor(){
		if($this->uid && is_user_logged_in()){
			$board = $this->getBoard();
			if($board->isAdmin()){
				// 게시판 관리자 허용
				return true;
			}
			
			if($this->getUserID() == get_current_user_id()){
				// 본인인 경우 허용
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 보기 권한이 있는지 확인한다.
	 * @return boolean
	 */
	public function isReader(){
		if($this->uid){
			$board = $this->getBoard();
			if($board->meta->comment_permit && $this->status == 'pending_approval'){
				return false;
			}
			
			if($board->isAdmin()){
				// 게시판 관리자 허용
				return true;
			}
			
			if($board->meta->permission_comment_read == 'author'){
				if(is_user_logged_in()){
					return true;
				}
				$this->login_is_required_for_reading = true;
			}
			else if($board->meta->permission_comment_read == 'comment_owner'){
				if(is_user_logged_in()){
					if($this->getUserID() == get_current_user_id()){
						// 본인인 경우 허용
						return true;
					}
					
					$content = new KBContent();
					$content->initWithUID($this->content_uid);
					if($content->isEditor()){
						// 게시글 작성자 허용
						return true;
					}
					$this->you_do_not_have_permission_for_reading = true;
				}
				else{
					$this->login_is_required_for_reading = true;
				}
			}
			else{
				if(!is_user_logged_in() && $board->meta->permission_comment_read_minute){
					$this->remaining_time_for_reading = ($board->meta->permission_comment_read_minute * 60) - (current_time('timestamp') - strtotime($this->created));
					if($this->remaining_time_for_reading <= 0){
						return true;
					}
				}
				else{
					return true;
				}
			}
		}
		return false;
	}
	
	/**
	 * 댓글 정보를 업데이트한다.
	 */
	public function update(){
		global $wpdb;
		if($this->uid){
			foreach($this->row as $key=>$value){
				if($key == 'uid') continue;
				else if($key == 'user_display' || $key == 'password'){
					$value = sanitize_text_field($value);
				}
				else if($key == 'content'){
					$value = kboard_safeiframe(kboard_xssfilter($value));
				}
				$key = esc_sql(sanitize_key($key));
				$value = esc_sql($value);
				$update[] = "`$key`='$value'";
			}
			
			$wpdb->query("UPDATE `{$wpdb->prefix}kboard_comments` SET ".implode(',', $update)." WHERE `uid`='{$this->uid}'");
			
			// 댓글 수정 액션 훅 실행
			do_action('kboard_comments_update', $this->uid, $this->content_uid, $this->getBoard());
		}
	}
	
	/**
	 * 댓글을 삭제한다.
	 * @param boolean $delete_action
	 */
	public function delete($delete_action=true){
		global $wpdb;
		if($this->uid){
			$board = $this->getBoard();
			
			if($delete_action){
				// 댓글 삭제 액션 훅 실행
				do_action('kboard_comments_delete', $this->uid, $this->content_uid, $board);
					
				// 댓글삭제 증가 포인트
				if($board->meta->comment_delete_up_point && (!$board->meta->point_applied_to || !$board->isAdmin())){
					if($this->user_uid){
						if(function_exists('mycred_add')){
							$point = intval(get_user_meta($this->user_uid, 'kboard_comments_mycred_point', true));
							update_user_meta($this->user_uid, 'kboard_comments_mycred_point', $point + $board->meta->comment_delete_up_point);
				
							mycred_add('comment_delete_up_point', $this->user_uid, $board->meta->comment_delete_up_point, __('Deleted comment increment points', 'kboard-comments'));
						}
					}
				}
					
				// 댓글삭제 감소 포인트
				if($board->meta->comment_delete_down_point && (!$board->meta->point_applied_to || !$board->isAdmin())){
					if($this->user_uid){
						if(function_exists('mycred_add')){
							$point = intval(get_user_meta($this->user_uid, 'kboard_comments_mycred_point', true));
							update_user_meta($this->user_uid, 'kboard_comments_mycred_point', $point + ($board->meta->comment_delete_down_point*-1));
				
							mycred_add('comment_delete_down_point', $this->user_uid, ($board->meta->comment_delete_down_point*-1), __('Deleted comment decrease points', 'kboard-comments'));
						}
					}
				}
			}
			
			// 댓글 정보 삭제
			$wpdb->query("DELETE FROM `{$wpdb->prefix}kboard_comments` WHERE `uid`='{$this->uid}'");
			$wpdb->query("DELETE FROM `{$wpdb->prefix}kboard_comments_option` WHERE `comment_uid`='{$this->uid}'");
			
			// 추천 정보 삭제
			$wpdb->query("DELETE FROM `{$wpdb->prefix}kboard_vote` WHERE `target_uid`='{$this->uid}' AND `target_type`='commemt'");
			
			// 게시글의 댓글 숫자를 변경한다.
			$wpdb->query("UPDATE `{$wpdb->prefix}kboard_board_content` SET `comment`=`comment`-1 WHERE `uid`='{$this->content_uid}'");
			
			$this->deleteAllAttached();
			
			// 미디어 파일을 삭제한다.
			$media = new KBCommentMedia();
			$media->deleteWithCommentUID($this->uid);
			
			// 자식 댓글을 삭제한다.
			$this->deleteChildren();
			
			$wpdb->flush();
		}
	}
	
	/**
	 * 내용을 반환한다.
	 * @return string
	 */
	public function getContent(){
		if(isset($this->row->content)){
			return $this->row->content;
		}
		return '';
	}
	
	/**
	 * 자식 댓글을 삭제한다.
	 * @param int $parent_uid
	 */
	public function deleteChildren($parent_uid=''){
		global $wpdb;
		if($this->uid){
			if($parent_uid){
				$parent_uid = intval($parent_uid);
			}
			else{
				$parent_uid = $this->uid;
			}
			
			$results = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_comments` WHERE `parent_uid`='{$parent_uid}'");
			foreach($results as $key=>$child){
				$wpdb->query("DELETE FROM `{$wpdb->prefix}kboard_comments` WHERE `uid`='{$child->uid}'");
				$wpdb->query("DELETE FROM `{$wpdb->prefix}kboard_comments_option` WHERE `comment_uid`='{$child->uid}'");
				
				// 게시글의 댓글 숫자를 변경한다.
				$wpdb->query("UPDATE `{$wpdb->prefix}kboard_board_content` SET `comment`=`comment`-1 WHERE `uid`='{$child->content_uid}'");
				
				$this->deleteAllAttached($child->uid);
				
				// 미디어 파일을 삭제한다.
				$media = new KBCommentMedia();
				$media->deleteWithCommentUID($child->uid);
				
				// 자식 댓글을 삭제한다.
				$this->deleteChildren($child->uid);
			}
		}
	}
	
	/**
	 * 작성자 ID를 반환한다.
	 * @return int
	 */
	public function getUserID(){
		if($this->uid && $this->user_uid){
			return intval($this->user_uid);
		}
		return 0;
	}
	
	/**
	 * 작성자 이름을 반환한다.
	 * @return string
	 */
	public function getUserName(){
		if($this->uid && $this->user_display){
			// 작성자명 마스킹
			$board = $this->getBoard();
			if($board->meta->display_name_masking){
				return kboard_text_masking($this->user_display);
			}
			
			return $this->user_display;
		}
		return '';
	}
	
	/**
	 * 작성자 이름을 반환한다.
	 * @param string $user_display
	 * @return string
	 */
	public function getUserDisplay($user_display=''){
		global $kboard_comment_builder;
		
		if($this->uid){
			if(!$user_display){
				$user_display = sprintf('%s %s', get_avatar($this->getUserID(), 24, '', $this->getUserName()), $this->getUserName());
			}
			
			$user_id = $this->getUserID();
			$user_name = $this->getUserName();
			$type = 'kboard-comments';
			$builder = $kboard_comment_builder;
			
			$board = $this->getBoard();
			if($board->meta->comments_username_masking == '1'){
				$user_display = sprintf('%s %s', get_avatar($this->getUserID(), 24, '', $this->getObfuscateName()), $this->getObfuscateName());
			}
			else if($board->meta->comments_username_masking == '2'){
				if($this->option->hide == '1'){
					$user_display  = sprintf('%s %s', get_avatar($this->getUserID(), 24, '', $this->getObfuscateName()), $this->getObfuscateName());
				}
			}
			
			if($board->meta->comments_anonymous == '1'){
				$user_display = sprintf('%s %s', get_avatar('', 24, '', '익명'), '익명');
			}
			else if($board->meta->comments_anonymous == '2'){
				if($this->option->anonymous == '1'){
					$user_display = sprintf('%s %s', get_avatar('', 24, '', '익명'), '익명');
				}
			}
			
			if($board->meta->comment_permit && $this->status == 'pending_approval'){
				$user_display = '승인 대기중';
			}
			$user_display = apply_filters('kboard_user_display', $user_display, $user_id, $user_name, $type, $builder);
		}
		return $user_display;
	}
	
	/**
	 * 작성자 이름을 읽을 수 없도록 만든다.
	 * @param string $replace
	 * @return string
	 */
	public function getObfuscateName($replace='*'){
		if($this->uid && $this->user_display){
			$strlen = mb_strlen($this->user_display, 'utf-8');
			
			if($strlen > 3){
				$showlen = 2;
			}
			else{
				$showlen = 1;
			}
			
			$obfuscate_name = mb_substr($this->user_display, 0, $showlen, 'utf-8') . str_repeat($replace, $strlen-$showlen);
			return apply_filters('kboard_obfuscate_name', $obfuscate_name, $this->user_display, $this->getBoard());
		}
		return apply_filters('kboard_obfuscate_name', '', '', $this->getBoard());
	}
	
	/**
	 * 댓글의 모든 첨부파일을 삭제한다.
	 */
	public function deleteAllAttached($comment_uid=''){
		global $wpdb;
		$comment_uid = $comment_uid ? intval($comment_uid) : $this->uid;
		if($comment_uid){
			$result = $wpdb->get_results("SELECT `file_path` FROM `{$wpdb->prefix}kboard_board_attached` WHERE `comment_uid`='$comment_uid'");
			foreach($result as $file){
				kbaord_delete_resize($this->abspath . $file->file_path);
				@unlink($this->abspath . $file->file_path);
			}
			$wpdb->query("DELETE FROM `{$wpdb->prefix}kboard_board_attached` WHERE `comment_uid`='$comment_uid'");
		}
	}
	
	/**
	 * 첨부파일을 삭제한다.
	 * @param string $key
	 */
	public function deleteAttached($key){
		global $wpdb;
		if($this->uid){
			$key = sanitize_key($key);
			$key = esc_sql($key);
			$file = $wpdb->get_var("SELECT `file_path` FROM `{$wpdb->prefix}kboard_board_attached` WHERE `comment_uid`='$this->uid' AND `file_key`='$key'");
			if($file){
				kbaord_delete_resize($this->abspath . $file);
				@unlink($this->abspath . $file);
				$wpdb->query("DELETE FROM `{$wpdb->prefix}kboard_board_attached` WHERE `comment_uid`='$this->uid' AND `file_key`='$key'");
			}
		}
	}
}

https://t.me/RX1948 - 2025