AnonSec Shell
Server IP : 104.21.37.246  /  Your IP : 172.71.28.146   [ Reverse IP ]
Web Server : Apache
System : Linux cpanel01wh.bkk1.cloud.z.com 2.6.32-954.3.5.lve1.4.59.el6.x86_64 #1 SMP Thu Dec 6 05:11:00 EST 2018 x86_64
User : cp648411 ( 1354)
PHP Version : 7.2.34
Disable Function : NONE
Domains : 0 Domains
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home2/cp648411/public_html/ilawasia.onnud20.com/Ip/themes_v1/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     [ BACKUP SHELL ]     [ JUMPING ]     [ MASS DEFACE ]     [ SCAN ROOT ]     [ SYMLINK ]     

Current File : /home2/cp648411/public_html/ilawasia.onnud20.com/Ip/themes_v1/ipmodulesv.js
const COLUMN_STORAGE_KEY = 'ipmodules_selected_columns';
let allData = []; 
const columns = [
  { label: "Deadline",      field: "DueDate" },
  { label: "Country Name",  field: "CountryName" },
  { label: "Event Text",    field: "EventsName" },
  { label: "Title",         field: "Title" },
  { label: "Image",         field: "FilePath" },
  { label: "Instructor",    field: "Instructor" },
  { label: "IRN",           field: "CaseReference" },
  { label: "Owner",         field: "Owner" },
  { label: "App No.",       field: "AppNo" },
  { label: "Filing Date",   field: "CreateDateTime" },
  { label: "Class",         field: "ClassList" }
];
let defaultColumns = [
  { label: '', field: null, type: 'action', export: false},
  { label: "Deadline",      field: "DueDate", export: true},
  { label: "Country Name",  field: "CountryName", export: true },
  { label: "Event Text",    field: "EventsName", export: true },
  { label: "Title",         field: "Title", export: true },
  { label: "Image",         field: "FilePath", export: true },
  { label: "Instructor",    field: "Instructor", export: true },
  { label: "IRN",           field: "CaseReference", export: true },
  { label: "Owner",         field: "Owner", export: true },
  { label: "App No.",       field: "AppNo", export: true },
  { label: "Filing Date",   field: "CreateDateTime", export: true },
  { label: "Class",         field: "ClassList", export: true }
];

let ipmoduleDetails = [];

// =================== INITIAL COLUMN ===================
let defaultIndex = [0,3,4,6,8];
const savedIndex = localStorage.getItem(COLUMN_STORAGE_KEY);
if (savedIndex) {
    try {
        defaultIndex = JSON.parse(savedIndex);
    } catch (e) {
        console.warn('Invalid column storage, use default');
    }
}

// แปลง index → column name
function rebuildDefaultColumns(){
    defaultColumns = defaultIndex.map(i => columns[i]);
}


renderColumnModal();
rebuildDefaultColumns();
LoadIpmodules();


function toggleExportButton(){

    if (Array.isArray(allData) && allData.length > 0) {
        $('#btnExportAllExcel').prop('disabled', false);
        $('#btnExportPDF').prop('disabled', false);
    } else {
        $('#btnExportAllExcel').prop('disabled', true);
        $('#btnExportPDF').prop('disabled', true);
    }
}


// =================== BUILD CHECKBOX ===================

