package cn.jcenterhome.web.action.admin;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import cn.jcenterhome.util.Common;
import cn.jcenterhome.util.FileHelper;
import cn.jcenterhome.util.JavaCenterHome;
import cn.jcenterhome.web.action.BaseAction;
public class TemplateAction extends BaseAction {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
Map<String, Object> sGlobal = (Map<String, Object>) request.getAttribute("sGlobal");
int supe_uid = (Integer) sGlobal.get("supe_uid");
if (Common.empty(JavaCenterHome.jchConfig.get("allowedittpl"))
|| !Common.checkPerm(request, response, "managetemplate") || !Common.ckFounder(supe_uid)) {
return showMessage(request, response, "cp_no_authority_management_operation_edittpl");
}
String tpldir = JavaCenterHome.jchRoot + "./template/default/";
try {
if (submitCheck(request, "editsubmit")) {
String filename = checkFileName(request.getParameter("filename"), tpldir);
String filefullname = tpldir + filename;
String d_file = filefullname + ".bak";
File source = new File(filefullname);
File destination = new File(d_file);
if (!destination.exists()) {
copyFile(source, destination);
}
String content = request.getParameter("content");
FileHelper.writeFile(source, Common.stripSlashes(content));
return showMessage(request, response, "do_success", "admincp.jsp?ac=template");
}
} catch (Exception e) {
return showMessage(request, response, e.getMessage());
}
String op = request.getParameter("op");
if (Common.empty(op)) {
Map<String, List<String[]>> tpls = new LinkedHashMap<String, List<String[]>>();
List<String[]> subList;
File tpldirFile = new File(tpldir);
if (tpldirFile.isDirectory()) {
File[] subFileList = tpldirFile.listFiles();
for (File subFile : subFileList) {
String subFileName = subFile.getName();
if (subFile.isFile() && subFileName.endsWith(".jsp")) {
int status = 0;
if (new File(tpldirFile, subFileName + ".bak").isFile()) {
status = 1;
}
int pos = subFileName.indexOf("_");
if (pos >= 0) {
subList = tpls.get(subFileName.substring(0, pos));
if (subList == null) {
subList = new ArrayList<String[]>();
tpls.put(subFileName.substring(0, pos), subList);
}
subList.add(new String[] {subFileName, String.valueOf(status)});
} else {
subList = tpls.get("base");
if (subList == null) {
subList = new ArrayList<String[]>();
tpls.put("base", subList);
}
subList.add(new String[] {subFileName, String.valueOf(status)});
}
}
}
}
request.setAttribute("tpls", tpls);
} else if (op.equals("edit")) {
String filename;
try {
filename = checkFileName(request.getParameter("filename"), tpldir);
} catch (Exception e) {
return showMessage(request, response, e.getMessage());
}
String filefullname = tpldir + filename;
String content = (Common.htmlSpecialChars(FileHelper.readFile(filefullname))).trim();
request.setAttribute("content", content);
request.setAttribute("filename", filename);
} else if (op.equals("repair")) {
String filename;
try {
filename = checkFileName(request.getParameter("filename"), tpldir);
} catch (Exception e) {
return showMessage(request, response, e.getMessage());
}
String filefullname = tpldir + filename;
String d_file = filefullname + ".bak";
File backFile = new File(d_file);
if (backFile.exists()) {
try {
copyFile(backFile, new File(filefullname));
} catch (IOException e) {
return showMessage(request, response, e.getMessage());
}
backFile.delete();
} else {
return showMessage(request, response, "cp_designated_template_files_can_not_be_restored");
}
return showMessage(request, response, "do_success", "admincp.jsp?ac=template");
}
request.setAttribute("op", op);
return mapping.findForward("template");
}
private String checkFileName(String fileName, String tplDir) throws Exception {
boolean isedit = false;
if (!Common.empty(fileName)) {
fileName = fileName.replace("..", "").replace("/", "").replace("\\", "");
if (!Common.empty(fileName) && Common.fileext(fileName).equals("jsp")) {
File file = new File(tplDir, fileName);
if (file.canWrite()) {
isedit = true;
}
}
}
if (!isedit) {
throw new Exception("cp_template_files_editing_failure_check_directory_competence");
}
return fileName;
}
private void copyFile(File source, File destination) throws IOException {
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
try {
fileInputStream = new FileInputStream(source);
fileOutputStream = new FileOutputStream(destination);
int bufferLength = 1024;
byte[] buffer = new byte[bufferLength];
int readCount = 0;
while ((readCount = fileInputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, readCount);
}
} finally {
if (fileInputStream != null) {
fileInputStream.close();
}
if (fileOutputStream != null) {
fileOutputStream.close();
}
}
}
}