init
This commit is contained in:
@@ -0,0 +1,207 @@
|
||||
<%@ page language="java" contentType="text/html; charset=utf-8"%>
|
||||
<%@ page import="java.io.*"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
|
||||
<%@ include file="/jsp/common/include/localemessage.jsp" %>
|
||||
<%
|
||||
response.setHeader("Pragma", "No-cache");
|
||||
response.setHeader("Cache-Control", "no-cache");
|
||||
response.setHeader("Expires", "0");
|
||||
%>
|
||||
<html>
|
||||
<head>
|
||||
<title></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<jsp:include page="/jsp/common/include/css.jsp"/>
|
||||
<jsp:include page="/jsp/common/include/script.jsp"/>
|
||||
<script language="javascript" >
|
||||
var url = '<c:url value="/onl/apim/approvalline/portalApprovalLineMan.json" />';
|
||||
var url_view = '<c:url value="/onl/apim/approvalline/portalApprovalLineMan.view" />';
|
||||
var select_approvalType = "";
|
||||
|
||||
function buttonFormatter(cellvalue, options, rowObject) {
|
||||
return '<button type="button" class="cssbtn" level="W" status="DETAIL" onclick="deleteRow(\''
|
||||
+ options.rowId + '\')"><i class="material-icons">delete</i> <%= localeMessage.getString("button.delete") %></button>';
|
||||
}
|
||||
|
||||
function formatApprovalLineUsers(cellvalue, options, rowObject){
|
||||
if (cellvalue && Array.isArray(cellvalue) && rowObject.portalApprovalLineUsers.length > 0){
|
||||
return cellvalue.map(user => user.userName).join(' → ');
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
function deleteRow(rowId) {
|
||||
var rowData = $("#grid").jqGrid('getRowData', rowId);
|
||||
|
||||
var postData = {
|
||||
id: rowData.id,
|
||||
cmd: 'DELETE'
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
data: postData,
|
||||
success: function(response) {
|
||||
alert("삭제되었습니다.");
|
||||
$("#grid").trigger("reloadGrid");
|
||||
},
|
||||
error: function(e) {
|
||||
alert("삭제 중 오류가 발생했습니다.");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function init(){
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
url:url,
|
||||
dataType:"json",
|
||||
data:{cmd: 'LIST_INIT_COMBO'},
|
||||
success:function(json){
|
||||
new makeOptions("CODE","NAME").setObj($("select[name=approvalType]"))
|
||||
.setData(json.approvalTypeRows).setFormat(nameOptionFormat).rendering();
|
||||
|
||||
select_approvalType = ": ;"+getGridSelectText("CODE","NAME",json.approvalTypeRows);
|
||||
|
||||
$('#grid').jqGrid('setColProp', 'approvalType', { editoptions: { value: select_approvalType } });
|
||||
$('#grid').trigger('reloadGrid');
|
||||
},
|
||||
error:function(e){
|
||||
alert(e.responseText);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
init();
|
||||
|
||||
var gridPostData = getSearchForJqgrid("cmd","LIST"); //jqgrid에서는 object 로
|
||||
|
||||
$('#grid').jqGrid({
|
||||
datatype:"json",
|
||||
mtype: 'POST',
|
||||
url: url,
|
||||
postData : gridPostData,
|
||||
colNames:[
|
||||
'No.',
|
||||
"id",
|
||||
'<%= localeMessage.getString("portalApprovalLine.approvalName") %>',
|
||||
'<%= localeMessage.getString("portalApprovalLine.approvalUserList") %>',
|
||||
'<%= localeMessage.getString("portalApprovalLine.approvalType") %>'
|
||||
],
|
||||
colModel:[
|
||||
{ name : 'rowNum' , align:'center' , width:'30', sortable:false },
|
||||
{ name : 'id' , align:'center' , key:true, hidden:true},
|
||||
{ name : 'approvalName' , align:'center' , width:"100"},
|
||||
{ name : 'portalApprovalLineUsers' , align:'center' , width:"100", formatter: formatApprovalLineUsers},
|
||||
{ name : 'approvalType' , align:'center' , width:"100", edittype: 'select' , editoptions: { value: select_approvalType }, formatter: "select"}
|
||||
],
|
||||
jsonReader: {
|
||||
repeatitems:false
|
||||
},
|
||||
pager : $('#pager'),
|
||||
page : '${param.page}',
|
||||
rowNum : '${rmsDefaultRowNum}',
|
||||
autoheight: true,
|
||||
height: $("#container").height(),
|
||||
autowidth: true,
|
||||
viewrecords: true,
|
||||
rowList : eval('[${rmsDefaultRowList}]'),
|
||||
loadComplete:function (d){
|
||||
var records = $(this).getGridParam('records');
|
||||
var page = $(this).getGridParam('page');
|
||||
var rowNum = $(this).getGridParam('rowNum');
|
||||
var rows = $(this).getDataIDs();
|
||||
var colModel = $(this).getGridParam("colModel");
|
||||
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
var number = ((page - 1) * rowNum + i) + 1;
|
||||
// var reverseNumber = records - ((page - 1) * rowNum + i);
|
||||
$(this).setCell(rows[i], 'rowNum', number);
|
||||
}
|
||||
for(var i = 0 ; i< colModel.length; i++){
|
||||
$(this).setColProp(colModel[i].name, {sortable : false});
|
||||
}
|
||||
|
||||
$(this).jqGrid('setColProp', 'approvalUserIds', {
|
||||
formatter: function(cellvalue, options, rowObject) {
|
||||
return formatApprovalUsers(cellvalue, options, rowObject);
|
||||
}
|
||||
});
|
||||
},
|
||||
ondblClickRow: function(rowId) {
|
||||
var rowData = $(this).getRowData(rowId);
|
||||
var key = rowData['id'];
|
||||
|
||||
var args = {};
|
||||
var url2 = url_view;
|
||||
url2 = url2+'?cmd=DETAIL&status=DETAIL';
|
||||
url2 += '&menuId='+'${param.menuId}';
|
||||
url2 += '&id=' + key;
|
||||
|
||||
showModal(url2, args, 800, 650, function(){
|
||||
$("#grid").trigger("reloadGrid");
|
||||
});
|
||||
|
||||
},loadError: function (jqXHR, textStatus, errorThrown) {
|
||||
if(jqXHR.status == 401) {
|
||||
var location ='<%=request.getContextPath()%>/';
|
||||
comloadError(jqXHR, textStatus, errorThrown ,location);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
resizeJqGridWidth('grid','content_middle','1000');
|
||||
|
||||
$("#btn_search").click(function(){
|
||||
var postData = getSearchForJqgrid("cmd","LIST");
|
||||
|
||||
$("#grid").setGridParam({ url:url,postData: postData ,page:1 }).trigger("reloadGrid");
|
||||
});
|
||||
|
||||
$("#btn_new").click(function(){
|
||||
var args = {};
|
||||
var url2 = url_view;
|
||||
url2 = url2+'?cmd=DETAIL&status=NEW';
|
||||
|
||||
showModal(url2, args, 800, 650, function(){
|
||||
$("#grid").trigger("reloadGrid");
|
||||
});
|
||||
});
|
||||
|
||||
$("input[name^=search]").keydown(function(key){
|
||||
if (key.keyCode == 13){
|
||||
$("#btn_search").click();
|
||||
}
|
||||
});
|
||||
|
||||
buttonControl();
|
||||
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="right_box">
|
||||
<div class="content_top">
|
||||
<ul class="path">
|
||||
<li><a href="#">${rmsMenuPath}</a></li>
|
||||
</ul>
|
||||
</div><!-- end content_top -->
|
||||
<div class="content_middle" id="content_middle">
|
||||
<div class="search_wrap">
|
||||
<button type="button" class="cssbtn" id="btn_new" level="W"><i class="material-icons">add</i> <%= localeMessage.getString("button.new") %></button>
|
||||
</div>
|
||||
<div class="title"><%= localeMessage.getString("portalApprovalLine.title") %></div>
|
||||
|
||||
<table id="grid" ></table>
|
||||
<div id="pager"></div>
|
||||
</div><!-- end content_middle -->
|
||||
</div><!-- end right_box -->
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -0,0 +1,381 @@
|
||||
<%@ page language="java" contentType="text/html; charset=utf-8"%>
|
||||
<%@ page import="java.io.*"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
|
||||
<%@ include file="/jsp/common/include/localemessage.jsp" %>
|
||||
<%
|
||||
response.setHeader("Pragma", "No-cache");
|
||||
response.setHeader("Cache-Control", "no-cache");
|
||||
response.setHeader("Expires", "0");
|
||||
%>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<jsp:include page="/jsp/common/include/css.jsp"/>
|
||||
<jsp:include page="/jsp/common/include/script.jsp"/>
|
||||
|
||||
<script language="javascript" >
|
||||
var url = '<c:url value="/onl/apim/approvalline/portalApprovalLineMan.json" />';
|
||||
var url_view = '<c:url value="/onl/apim/approvalline/portalApprovalLineMan.view" />';
|
||||
var isDetail = false;
|
||||
var globalVars = {
|
||||
approverList: [],
|
||||
usedApprovalTypes: [],
|
||||
originalApprovalType: null,
|
||||
originalApproverList: []
|
||||
};
|
||||
|
||||
function init (callback){
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
url:url,
|
||||
dataType:"json",
|
||||
data:{ cmd: 'INIT_COMBO' },
|
||||
success:function(json){
|
||||
new makeOptions("CODE","NAME").setObj($("select[name=approvalType]"))
|
||||
.setData(json.approvalTypeRows).setFormat(nameOptionFormat).rendering();
|
||||
|
||||
globalVars.usedApprovalTypes = json.usedApprovalTypes || [];
|
||||
|
||||
if(typeof callback === 'function') {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
error:function(e){
|
||||
alert(e.responseText);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function detail(key){
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
url:url,
|
||||
dataType:"json",
|
||||
data:{cmd: 'DETAIL', id: key},
|
||||
success:function(data){
|
||||
$("#ajaxForm input[type!=radio],#ajaxForm select,#ajaxForm textarea").each(function(){
|
||||
var name = $(this).attr("name");
|
||||
var tag = $(this).prop("tagName").toLowerCase();
|
||||
$(tag+"[name="+name+"]").val(data[name]);
|
||||
});
|
||||
|
||||
$("select[name=approvalType]").val(data.approvalType).prop("selected", true);
|
||||
|
||||
globalVars.originalApprovalType = data.approvalType;
|
||||
|
||||
if (Array.isArray(data.portalApprovalLineUsers)) {
|
||||
globalVars.approverList = data.portalApprovalLineUsers.map(user => ({
|
||||
userId: user.userId,
|
||||
name: user.userName
|
||||
}));
|
||||
|
||||
globalVars.originalApproverList = JSON.parse(JSON.stringify(globalVars.approverList));
|
||||
generateUser($("#approverList"));
|
||||
}
|
||||
},
|
||||
error:function(e){
|
||||
alert(e.responseText);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function searchUser() {
|
||||
$("#gridUser").setGridParam({
|
||||
postData: {
|
||||
cmd: 'SEARCH_USER',
|
||||
username: $('#searchUserValue').val()
|
||||
},
|
||||
datatype: 'json'
|
||||
}).trigger('reloadGrid', [{page: 1}]);
|
||||
|
||||
}
|
||||
function addUser(id, name) {
|
||||
var exists = globalVars.approverList.some(function(u){
|
||||
return u.id === id;
|
||||
});
|
||||
if(!exists){
|
||||
globalVars.approverList.push({
|
||||
userId: id,
|
||||
name: name
|
||||
});
|
||||
generateUser($("#approverList"));
|
||||
$("#noApproverMsg").hide();
|
||||
} else {
|
||||
alert("이미 추가된 승인자입니다.");
|
||||
}
|
||||
}
|
||||
|
||||
function generateUser($selector) {
|
||||
$selector.empty();
|
||||
|
||||
if (globalVars.approverList.length === 0){
|
||||
$("#noApproverMsg").show();
|
||||
} else {
|
||||
$("#noApproverMsg").hide();
|
||||
var $table = $('<table>').addClass('table_row');
|
||||
|
||||
globalVars.approverList.forEach(function(user, idx){
|
||||
var $tr = $('<tr>').data('userId', user.userId);
|
||||
var $td = $('<td>').css({
|
||||
'display': 'flex',
|
||||
'justify-content': 'space-between',
|
||||
'align-items': 'center',
|
||||
'padding': '0 5px'
|
||||
});
|
||||
|
||||
var $span = $('<span>').text((idx + 1) + '. ' + user.name);
|
||||
|
||||
var $delBtn = $("<button>").attr({
|
||||
class: "cssbtn smallBtn",
|
||||
type: "button"
|
||||
}).text("선택취소").css({
|
||||
'margin-left': 'auto'
|
||||
}).click(function() {
|
||||
globalVars.approverList.splice(idx, 1);
|
||||
generateUser($selector);
|
||||
});
|
||||
|
||||
$td.append($span).append($delBtn);
|
||||
$tr.append($td);
|
||||
$table.append($tr);
|
||||
});
|
||||
|
||||
$selector.append($table);
|
||||
|
||||
// 드래그 앤 드롭 기능 초기화
|
||||
$table.sortable({
|
||||
items: 'tr',
|
||||
cursor: 'move',
|
||||
update: function(event, ui) {
|
||||
globalVars.approverList = $table.find('tr').map(function(idx,element) {
|
||||
var name = $(element).find('span').text().split('. ')[1];
|
||||
$(element).find('span').text((idx + 1) + '. ' + name);
|
||||
|
||||
return {
|
||||
userId: $(element).data('userId'),
|
||||
name: name,
|
||||
approvalOrder: idx + 1
|
||||
};
|
||||
}).get();
|
||||
|
||||
updateApprovalUserList();
|
||||
}
|
||||
});
|
||||
}
|
||||
updateApprovalUserList();
|
||||
}
|
||||
|
||||
function updateApprovalUserList() {
|
||||
globalVars.approverList.forEach((user, idx) => {
|
||||
user.approvalOrder = idx + 1; // 순서를 idx+1로 설정
|
||||
});
|
||||
|
||||
var approvalUserList = globalVars.approverList.map(user => user.name).join(' → ');
|
||||
$('input[name=portalApprovalLineUsers]').val(approvalUserList);
|
||||
|
||||
$('#portalApprovalLineUsersJson').val(JSON.stringify(globalVars.approverList));
|
||||
console.log("Updated list:", approvalUserList);
|
||||
console.log("Current approverList with order:", globalVars.approverList);
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
var key ="${param.id}";
|
||||
isDetail = key != "" && key != "null";
|
||||
|
||||
if (isDetail){
|
||||
$("#title").append(" 수정");
|
||||
buttonControl(true);
|
||||
} else {
|
||||
$("#title").append(" 등록");
|
||||
$("#btn_modify").html('<i class="material-icons">save</i> <%= localeMessage.getString("button.register") %>');
|
||||
buttonControl(false);
|
||||
}
|
||||
|
||||
init(function(){
|
||||
if (isDetail) {
|
||||
detail(key);
|
||||
}
|
||||
});
|
||||
|
||||
$("#gridUser").jqGrid({
|
||||
datatype: 'json',
|
||||
mtype:'POST',
|
||||
url: url,
|
||||
postData: { cmd: 'SEARCH_USER', username: '' },
|
||||
colNames: ["사용자 ID", "사용자 이름"],
|
||||
colModel: [
|
||||
{ name: 'USERID', index: '사용자 ID', key: true , width: 200, align:'center'},
|
||||
{ name: 'USERNAME', index: '사용자 이름' , width: 200, align:'center'}
|
||||
],
|
||||
viewrecords: true,
|
||||
height: 'auto',
|
||||
rowNum: 10,
|
||||
pager: '#pagerUser',
|
||||
jsonReader: {
|
||||
root: "rows",
|
||||
page: "page",
|
||||
total: "total",
|
||||
records: "records",
|
||||
repeatitems: false,
|
||||
id: "USERID"
|
||||
},
|
||||
ondblClickRow: function(rowid, iRow, iCol, e) {
|
||||
var rowData = $(this).getRowData(rowid);
|
||||
addUser(rowData.USERID, rowData.USERNAME);
|
||||
},
|
||||
loadComplete: function() {
|
||||
// 그리드 로드 완료 후 크기 조정
|
||||
$(this).setGridWidth($(this).closest('.grid_wrap').width());
|
||||
}
|
||||
});
|
||||
|
||||
$("#btn_modify").click(function(){
|
||||
if (!checkRequired("ajaxForm")) return;
|
||||
|
||||
var formData = $('#ajaxForm').serializeArray();
|
||||
var postData = {};
|
||||
|
||||
formData.forEach(function(field) {
|
||||
postData[field.name] = field.value;
|
||||
});
|
||||
|
||||
var approvalType = $("select[name=approvalType]").val();
|
||||
// 사용 중인 approvalType 체크
|
||||
if (approvalType !== globalVars.originalApprovalType
|
||||
&& globalVars.usedApprovalTypes.includes(approvalType)) {
|
||||
alert("선택하신 승인 타입은 이미 사용 중입니다. \n다른 타입을 선택해 주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
var uniqueApprovers = new Set(globalVars.approverList.map(a => a.userId));
|
||||
if (uniqueApprovers.size !== globalVars.approverList.length) {
|
||||
alert("승인자 목록에 중복된 사용자가 있습니다. \n확인 후 다시 시도해주세요.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!confirm("<%= localeMessage.getString("common.checkSave")%>")) return;
|
||||
|
||||
postData.portalApprovalLineUsers = $('#portalApprovalLineUsersJson').val();
|
||||
postData.cmd = isDetail ? "UPDATE" : "INSERT";
|
||||
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
url:url,
|
||||
data:postData,
|
||||
success:function(){
|
||||
alert("<%= localeMessage.getString("common.saveMsg") %>");
|
||||
$("#btn_close").trigger("click");
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
console.error("Error during save:", status, error);
|
||||
alert("저장 중 오류가 발생했습니다. \n나중에 다시 시도해 주세요.");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var originalApproverList = [];
|
||||
|
||||
$("#btn_close").click(function(){
|
||||
window.close();
|
||||
});
|
||||
|
||||
$("#btn_delete").click(function(){
|
||||
if(!confirm("<%= localeMessage.getString("common.confirmMsg")%>")) return;
|
||||
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
url:url,
|
||||
data:{cmd: 'DELETE', id: $('input[name=id]').val() },
|
||||
success:function(){
|
||||
alert("<%= localeMessage.getString("common.deleteMsg") %>");
|
||||
$("#btn_close").trigger("click");
|
||||
},
|
||||
error:function(xhr, status, error){
|
||||
console.error("Error deleting record:", error);
|
||||
alert("삭제 중 오류가 발생했습니다. \n나중에 다시 시도해 주세요.");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
$("#btn_search").click(function(){
|
||||
searchUser();
|
||||
});
|
||||
|
||||
$("input[name^=search]").keydown(function(key){
|
||||
if (key.keyCode == 13){
|
||||
$("#btn_search").click();
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="popup_box">
|
||||
<div class="search_wrap">
|
||||
<button type="button" class="cssbtn" id="btn_modify" level="W" status="DETAIL,NEW"><i class="material-icons">save</i> <%= localeMessage.getString("button.modify") %></button>
|
||||
<button type="button" class="cssbtn" id="btn_delete" level="W" status="DETAIL"><i class="material-icons">delete</i> <%= localeMessage.getString("button.delete") %></button>
|
||||
<button type="button" class="cssbtn" id="btn_close" level="R"><i class="material-icons">cancel</i> <%= localeMessage.getString("button.close") %></button>
|
||||
</div>
|
||||
<div class="title" id ="title"><%= localeMessage.getString("portalApprovalLine.title2") %></div>
|
||||
|
||||
<form id="ajaxForm">
|
||||
<input type="hidden" name="id">
|
||||
<input type="hidden" id="portalApprovalLineUsersJson">
|
||||
<table class="table_row" cellspacing="0">
|
||||
<tr>
|
||||
<th style="width:25%; min-width:100px;"><%= localeMessage.getString("portalApprovalLine.approvalName") %> <font color="red"> *</font></th>
|
||||
<td><input type="text" name="approvalName" data-required data-warning="승인이름을 입력하여 주십시요."/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><%= localeMessage.getString("portalApprovalLine.approvalType") %> <font color="red"> *</font></th>
|
||||
<td>
|
||||
<div class="select-style" style="position: relative; width: 100%;">
|
||||
<select name="approvalType" data-required data-warning="승인타입을 입력하여 주십시오" id="approvalType"/>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><%= localeMessage.getString("portalApprovalLine.approvalUserList") %> <font color="red"> *</font></th>
|
||||
<td><input type="text" name=portalApprovalLineUsers data-required data-warning="승인자를 선택하여 주십시요." /></td></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div style="padding:20px 0px 0px 0px;">
|
||||
<div class="title" ><%= localeMessage.getString("portalApprovalLine.title3") %></div>
|
||||
<div style="padding:5px 0;">
|
||||
<input type="text" id="searchUserValue" name="searchUserValue" placeholder="사용자 검색하기" style="width:39%; margin-right: 3px; display:inline-block;">
|
||||
<button type="button" class="cssbtn" id="btn_search" level="R" status="DETAIL,NEW"><i class="material-icons">search</i> <%= localeMessage.getString("button.search") %></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="display: flex;">
|
||||
<div class="width1 grid_wrap" style="margin-right:40px;">
|
||||
<table id="gridUser"class="table_row" cellspacing="0" ></table>
|
||||
<div id="pagerUser" class="pagerUser"></div>
|
||||
</div>
|
||||
|
||||
<div style="flex-grow:1;">
|
||||
<span id="noApproverMsg" style="display: flex; justify-content: center; align-items: center;">
|
||||
<h2>승인자를 선택해 주세요</h2>
|
||||
</span>
|
||||
<div id="approverListContainer">
|
||||
<ul id="approverList">
|
||||
<!-- 승인자 리스트가 여기에 동적으로 추가 -->
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
</div><!-- end popup_box -->
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user