<?php
/*=================================================================================================
 * 멀티 업로더를 위해서 추가된 부분 :: 시작
 * 기존 소스의 파일 추가해 주는 부분 위에서 정의해 주어 되도록 기본 파일에서 처리할 수 있도록 한다
 * 1. 기존 파일 삭제가 있다면 파일의 삭제 
 * 2. 기존 파일 순서 변경이 있다면 순서 변경 수정 
 * 3. 새로운 파일 있으면 인서트 2025-02-26(수)
 * 삭제 데이터가 있다면 먼저 삭제후 리스트의 정보를 순서대로 담고 ( 새로운것, 기존것 )
 * 해당 번호의 파일을 모두 삭제한 후 다시 정렬된 순서로 인서트 한다
 *---------------------------------------------------
 *
 *
 * 멀티 업로더를 위해서 추가된 부분 :: 시작
 * 기존 소스의 파일 처리 소스 위에 정의해 주어 되도록 기본 파일에서 처리할 수 있도록 한다
 * 
 * 1. 삭제 리스트를 만들어 넘겨 준다
 *    원본 소스의 변수명 : $_POST['bf_file_del'][$i]
 * 2. 
 *
**-----------------------------------------------------------------------------------------------*/

// 변수 초기화 
unset($_multiJsonData, $_multiDataAry, $_file_list_cnt, $_file_up_data, $_file, $_list_thumbnail, $_rowAry); 
unset($newArray, $blankAry, $z, $s, $_isUpdate, $_isDelete, $_isUpload); 
unset($sql1, $result1, $sql2, $result2, $emptyIndexes, $_submit_delete_list, $_del_qry2);


/*===============================================
 * 멀티 파일 업로더 설정 파일 연결
**---------------------------------------------*/
if( file_exists( G5_PLUGIN_PATH.'/multi_uploader/multi_uploader_config.php' ) ){
    include_once ( G5_PLUGIN_PATH.'/multi_uploader/multi_uploader_config.php' ); 
}

// 변수 초기화
$_use_multiuploader = $_use_multiuploader ?? 'No';

