<?php
include $_SERVER["DOCUMENT_ROOT"]."/theme/s007/PHPExcel/PHPExcel.php";

//-- 읽을 범위 필터 설정
$rangeArr = range('0','100');


class MyReadFilter implements PHPExcel_Reader_IReadFilter
{
    public function readCell($column, $row, $worksheetName = '') {
        global $rangeArr;
        // Read rows 1 to 7 and columns A to E only
        if (in_array($column,$rangeArr)) {
            return true;
        }
        return false;
    }
}
$filterSubset = new MyReadFilter();

//파일 업로드
$uploaded_file_name_tmp = $_FILES[ 'uploadFile' ][ 'tmp_name' ];
$uploaded_file_name = $_FILES[ 'uploadFile' ][ 'name' ];
$upload_folder = "./";
move_uploaded_file( $uploaded_file_name_tmp, $upload_folder . $uploaded_file_name );


$filename = $uploaded_file_name;
$upfile_path = './' . $filename;
$path = pathinfo($filename);
$UpFileExt = strtolower($path['extension']);
$inputFileType = '';

//파일 타입 설정 (확자자에 따른 구분)
if($UpFileExt == "xls") {
    $inputFileType = 'Excel5';
}elseif( $UpFileExt == 'xlsx' ){
    $inputFileType = 'Excel2007';
}
?>

<?php
if( file_exists ($upfile_path) && $inputFileType ) {


    //엑셀리더 초기화
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);

    //데이터만 읽기(서식을 모두 무시해서 속도 증가 시킴)
    $objReader->setReadDataOnly(false);

    //범위 지정(위에 작성한 범위필터 적용)
    $objReader->setReadFilter($filterSubset);

    //업로드된 엑셀 파일 읽기
    $objPHPExcel = $objReader->load($upfile_path);

    //첫번째 시트로 고정
    $objPHPExcel->setActiveSheetIndex(0);

    //고정된 시트 로드
    $objWorksheet = $objPHPExcel->getActiveSheet();

    //시트의 지정된 범위 데이터를 모두 읽어 배열로 저장
    $sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
    $total_rows = count($sheetData);
    $kk = 0;
?>
<!DOCTYPE html>
    <html lang="kr">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Simple Ajax Example</title>
        <!-- jQuery 라이브러리 추가 -->
        <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
    </head>
    <body>
    <style>
        table {
            width: 100%;
            border: 1px solid #444444;
            border-collapse: collapse;
        }
        th, td {
            font-size: 12px;
            border: 1px solid #444444;
            padding: 10px;
        }
        th {
            position: sticky;
            top: 0;
            background-color: #f2f2f2;
        }

        .wrap-vertical{
            overflow-x: auto;
            overflow-y: auto;
            max-height: 800px; /* 원하는 높이로 조절할 수 있습니다. */
            white-space: nowrap;
        }
    </style>
    <br>
    <form id="uploadForm" method="post" enctype="multipart/form-data" action="excel_upload.php">
        <input name="uploadFile" id="uploadFile" type="file" />
        <input type="submit" name="action" value="Upload" />
    </form>
    <br><br>
    * 필드값 수정은 더블 클릭하여 수정하시면됩니다.
    <form id="uploadForm" method="post" enctype="multipart/form-data" action="excel_result.php">
    <div class="horizontal wrap-vertical">
        <div id="result">
    <?php
    echo '<table id="ExcelTable" border="1" cellpadding="0" cellspacing="0" width="100%">';
    foreach($sheetData as $idx =>$rows) {
        if($idx == 1){
            //필드 지정 영역
            $field_idx = 0;
            foreach( $rows as $key=>$val ) {
                $field_idx = $key;
                echo '<th>
                        <input type="hidden" class="field_old_type" value="">               
                        <select class="field_type" name="select_field['.$field_idx.']">
                            <option value="null">NUL</option>
                            <option value="field_a">날짜</option>
                            <option value="field_b">입금자</option>
                            <option value="field_c">비고</option>
                            <option value="field_d">입금액</option>
                        </select>
                    </th>';
            }
            $field_idx++;
            echo '<th><input type="text" name="select_field['.$field_idx.']" value=""></th>';
            $field_idx++;
            echo '<th><input type="text" name="select_field['.$field_idx.']" value=""></th>';
            echo '<th>작업</th>';
        }


        echo '<tbody><tr>';
        foreach( $rows as $key=>$val ){
            $field_idx = $key;
            echo '<td><input class="vfind" type="text" name="data['.$idx.']['.$field_idx.']" value="'.$val.'" readonly></td>';
        }
        $field_idx++;
        echo '<td><input type="text" name="data['.$idx.']['.$field_idx.']" value=""></td>';
        $field_idx++;
        echo '<td><input type="text" name="data['.$idx.']['.$field_idx.']" value=""></td>';
        echo '<td><input type="button" class="line_del" value="라인삭제"></td>';
        echo '</tr>';
        $kk++;
    }
    echo '</tbody></table>';
?></div>
    </div>
        <div style="text-align: center; padding-top: 25px;">
    <input type="submit" name="action" value="등록" style="width: 100px; height: 30px" />
        </div>
    </form>

    <script>
        $(document).ready(function(){

            // 정규식을 사용하여 날짜시간 포맷 확인 : '2023-11-01 17:52:15, 2023.11.01 17:52'
            var dateTimeFormat = /^(\d{4}[-.]\d{2}[-.]\d{2}\s\d{2}:\d{2}(:\d{2})?)$/;
            var pass_line = 0;
            $('#ExcelTable tr:not(:first)').each(function(index) {
                var inputValue = $(this).find('td:first-child input').val();
                if (dateTimeFormat.test(inputValue)) {
                    pass_line = index-1;
                    return false;
                }
            })

            //첫번째 항목이 날짜가 아닌경우 해당 라인 삭제
            $('#ExcelTable tr:not(:first)').each(function(index) {
                var inputValue = $(this).find('td:first-child input').val();

                if (!dateTimeFormat.test(inputValue) && pass_line != index) {
                    // 형식이 아닌 경우 해당 행 삭제
                    //console.log(pass_line , index)
                    //$(this).remove();
                }
            });

        })

        //라이삭제 버튼 클릭시 해당 라인 삭제
        $(document).on("click", ".line_del", function () {
            $(this).closest("tr").remove();
        });

        //input text 더블 클릭 활성화 (활성화전 모든 필드는 디저블)
        $(document).on("dblclick", ".vfind", function () {
            $('.vfind').prop("readonly", true);
            $(this).prop('readonly',false)
        });
        //포커스 해지되면 디저블
        $(document).on("focusout",".vfind", function(){
            $(this).prop("readonly", true);
        });







        $(document).on('change', '.field_type', function(event) {
            var oldValue = $(this).closest('th').find('.field_old_type').val(); //이전값
            var selValue = $(this).val(); // 현재 값
            $(this).closest('th').find('.field_old_type').val(selValue); //이전값 변경

            if(selValue != "") {
                //$('.field_type').not(this).find('option[value="' + selValue + '"]').prop('disabled', true);
                $('.field_type').not(this).find('option[value="' + selValue + '"]').hide();
            }
            //$('.field_type').not(this).find('option[value="' + oldValue + '"]').prop('disabled', false);
            $('.field_type').not(this).find('option[value="' + oldValue + '"]').show();

        });




    </script>
</body>
</html>
<?php
}else{
    echo 'Error!!';
}
?>

