1 package org.paneris.jammyjoes.servlet;
2
3 import java.sql.Timestamp;
4
5 import org.melati.Melati;
6 import org.melati.servlet.Form;
7 import org.melati.PoemContext;
8 import org.melati.servlet.PathInfoException;
9 import org.melati.servlet.TemplateServlet;
10 import org.melati.template.ServletTemplateContext;
11 import org.paneris.jammyjoes.model.Affiliate;
12 import org.paneris.jammyjoes.model.AffiliateTransaction;
13 import org.paneris.jammyjoes.model.AffiliateTransactionTable;
14 import org.paneris.jammyjoes.model.JammyjoesDatabase;
15 import org.paneris.jammyjoes.util.JammyJoesContextUtil;
16 import org.paneris.jammyjoes.util.JammyJoesUtil;
17 import org.webmacro.servlet.WebContext;
18
19 public abstract class JammyJoesMelatiServlet extends TemplateServlet {
20
21 protected PoemContext poemContext(Melati melati) throws PathInfoException {
22 PoemContext context = new PoemContext();
23 context.setLogicalDatabase("jammyjoes");
24 return context;
25 }
26
27 public String getSysAdminName() {
28 return "Tim Joyce";
29 }
30
31 public String getSysAdminEmail() {
32 return "timj@hoop.co.uk";
33 }
34
35 protected String doTemplateRequest(Melati melati, ServletTemplateContext templateContext) throws Exception {
36 logReferer(melati, templateContext);
37 JammyjoesDatabase db = (JammyjoesDatabase) melati.getDatabase();
38 templateContext.put("jjutil", new JammyJoesContextUtil());
39 templateContext.put("menutypes", db.getTypeTable().selection());
40 return jammyjoesRequest(melati, templateContext);
41 }
42
43 protected abstract String jammyjoesRequest(Melati melati, ServletTemplateContext webContext) throws Exception;
44
45 protected String addExtension(String templateName) {
46
47 return templateName;
48 }
49
50 private void logReferer(Melati melati, ServletTemplateContext context) {
51 try {
52 JammyjoesDatabase db = (JammyjoesDatabase) melati.getDatabase();
53 WebContext webContext = (WebContext)context.getContext();
54
55 String affiliateId = JammyJoesUtil.getCookieValue(melati, "affiliate");
56 if (affiliateId == null) {
57 affiliateId = Form.getFormNulled(context,"affiliate");
58 }
59 if (affiliateId == null) {
60 return;
61 }
62 Affiliate affiliate = (Affiliate)db.getAffiliateTable().getObject(new Integer(affiliateId));
63 int days = affiliate.getCookiedays().intValue();
64 melati.getResponse().addCookie(
65 JammyJoesUtil.makeCookie("affiliate", affiliate.getTroid().toString(), days));
66
67 String referrer = webContext.getCGI().getHTTP_REFERER();
68 if (isExcluded(referrer)) {
69 return;
70 }
71
72 AffiliateTransactionTable transTable = db.getAffiliateTransactionTable();
73 AffiliateTransaction trans = (AffiliateTransaction) transTable.newPersistent();
74 trans.setAffiliate(affiliate);
75 trans.setHit(new Timestamp(new java.util.Date().getTime()));
76 trans.setReferrerURL(referrer);
77 trans.setLandingPage(melati.getRequest().getRequestURL().toString());
78 trans.setUserIpAddress(melati.getRequest().getRemoteAddr());
79 transTable.create(trans);
80 } catch (Exception e) {
81 e.printStackTrace(System.err);
82 }
83 }
84
85 private boolean isExcluded(String referrer) {
86 if (referrer == null) {
87 return false;
88 }
89 if (referrer.startsWith("http://localhost")) {
90 return true;
91 }
92 if (referrer.startsWith("http://www.jammyjoes")) {
93 return true;
94 }
95 return false;
96 }
97
98 }