if($_use_multiuploader === 'Yes'){ // 멀티 업로더 사용을 승인 했다면 
	$_multiJsonData          = (!empty($_POST['multi_upload_data'])) ? $_POST['multi_upload_data'] : []; 
    $_multiDataAry           = json_decode( stripslashes($_multiJsonData), true);          // JSON을 PHP 배열로 변환
	$_file_list_cnt          = isset($_multiDataAry['up_cnt']) ? $_multiDataAry['up_cnt']  : 0;  // 업로드된 데이터의 갯수
    $_file_up_data           = $_multiDataAry['up_data'] ? $_multiDataAry['up_data'] : []; // 업로드된 데이터 
	$_list_thumbnail         = isset($_POST['list_thumbnail']) ? $_POST['list_thumbnail'] : 0;// 선택된 썸네일
    $_rowAry                 = []; // 리스트의 정보를 새로운 입력시 비워서 기존것은 데이터의 정보를 담는다  
	$newArray                = []; // 새 배열 생성
	$blankAry                = []; // 빈 업로드에 사용하는 배열
  //$_FILES['bf_file']       = []; // 기존 사용하는 파일업로드 관련 변수에 옮겨줌  
    $_FILES['bf_multi_file'] = $_FILES['bf_multi_file'] ? $_FILES['bf_multi_file'] : [];
    $z                       = 0;
	$s                       = 0; 

    $_isUpdate        = 'No'; // 파일 삭제가 있었는지
    $_isDelete        = 'No'; // 수정시 순서 변경등 데이터 변경이 있었는지
    $_isUpload        = 'No'; // 새로운 업로드가 있었는지

	$sql1     = "SELECT * FROM {$g5['board_file_table']} WHERE bo_table =  '{$bo_table}' AND wr_id = '{$wr_id}'";
	$result1  = sql_query($sql1);  
	$sql2     = "SELECT * FROM {$g5['board_file_table']} WHERE bo_table =  '{$bo_table}' AND wr_id = '{$wr_id}' AND bf_no >='0' AND bf_source ='' AND bf_file =''";
	$result2  = sql_query($sql2); 

    /*===========================================
	 * 1. 배열 크기 확장 및 빈 배열 삽입
	**-----------------------------------------*/
	while ($data = sql_fetch_array($result2)){
		$blankAry[$s]['bo_table']  = $data['bo_table'];  
		$blankAry[$s]['wr_id']     = $data['wr_id'];  
		$blankAry[$s]['bf_no']     = $data['bf_no'];   
		$s++;
	}
 
	// 빈 자리 추가를 위한 bf_no 목록
	$emptyIndexes = array_column($blankAry, 'bf_no');

	// 새 배열 생성
	foreach ($_file_up_data as $item) {
		// 현재 gnu_bf_no에 해당하는 위치 삽입 
		$newArray[] = $item;
	}
	 
    // 배열을 추가  
	foreach ($emptyIndexes as $index) { 
		array_splice($newArray, $index, 0, [['makeType' => 'Modify', 'gnu_bf_no' => $index]]);
	}
	// 변경된 배열을 $_file_up_data에 저장
	$_file_up_data = $newArray;

 
	// 배열에 디비에서 정보를 가져와 추가 시킨다
	for($i=0; $i<count($_file_up_data); $i++){ 
		
		$_file = &$_file_up_data[$i]; // 참조 변수 사용
		// `gnu_bf_no`가 빈 값이 아니고, 숫자일 때만 조건 추가 
		if (is_numeric($_file['gnu_bf_no']) && $_file['makeType'] == 'Modify') {	
			$where  = "AND wr_id = '{$wr_id}' ";
			$where .= "AND bf_no = '{$_file['gnu_bf_no']}'";
			$_query = "SELECT * FROM {$g5['board_file_table']} WHERE bo_table = '{$bo_table}' $where"; 
			$_callData = sql_fetch($_query);

		//  $_file['query']             = $_query;
			$_file['idx']               = $i;
			$_file['bo_table']          = $_callData['bo_table']          ?? '';
			$_file['wr_id']             = $_callData['wr_id']             ?? '';
			$_file['bf_no']             = $_callData['bf_no']             ?? '';
			$_file['bf_source']         = $_file['fileName']              ?? ''; // 뷰에서 수정으로 바뀌어 들어올 수 있음
			$_file['bf_file']           = $_callData['bf_file']           ?? '';
			$_file['bf_download']       = $_callData['bf_download']       ?? '';
			$_file['bf_content']        = $_callData['bf_content']        ?? '';//원본에서는 타이틀
			$_file['bf_fileurl']        = $_callData['bf_fileurl']        ?? ''; // 그누보드에서 예비용
			$_file['bf_thumburl']       = $_callData['bf_thumburl']       ?? ''; // 그누보드에서 예비용
			$_file['bf_storage']        = $_callData['bf_storage']        ?? ''; // 그누보드에서 예비용
			$_file['bf_filesize']       = $_callData['bf_filesize']       ?? '';
			$_file['bf_width']          = $_callData['bf_width']          ?? '';
			$_file['bf_height']         = $_callData['bf_height']         ?? '';
			$_file['bf_type']           = $_callData['bf_type']           ?? '';  
			$_file['bf_datetime']       = $_callData['bf_datetime']       ?? '';
			$_file['bf_list_thumbnail'] = $_callData['bf_list_thumbnail'] ?? '';
 
			if( $i !=  $_file['gnu_bf_no'] || 
				$_file['bf_source'] !=  $_callData['bf_source'] ){// 넘겨받은 데이터, 서버 데이터
				$_isUpdate = 'Yes';// 순서, 이름, 대표 썸네일 수정이 있다면
			}
 
			// 빈 파일 업로드로 채운다 ::중요
			foreach (['name', 'type', 'tmp_name', 'error', 'size'] as $key) {
				$_FILES['bf_file'][$key][$i] = '';
			}
		} //end if

		// 파일 업로드
		if(!$_file['gnu_bf_no'] &&  $_file['makeType'] == 'New') {
		  	$_isUpload    = 'Yes';// 파일 입력이 되었다면
			$_file['idx'] = $i;

			foreach (['name', 'type', 'tmp_name', 'error', 'size'] as $key) {
				$_FILES['bf_file'][$key][$i] = $_FILES['bf_multi_file'][$key][$z] ?? '';
			}
			$z++;
		}
		
	}//end for

    /*===============================================
     * 2. 삭제 리스트를 삭제
    **---------------------------------------------*/
  	$_submit_delete_list  = !empty($_POST['submit_delete_list'])? json_decode($_POST['submit_delete_list'], true) : [];
	$_del_list_cnt = count($_submit_delete_list);

    for($i=0; $i<$_del_list_cnt; $i++){
     	$_isDelete = 'Yes';
        // 업로드된 파일을 찾아서 삭제한다
		$del_query = "SELECT * FROM {$g5['board_file_table']} WHERE bo_table = '{$bo_table}' AND wr_id = '{$wr_id}' AND bf_no = '{$_submit_delete_list[$i]}' ";

        $_row1 = sql_fetch($del_query);
        $_delete_file = run_replace('delete_file_path', G5_DATA_PATH.'/file/'.$bo_table.'/'.str_replace('../', '', $_row1['bf_file']), $_row1);

		// 파일 삭제
        if( file_exists($_delete_file) ){
            @unlink($_delete_file);
        }

        // 썸네일삭제
        if(preg_match("/\.({$config['cf_image_extension']})$/i", $_row1['bf_file'])) { 
            delete_board_thumbnail($bo_table, $_row1['bf_file']);
        }

        // 삭제 데이터 row를 삭제한다
        $_del_qry1 = "DELETE FROM {$g5['board_file_table']} WHERE bo_table = '{$bo_table}' 
        AND wr_id = '{$wr_id}' AND bf_no = '{$_submit_delete_list[$i]}' ";
        sql_query($_del_qry1);

    }
 

    /*===============================================
     * 3. 순서 변경이 있을수 있으니 순서 업데이트
	 *    새로운거 넣고 기존거 내용 변경
    **---------------------------------------------*/
	if($_isUpdate === 'Yes' || $_isUpload === 'Yes' || $_isDelete === 'Yes'){

		// 변경된 데이터를 쉽게 넣기 위해 기존의 데이터를 지운다
        $_del_qry2 = "DELETE FROM {$g5['board_file_table']} WHERE bo_table = '{$bo_table}' AND wr_id = '{$wr_id}'"; 
        sql_query($_del_qry2);

		//1번에서 받아둔 데이터를 이용해서 순번과 그외 데이터가 들어간 새로운 데이터를 입력한다
        for($i=0; $i<count($_file_up_data); $i++){
            // 삭제전 저장해둔 row의 값을 기반으로 수정용데이터와 입력용 데이터를 입력한다
            $_in_qry = "
            insert into {$g5['board_file_table']}
            set bo_table      = '{$bo_table}',
            wr_id             = '{$_file_up_data[$i]['wr_id']}',
            bf_no             = '{$i}',
            bf_source         = '{$_file_up_data[$i]['bf_source']}',
            bf_file           = '{$_file_up_data[$i]['bf_file']}',
            bf_content        = '{$_file_up_data[$i]['bf_content']}',
            bf_fileurl        = '{$_file_up_data[$i]['bf_fileurl']}',
            bf_thumburl       = '{$_file_up_data[$i]['bf_thumburl']}',
            bf_storage        = '{$_file_up_data[$i]['bf_storage']}',
            bf_download       = '{$_file_up_data[$i]['bf_download']}',
            bf_filesize       = '{$_file_up_data[$i]['bf_filesize']}',
            bf_width          = '{$_file_up_data[$i]['bf_width']}',
            bf_height         = '{$_file_up_data[$i]['bf_height']}',
            bf_type           = '{$_file_up_data[$i]['bf_type']}',
            bf_datetime       = '{$_file_up_data[$i]['bf_datetime']}',
            bf_list_thumbnail = 'N' ";
			
			if (!empty($bo_table) && !empty($_file_up_data[$i]['wr_id']) && !empty($_file_up_data[$i]['bf_source']) && !empty($_file_up_data[$i]['bf_file'])) {
 
				//받아 뒀던 모든 데이터를 입력한다 
				sql_query($_in_qry);
			}

        }// end for

    }// end if 


	// 썸네일 저장은 그누보드의 저장 방법에 의해 여기서 하면 되지 않아 아래에 하나 더 연결해서 업데이트 해 준다 


	// exit;
	// 1. 수정
	// 2. 입력
	// 3. 입력.수정
	// 4. 삭제
	// 5. 삭제.수정
	// 6. 입력.삭제.수정 
	//  echo '업데이트여부 => '.$_isUpdate.' | '.$_isDelete.' | '.$_isUpload;
	//  echo '선택된 썸네일 => '. $_list_thumbnail.' <===';
	/*
		echo"<br>===============================================================<br>"; 
		echo"_file_up_data => <br>";
		echo"<br>===============================================================<br>"; 
		echo"<pre>";
	    print_r($_file_up_data); 
		echo"</pre>"; 
		echo"<br><br><br>";
		
		echo"<br>===============================================================<br>"; 
		echo"_FILES => <br>";
		echo"<br>===============================================================<br>"; 
		echo"<pre>"; 
		print_r($_FILES['bf_file']);
		echo"</pre>"; 
		echo"<br><br><br>";  
	  //exit;
	*/
}// 멀티 업로더 사용을 승인 했다면 ( use_multiuploader === 'Yes' )

 