function LoadIpmodules() {
    var parent = $("#ipmodules_pagination");
    var tableTbody = parent.find("table>tbody");
    var page = parent.find(".page").val();
    var pageday = parent.find(".pageday").val();
    var pageSize = parent.find(".page-size").val();
    var orderBy = parent.find('.orderBy').val();
    var orderDirection = parent.find('.orderDirection').val();
    var paramsHidden = parent.find(".params").val();
    var $loader = parent.find('.table-loader');

    var params = {
        PageNumber: page,
        PageSize: pageSize,
        OrderBy: orderBy,
        Pageday: pageday,
        OrderDirection: orderDirection || 'asc'
    };

    if (paramsHidden != "") {
        params = Object.assign(
            {}, 
            params,
            JSON.parse('{"' + decodeURI(paramsHidden)
                .replace(/"/g, '\\"')
                .replace(/&/g, '","')
                .replace(/=/g, '":"') + '"}')
        );
    }

    $loader.show();

    /* ================= HEADER ================= */
    let headHtml = '<tr><th></th>';
    defaultColumns.forEach(col => {
        headHtml += `<th>${col.label}</th>`;
    });
    headHtml += '</tr>';
    

    document.getElementById('tableHead').innerHTML = headHtml;

    /* ================= LOAD DATA ================= */
    $.get(urlLoadIpmodules, params)
        .done(function (resp) {
            var res = JSON.parse(resp);
                        
            tableTbody.html('');

            if (res.Data && res.Data.length > 0) {

                let bodyHtml = '';

                $.each(res.Data, function (key, value) {
                     bodyHtml += `<tr>`;

                // ===== Action column =====
                bodyHtml += `
                <td class="text-center">
                    <a href="${urlEdit}?Id=${value.CaseId}&Type=Edit"
                    class="btn btn-info btn-sm">
                    <i class="fa fa-search"></i> View
                    </a>
                </td>
                `;

                // ===== Data columns =====
                defaultColumns.forEach(col => {

                    let tdAttr = '';
                    let tdValue = value[col.field] ?? '';

                    // Image column
                    if (col.field === 'FilePath' && tdValue) {
                        tdValue = `<img src="../Uploads${tdValue}" width="60">`;
                    }

                    // DueDate color
                    if (col.field === 'DueDate') {
                        let color = value['DueDate_color'] ?? '';
                        if (color) {
                            tdAttr = `style="color:${color}"`;
                        }
                    }

                    bodyHtml += `<td ${tdAttr}>${tdValue}</td>`;
                });

                    bodyHtml += `</tr>`;
                });
                
                tableTbody.html(bodyHtml);

                /* ===== pagination data ===== */
                parent.find(".page").val(res.PageNumber);
                parent.find(".page-size").val(res.PageSize);
                parent.find(".pageday").val(res.PageDay);
                parent.find(".numrows").val(res.TotalRecords);
                parent.find(".orderBy").val(res.OrderBy);
                parent.find(".orderDirection").val(res.OrderDirection);

                renderPagination('#ipmodules_pagination', 'redirectPaging');

            } else {
                tableTbody.html(
                    `<tr>
                        <td colspan="${defaultColumns.length}" class="text-center">
                            Not found data
                        </td>
                    </tr>`
                );
            }

            $loader.hide();
        });
}

function renderColumnModal(){

    let html = '<div class="row">';
    columns.forEach((col, i) => {
        const checked = defaultIndex.includes(i) ? 'checked' : '';
        if (col.export === false) return; // ❌ ไม่ให้เลือก
        html += `
            <div class="col-6 mb-2">
                <div class="form-check">
                    <input class="form-check-input col-toggle"
                           type="checkbox"
                           data-index="${i}"
                           id="${col.field}"
                           ${checked}>
                    <label class="form-check-label" for="${col.field}">
                        ${col.label}
                    </label>
                </div>
            </div>
        `;
    });

    html += '</div>';

    $('#colum_pagination').html(html);
}

// =================== EVENT CHECKBOX ===================
$(document).on('change', '.col-toggle', function () {

    let selectedIndex = [];

    $('.col-toggle:checked').each(function () {
        selectedIndex.push(parseInt($(this).data('index')));
    });

    if (selectedIndex.length === 0) {
        alert('ต้องเลือกอย่างน้อย 1 column');
        $(this).prop('checked', true);
        return;
    }

    defaultIndex = selectedIndex.sort((a,b)=>a-b);

    // ✅ SAVE STATE
    localStorage.setItem(
        COLUMN_STORAGE_KEY,
        JSON.stringify(defaultIndex)
    );

    rebuildDefaultColumns();
    LoadIpmodules();
});


// decode HTML entity
function decodeHTML(html) {
    const t = document.createElement("textarea");
    t.innerHTML = html;
    return t.value;
}

// image cache (กันโหลดซ้ำ)
const imageCache = {};

async function getBase64Image(url){

    if(!url) return null;

    if(imageCache[url]) return imageCache[url];

    return new Promise((resolve)=>{

        const img = new Image();
        img.crossOrigin = "Anonymous";

        img.onload = function(){

            const canvas = document.createElement("canvas");
            canvas.width = img.width;
            canvas.height = img.height;

            const ctx = canvas.getContext("2d");
            ctx.drawImage(img,0,0);

            const base64 = canvas.toDataURL("image/png");
            imageCache[url] = base64;

            resolve(base64);
        };

        img.onerror = ()=> resolve(null);

        img.src = url;

    });
}

async function exportPDF(){

    const { jsPDF } = window.jspdf;
    const doc = new jsPDF({orientation:'landscape',unit:'mm',format:'a4'});

    const headers = defaultColumns.map(c=>decodeHTML(c.label));
    const body = [];

    const rows = $('#ipmodules_pagination tbody tr');

    for(const tr of rows){

        const row=[];
        const cells=$(tr).find('td:not(:first)');

        for(const td of cells){

            const $td=$(td);
            const img=$td.find('img');

            if(img.length){

                const src=img.attr('src');
                const base64=await getBase64Image(src);

                row.push(base64?{image:base64,width:18}:'');

            }else{

                row.push(decodeHTML($td.html()).trim());

            }

        }

        body.push(row);
    }

    doc.setFontSize(14);
    doc.text('IP Modules Report',14,15);

    doc.autoTable({
        head:[headers],
        body:body,
        startY:20,
        styles:{fontSize:9,cellPadding:2},

        didDrawCell(data){

            if(data.cell.raw?.image){

                doc.addImage(
                    data.cell.raw.image,
                    'PNG',
                    data.cell.x+1,
                    data.cell.y+1,
                    16,
                    16
                );

            }

        }
    });

    doc.save("deadline_export.pdf");
}

async function exportExcelXLSX(){

    const workbook = new ExcelJS.Workbook();
    const sheet = workbook.addWorksheet("IP Modules");

    const headers = defaultColumns.map(c=>decodeHTML(c.label));
    sheet.addRow(headers);

    const rows = $('#ipmodules_pagination tbody tr');

    let rowIndex = 2;

    for(const tr of rows){

        const row=[];
        const images=[];

        const cells=$(tr).find('td:not(:first)');

        let colIndex=1;

        for(const td of cells){

            const $td=$(td);
            const img=$td.find('img');

            if(img.length){

                const src=img.attr('src');
                const base64=await getBase64Image(src);

                row.push("");

                if(base64){

                    images.push({
                        base64,
                        col:colIndex,
                        row:rowIndex
                    });

                }

            }else{

                row.push(decodeHTML($td.html()).trim());

            }

            colIndex++;
        }

        sheet.addRow(row);

        for(const im of images){

            const id=workbook.addImage({
                base64:im.base64,
                extension:'png'
            });

            sheet.addImage(id,{
                tl:{col:im.col-1,row:im.row-1},
                ext:{width:40,height:40}
            });
        }

        rowIndex++;
    }

    sheet.columns.forEach(col=>{
        col.width=25;
    });

    const buffer = await workbook.xlsx.writeBuffer();

    const blob=new Blob([buffer],{
        type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
    });

    const link=document.createElement("a");
    link.href=URL.createObjectURL(blob);
    link.download="deadline_export.xlsx";
    link.click();
}

LoadIpmodulesAll();
function LoadIpmodulesAll() {
    var parent = $("#ipmodules_pagination");
    var page = parent.find(".page").val();
    var pageday = parent.find(".pageday").val();
    var pageSize = parent.find(".page-size").val();
    var orderBy = parent.find('.orderBy').val();
    var orderDirection = parent.find('.orderDirection').val();
   
    var params = {
        PageNumber: page,
        PageSize: pageSize,
        OrderBy: orderBy,
        Pageday: pageday,
        OrderDirection: orderDirection || 'asc'
    };

    $.ajax({
        url: urlLoadIpmodulesAll,
        type: 'POST',
        dataType: 'json',
        data: {
            params   // หรือ p: pageDay ให้ตรงกับ PHP
        },
        success: function(res){
            allData = res.Data;     // 👈 เก็บข้อมูลทั้งหมดทุกหน้า
            //console.log('ALL DATA:', allData);
            //console.log(res);
            
            toggleExportButton();
        },
        error: function(xhr){
            console.error('LoadIpmodulesAll error', xhr.responseText);
        }
    });
}

async function exportPDFAll(){

    if(!allData || allData.length===0){
        alert('ไม่มีข้อมูล');
        return;
    }

    const { jsPDF } = window.jspdf;
    const doc = new jsPDF({orientation:'landscape',unit:'mm',format:'a4'});

    const headers = defaultColumns.map(c=>decodeHTML(c.label));
    const body=[];

    for(const rowData of allData){

        const row=[];

        for(const col of defaultColumns){

            let value=rowData[col.field] ?? '';

            // ===== IMAGE COLUMN =====
            if(col.field==="FilePath" && value){

                const base64=await getBase64Image('../Uploads'+value);

                row.push(base64?{image:base64,width:18}:'');

            }

            else if(col.field==="Instructor"){

                value=`${rowData.Instructor ?? ''} {${rowData.Instructor2 ?? ''}}`;
                row.push(decodeHTML(value));

            }

            else{

                row.push(decodeHTML(value.toString()));

            }
        }

        body.push(row);
    }

    doc.setFontSize(14);
    doc.text("IP Modules Report (All Pages)",14,15);

    doc.autoTable({

        head:[headers],
        body:body,
        startY:20,
        styles:{
            fontSize:9,
            cellPadding:2
        },

        didDrawCell(data){

            if(data.cell.raw?.image){

                doc.addImage(
                    data.cell.raw.image,
                    'PNG',
                    data.cell.x+1,
                    data.cell.y+1,
                    16,
                    16
                );

            }
        }

    });

    doc.save("deadline_export_all_pages.pdf");
}

async function exportAllExcelXLSX(){

    if(!allData || allData.length===0){
        alert('ไม่มีข้อมูล');
        return;
    }

    const workbook = new ExcelJS.Workbook();
    const sheet = workbook.addWorksheet("Export");

    const headers = defaultColumns.map(c=>decodeHTML(c.label));
    sheet.addRow(headers);

    let rowIndex=2;

    for(const rowData of allData){

        const row=[];
        const images=[];

        let colIndex=1;

        for(const col of defaultColumns){

            let value=rowData[col.field] ?? '';

            // ===== IMAGE COLUMN =====
            if(col.field==="FilePath" && value){

                const base64=await getBase64Image('../Uploads'+value);

                row.push("");

                if(base64){
                    images.push({
                        base64:base64,
                        col:colIndex,
                        row:rowIndex
                    });
                }

            }

            else if(col.field==="Instructor"){

                value=`${rowData.Instructor ?? ''} {${rowData.Instructor2 ?? ''}}`;
                row.push(decodeHTML(value));

            }

            else{

                row.push(decodeHTML(value.toString()));

            }

            colIndex++;
        }

        sheet.addRow(row);

        for(const im of images){

            const imgId = workbook.addImage({
                base64:im.base64,
                extension:'png'
            });

            sheet.addImage(imgId,{
                tl:{col:im.col-1,row:im.row-1},
                ext:{width:40,height:40}
            });
        }

        rowIndex++;
    }

    sheet.columns.forEach(col=>{
        col.width=25;
    });

    const buffer = await workbook.xlsx.writeBuffer();

    const blob = new Blob(
        [buffer],
        {type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}
    );

    const link=document.createElement("a");
    link.href=URL.createObjectURL(blob);
    link.download="deadline_export_all_pages.xlsx";
    link.click();
}



Anon7 - 2022
AnonSec Team