| Server IP : 104.21.37.246 / Your IP : 172.71.28.146 [ 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 : |
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();
}