<?php // (2020.7.31, 차재복, Cha Jae Bok, http://www.ktword.co.kr)
// [function] keyword_find_update(), keyword_add(), word_no_add()
// 해당 키워드에 대해 소스 파일들을 훓어서 찾고, 파일 번호를 기록
function keyword_find_update($keyword, $lang, $dbi) {
	if ($_SESSION[user_type] != '종합관리자') return;	// 해킹방어
    $query = "select fno,dir,filename,expr,code from src_files where code is not null"; 
	$result=mysqli_query($dbi, $query);
		if (mysqli_errno($dbi)) { echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";}
	$i = 1;
	$file_no_list = '';
	while ( $matched = mysqli_fetch_assoc($result) ) {
		$is_find = false;
		$fileExt = substr(strrchr($matched[filename],'.'),1);
		if ( strtolower($fileExt)==strtolower($lang) ) {
			if ($lang == 'JS') {
				if(preg_match("/[\s\.=(]{$keyword}/",$matched[code])) $is_find = true;
				// \s (공백문자:공백,탭,줄바꿈), \. (마침표,객체 내 프로퍼티 접근), = (등호), ( (좌괄호)
			} else if ($lang == 'PHP') {
				$modi_keyword = str_replace('$','\$',$keyword);	// $ => \$ (escape 
				if(preg_match("/[\s=(!\.]{$modi_keyword}[^a-z^A-Z^_]/",$matched[code])) $is_find = true;
				// 앞 포함 : \s (공백문자:공백,탭,줄바꿈), = (등호), ( (좌괄호), ! (not), \. (마침표,문자열 연결)
				// 뒤 제외 : ^A-Z ^a-z (영문자), ^_ (대시) 
			}
			if ($is_find) {
				$file_no_list = ( $i==1 ? $matched[fno] : $file_no_list.','.$matched[fno] );
				// (디버깅용)	
				//echo $matched[filename]." ";
				$i += 1;
			}
		}
    }
	if (!empty($file_no_list)) {
		echo ($i-1)."개 소스 파일 찾고, 업데이트 함 !!! <br>";
		$query = "update lang_keyword set file_no_list='{$file_no_list}' where keyword='{$keyword}' and lang='{$lang}'"; 
		$result=mysqli_query($dbi, $query);
			if (mysqli_errno($dbi)) { echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";}
	} else {
		echo "해당 키워드 찾기 실패 !!!";
	}
}
function keyword_add ($find, $cur_lang, $dbi) {
	// 해킹방어
	if ($_SESSION[user_type] != '종합관리자') $msg = '편집권한 없음';	// 해킹방어
	if (empty($find)) $msg .= '키워드 제시 없음';
	$find = trim(mysqli_real_escape_string($dbi, $find));
	$cur_lang = trim(mysqli_real_escape_string($dbi, $cur_lang));
	$query = "insert into lang_keyword (keyword,lang) values ('{$find}','{$cur_lang}')";
	$result=mysqli_query($dbi, $query);
		if (mysqli_errno($dbi)) { $msg .= mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n"; }
	if (mysqli_affected_rows($dbi) <= 0) {
		$msg .= "레코드 삽입 실패 !!!";
	}
	return array('msg'=>$msg);
}
function word_no_add ($word_no, $find, $cur_lang, $dbi) {
	if ($_SESSION[user_type] != '종합관리자') $msg = '편집권한 없음';	// 해킹방어
	if (empty($word_no)) $msg .= '용어해설번호 없음';
	$word_no = mysqli_real_escape_string($dbi, $word_no);
	$cur_lang = mysqli_real_escape_string($dbi, $cur_lang);
	$query = "update lang_keyword set word_no=if(word_no is null,'$word_no',concat(word_no,',$word_no')) where lang='{$cur_lang}' and keyword='$find'";
	$result=mysqli_query($dbi, $query);
		if (mysqli_errno($dbi)) { $msg .= mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n"; }
	return array('msg'=>$msg);
}
?>