<?php // (2024.11.24, 차재복, Cha Jae Bok, http://www.ktword.co.kr)
//** 공통으로 쓰일 수 있는 사용자 정의 함수들 모음 **
# 내용 중에 `[ ... ]` 등 특정 쌍(pair) delimiter 사이 내부 텍스트를 `없애기` 또는 `교체하기` 또는 `감쌈(배열[2])`
function pair_delimiter($rest,$left,$right,$replace='',$callback_para='') { // replace : 교체 문자열 또는 콜백함수명
$right_pos=0;
while ( ($left_pos=strpos($rest,$left,$right_pos))!==false
and ($right_pos=strpos($rest,$right,$left_pos))!==false ) {
$left_str = substr($rest,0,$left_pos);
$right_str = substr($rest,$right_pos+strlen($right));
$middle_str = substr($rest,$left_pos,$right_pos-$left_pos+strlen($right));
if (empty($replace) and empty($callback)) { // 제거
$replaced_str = '';
} else if (!empty($replace) and !is_array($replace) and empty($callback_para)) { // 단순 교체
$replaced_str = $replace;
} else if (!empty($replace) and !empty($callback_para)) { // 조건 교체 (by callback)
$replaced_str = $replace($middle_str, $callback_para); // 콜백 함수 $replace 및 콜백용 파라미터 호출
} else if (is_array($replace) and count($replace)==2) { // 감쌈 (매개변수 배열 원소 2개로)
$replaced_str = $replace[0].$middle_str.$replace[1];
} else {
return $rest;
}
$rest = $left_str . $replaced_str . $right_str;
$right_pos = $left_pos + strlen($replaced_str);
}
return $rest;
}
# 용어해설 첫부분 요약 추출
function synopsis_extract($str) {
$str = mb_substr($str,3,200,'utf-8'); // 200자 제한
$erase_arr = ["\r\n","\r","\n","'",'"',">"," "]; // 불필요 문자들
$str = str_replace($erase_arr," ",$str); // 불필요 문자들 제거 (공백 교체)
$str = pair_delimiter($str,"<a ","</a>"); // a 태그 제거
return $str;
}
# 최근 용어해설 수정 3건 보여주기
function recent_word_updated($dbi) {
$query = "select *,date_format(sujung,'%c월%e일') as day from cjb_dict order by sujung desc limit 3";
$result = mysqli_query($dbi, $query);
if (mysqli_errno($dbi)) { echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n"; }
$recent_words = '';
while ($matched=mysqli_fetch_assoc($result)) {
$array_y = explode(",",$matched['yako']);
$array_k = explode(",",$matched['korean']);
if (count(array_filter($array_y)) > 0) $word = array_shift($array_y);
else if (count(array_filter($array_k)) > 0) $word = array_shift($array_k);
// 함수 pair_delimiter()
if (strpos(getcwd(),'\\test\\') !== false or strpos(getcwd(),'/test/') !== false)
include_once "../base_utils/common_utils.php";
else
include_once "../test/base_utils/common_utils.php";
$word = pair_delimiter($word,'[',']');
// 최근 편집용어 출력
$recent_words .= " ";
$recent_words .= "<a href=/test/view/view.php?no=$matched[no]>";
$recent_words .= $word;
$recent_words .= "</a>";
// 편집날짜
// $recent_words .= "({$matched['day']})";
}
return $recent_words;
}
# 최근 소스 수정 3건 보여주기
function recent_src_updated($dbi, $srcView='') {
$query = "select dir,filename,date_format(date,'%c월%e일') as day from src_files order by date desc limit 3";
$result = mysqli_query($dbi,$query);
if (mysqli_errno($dbi)) {echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";}
$recent_src = '';
while ($matched=mysqli_fetch_assoc($result)){
$recent_src .= " ";
if(empty($srcView)){
$recent_src .= $matched[filename];
} else {
$recent_src .= "<a href='/test/open_src/view_src.php?dir={$matched['dir']}&file={$matched['filename']}' class='src_view'>";
$recent_src .= $matched['filename'];
$recent_src .= "</a>";
}
$recent_src .= '('.$matched['day'].')';
}
return $recent_src;
}
# 알파벳 선택 (알파벳별 편집용 1 또는 검색용 2)
function alphabet_choice_v2($type) {
$letters = "가나다라마바사아자차카타파하ABCDEFGHIJKLMNOPQRSTUVWXYZ數";
switch ($type) {
// 편집용 화면에 쓰일 때
case 1 :
echo "<button id='word_select'>" . "\n";
echo "용어 선택" . "\n";
echo "</button>" . "\n";
echo "<select>" . "\n";
for($i=0; $i<mb_strlen($letters);$i++) {
$letter = mb_substr($letters,$i,1);
echo "<option value='{$i}'>{$letter}</option>" . "\n";
}
echo "</select>" . "\n";
break;
// 검색용 화면에 쓰일 때
case 2 :
for($i=0; $i<mb_strlen($letters);$i++) {
$letter = mb_substr($letters,$i,1);
if($letter=='A') echo "<br><br>" . "\n";
echo "<a href='' class='words' data-no='{$i}'>{$letter}</a> " . "\n";
}
echo "<br><br>" . "\n";
echo "<span id='word_out'></span>" . "\n";
break;
}
}
# 용어 해설,분류 총 건수
function word_statistics($dbi) {
// 용어해설 총 건수 : $word_num
$query = "select * from cjb_dict";
$result = mysqli_query($dbi, $query);
if (mysqli_errno($dbi)) {echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";}
$word_num = mysqli_num_rows($result);
// 분류항목 건수 : $gubun_num
$query = "select * from gubun_tree_v2";
$result = mysqli_query($dbi, $query);
if (mysqli_errno($dbi)) {echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";}
$gubun_num = mysqli_num_rows($result);
return array('word_num'=>$word_num, 'gubun_num'=>$gubun_num);
}
# 용어 명칭 콤머(,) 구분 리스트 출력
function wordListComma($yako,$korean,$full_name,$extra) {
$name = (empty($yako) ? '' : $yako.', ')
.(empty($korean) ? '' : $korean.', ')
.(empty($full_name) ? '' : $full_name.', ')
.(empty($extra) ? '' : $extra);
$name = str_replace(',',', ',$name);
$name = str_replace(' ',' ',$name);
$name = pair_delimiter($name,'[',']');
$name = str_replace(' ,',',',$name);
if(substr($name,-2)==', ') $name = substr($name,0,strlen($name)-2);
return $name;
}