use of db.Select in project common by zenlunatics.
the class MailLists method checkForMail.
// --------------------------------------------------------------------------
@AdminTask
public void checkForMail() {
if (m_site.getBaseFilePath().toString().startsWith("/Users"))
return;
if (m_read_and_send)
readAndSend();
else {
if (m_lists != null && m_lists.size() == 0)
return;
DBConnection db = new DBConnection(m_site);
if (m_lists == null)
m_lists = db.readRows(new Select("name,username,host,password,id").from("mail_lists").where("active"));
try {
for (String[] list : m_lists) if (list[2] != null && list[3] != null)
fetchAndSend(list[0], accountName(list[1], Integer.parseInt(list[4])), list[2], list[3], db);
} catch (Exception e) {
System.out.println("fetchAndSendAll");
m_site.log(e);
}
db.close();
}
}
use of db.Select in project common by zenlunatics.
the class MailLists method _newViewDef.
// --------------------------------------------------------------------------
// @AdminTask
// public static void
// moveAllMessagesToDisk(Request request)
// {
// try {
// List<String> lists = request.db.readValues(new Select("name").from("mail_lists").where("NOT store_on_disk"));
// for (String list : lists) {
// request.writer.write("writing " + list + "<br />");
// System.out.println("writing " + list);
// new MailList(list, request.site, request.db).moveMessagesToDisk(request);
// }
// } catch (IOException e) {
// request.abort(e);
// }
// }
// --------------------------------------------------------------------------
// @AdminTask({"list name"})
// public static void
// moveMessagesToDisk(String list_name, Request request)
// {
// try {
// new MailList(list_name, request.site, request.db).moveMessagesToDisk(request);
// } catch (IOException e) {
// request.abort(e);
// }
// }
// --------------------------------------------------------------------------
@Override
public ViewDef _newViewDef(String name, Site site) {
if (name.equals("additional_emails"))
return new ViewDef(name).setDefaultOrderBy("email").setDialogModes(View.Mode.ADD_FORM, View.Mode.EDIT_FORM, View.Mode.READ_ONLY_FORM).setRecordName("Additional email");
if (name.equals("mail_lists"))
return new ViewDef(name) {
@Override
public boolean beforeUpdate(int id, NameValuePairs name_value_pairs, Map<String, Object> previous_values, Request request) {
if (!name_value_pairs.getBoolean("active") && request.db.lookupBoolean(new Select("active").from("mail_lists").whereIdEquals(id)))
request.db.delete("mail_lists_people", "mail_lists_id=" + id);
return super.beforeUpdate(id, name_value_pairs, previous_values, request);
}
}.addDeleteHook(this).addInsertHook(this).addUpdateHook(this).setDefaultOrderBy("name").setRecordName("Mail List").setColumnNamesForm(new String[] { "name", "send_to", "active", "announce_only", "archive", "archives_public", "footer", "allow_from_outside", "allow_from_outside_subscribers", "subscribers", "username", "host", "password", "store_on_disk" }).setColumnNamesFormTable(new String[] { "name" }).setColumnNamesTable(new String[] { "name", "send_to", "active" }).setColumn(new Column("allow_from_outside").setDisplayName("accept posts from outside non-subscribers (i.e. anyone)")).setColumn(new Column("allow_from_outside_subscribers").setDisplayName("accept posts from outside subscribers")).setColumn(new Column("announce_only").setTitle("If this is checked, replies to posts from this list will be ignored.")).setColumn(new Column("footer").setTitle("Optional text that will be added to the bottom of every post to this list")).setColumn(new Column("host").setIsHidden(true)).setColumn(new Column("name").setPostText("@" + site.getDomain()).setDisplayName("address").setIsRequired(true)).setColumn(new Column("password").setDefaultToUUID().setIsHidden(true)).setColumn(new Column("send_to") {
@Override
protected void writeInput(Mode mode, String default_value, View view, Form form, Request request) throws IOException {
String value = null;
if (mode == Mode.EDIT_FORM)
value = view.data().getString("send_to");
HTMLWriter writer = request.writer;
writer.write("<select name=\"send_to\"><option value=\"Subscribers\">Subscribers</options>");
for (MailHandlerFactory mail_handler_factory : m_mail_handler_factories) mail_handler_factory.writeSendToOptions(value, request.db, writer);
writer.write("</select>");
}
@Override
public boolean writeValue(View view, Map<String, Object> data, Request request) throws IOException {
String send_to = view.data().getString("send_to");
if ("Subscribers".equals(send_to))
request.writer.write(send_to);
else {
MailHandler mail_handler = getMailHandler(view.data().getString("name"), request.db);
if (mail_handler != null)
request.writer.write(mail_handler.getDisplayName());
}
return true;
}
}).setColumn(new Column("store_on_disk").setIsHidden(true)).setColumn(new Column("username").setIsHidden(true)).addRelationshipDef(new ManyToMany("people", "mail_lists_people", "first,last").setViewRole("administrator")).addRelationshipDef(new OneToMany("subscribers").setSpanFormCols(false));
if (name.equals("mail_lists_people"))
return new ViewDef(name).setDialogModes(View.Mode.ADD_FORM, View.Mode.EDIT_FORM).setColumn(new LookupColumn("mail_lists_id", "mail_lists", "name", new Select("id,name,send_to,active").from("mail_lists").orderBy("name"), "name").setFilter(new Filter() {
@Override
public boolean accept(ResultSet rs, Request request) {
try {
return rs.getBoolean("active") && "Subscribers".equals(rs.getString("send_to"));
} catch (SQLException e) {
request.abort(e);
}
return false;
}
}).setDisplayName("mail list")).setColumn(new LookupColumn("people_id", "people", "first,last").setFilter(site.getPeopleFilter()));
if (name.startsWith("ml_"))
return new ViewDef(name).setAccessPolicy(new RoleAccessPolicy("admin").delete()).setDefaultOrderBy("arrived DESC").setRecordName("Message").setRowWindowSize(0).setShowFilterLink(false).setShowHead(false).setColumnNamesTable(new String[] { "arrived", "sender", "subject" }).setColumn(new Column("subject") {
@Override
public boolean writeValue(View view, Map<String, Object> data, Request request) throws IOException {
String subject = view.data().getString("subject");
if (subject == null || subject.length() == 0)
subject = "(no subject)";
request.writer.aOnClick(subject, "new Dialog({url:context+'/MailLists?list=" + view.getViewDef().getName() + "&cmd=get_message&db_key_value=" + view.data().getString("id") + "',title:'" + HTMLWriter.escapeJSString(subject) + "'});");
return true;
}
});
if (name.equals("people mail_lists"))
return new ViewDef(name).setAccessPolicy(new AccessPolicy().add().delete()).setAddButtonText("subscribe").setDeleteButtonText("unsubscribe").setDialogModes(View.Mode.ADD_FORM, View.Mode.EDIT_FORM).setFrom("mail_lists").setRecordName("Mail List").setColumnNamesTable(new String[] { "name" });
if (name.equals("subscribers"))
return new ViewDef(name).setDefaultOrderBy("email").setDialogModes(View.Mode.ADD_FORM, View.Mode.EDIT_FORM).setRecordName("Outside Subscriber");
return null;
}
use of db.Select in project common by zenlunatics.
the class MailLists method sendDigests.
// --------------------------------------------------------------------------
@AdminTask({ "date" })
public void sendDigests(LocalDate date, Site site, DBConnection db) {
Session session = getSession();
List<String> mail_lists = db.readValues(new Select("mail_lists_id").distinct().from("mail_lists_digest"));
for (String list_id : mail_lists) {
List<String> emails = db.readValues(new Select("email").from("people JOIN mail_lists_digest ON (mail_lists_digest.people_id=people.id)").where("mail_lists_id=" + list_id));
InternetAddress[] recipients = new InternetAddress[emails.size()];
for (int i = 0; i < emails.size(); i++) try {
recipients[i] = new InternetAddress(emails.get(i));
} catch (AddressException e) {
e.printStackTrace();
}
MailList mail_list = new MailList(Integer.parseInt(list_id), site, db);
MimeMessage message = mail_list.buildDigest(date, session, site, db);
if (message != null)
send(mail_list.getName(), message, recipients);
}
}
use of db.Select in project common by zenlunatics.
the class MailLists method writeReplyForm.
// --------------------------------------------------------------------------
private void writeReplyForm(String list, int message_id, boolean reply_to_sender, Request request) throws IOException {
HTMLWriter writer = request.writer;
try {
ResultSet rs = request.db.select(new Select("subject,message").from(list).whereIdEquals(message_id));
rs.next();
String subject = rs.getString(1);
MailList mail_list = new MailList(Integer.parseInt(list.substring(3)), request.site, request.db);
String text = mail_list.loadMessage(message_id, rs);
rs.getStatement().close();
if (text == null) {
writer.write("Message file not found.");
return;
}
String to;
if (reply_to_sender)
try {
MimeMessage message = new MimeMessage(getSession(), new ByteArrayInputStream(text.getBytes()));
String[] header = message.getHeader("Return-Path");
to = header[0];
int index = to.indexOf('<');
if (index != -1)
to = to.substring(index + 1, to.indexOf('>', index));
} catch (MessagingException e) {
sendError(list, "writeReplyForm", null, null, e);
throw new RuntimeException(e);
}
else
to = mail_list.getName() + "@" + m_site.getDomain();
if (subject.length() > 2 && !subject.substring(0, 3).equalsIgnoreCase("Re:"))
subject = "Re: " + subject;
writer.write("<form method=\"POST\" action=\"" + request.getContext() + "/EMailForm\"><p><b>from: </b>");
String from = request.getUser().getEmail();
writer.write(from);
writer.write("</p><p><b>to: </b>");
writer.hiddenInput("cmd", "send");
boolean send_from_local_domain = request.site.getSettings().getString("send from local domain") != null;
writer.hiddenInput(send_from_local_domain ? "reply_to" : "from", from);
writer.hiddenInput("email", to);
writer.write(to);
writer.write("</p><p><b>subject: </b>");
writer.hiddenInput("subject", subject);
writer.write(subject);
writer.write("</p><p><textarea id=\"message_ta\" name=\"message\" style=\"width:100%;height:400px;\"><br /><br /><blockquote style=\"border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;\">");
try {
InputStream is = new ByteArrayInputStream(text.getBytes());
MimeMessage message = new MimeMessage(getSession(), is);
Object content = message.getContent();
if (content instanceof MimeMultipart)
WebMail.writePart(message, message_id, (MimeMultipart) content, new ArrayList<Integer>(), writer);
else
writer.write(content.toString());
} catch (MessagingException e) {
sendError(list, "writeReplyForm", null, null, e);
throw new RuntimeException(e);
}
writer.write("</blockquote></textarea></p><p>");
writer.aButtonOnClick("send", "send_form(this,function(t){rich_text_remove($('ml_message'));$('ml_message').set('html','message sent')})");
writer.write("</p></form>");
writer.js("rich_text('message_ta');");
} catch (SQLException e) {
sendError(list, "writeReplyForm", null, null, e);
throw new RuntimeException(e);
}
}
use of db.Select in project common by zenlunatics.
the class MailLists method beforeDelete.
// --------------------------------------------------------------------------
@Override
public boolean beforeDelete(StringBuilder where, Request request) {
String domain = m_site.getDomain();
String name = request.db.lookupString(new Select("name").from("mail_lists").where(where.toString()));
new File(request.site.getBaseFilePath().append("inbox").append(name).toString()).delete();
new File(request.site.getBaseFilePath().append("inbox").append(name + ".sh").toString()).delete();
request.site.runScript("delete_email", name + '@' + domain);
if (!m_read_and_send)
request.site.runScript("delete_mailbox", domain.substring(0, domain.indexOf('.')) + '_' + where.substring(3));
return true;
}
Aggregations