started working on mass e-mail feature for admins. sending of e-mail seems to work. selection of recipients needs a lot of work.

This commit is contained in:
Emil Siverhall 2012-01-23 13:52:11 +01:00
parent f966336302
commit 9cd2fdc9dd
4 changed files with 189 additions and 1 deletions

@ -0,0 +1,14 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<wicket:extend>
<div class="span-22 last">
<div wicket:id="adminMailPanel"></div>
</div>
</wicket:extend>
</body>
</html>

@ -2,6 +2,7 @@ package se.su.dsv.scipro.admin.pages;
import org.apache.wicket.PageParameters;
import se.su.dsv.scipro.admin.panels.AdminMailPanel;
import se.su.dsv.scipro.security.auth.Authorization;
import se.su.dsv.scipro.security.auth.roles.Roles;
@ -10,7 +11,8 @@ public class AdminMailPage extends AbstractAdminPage {
public AdminMailPage(PageParameters pp) {
super(pp);
// TODO Auto-generated constructor stub
add(new AdminMailPanel("adminMailPanel"));
}
}

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<h5>Mail from administrator</h5>
<div wicket:id="feedbackPanel"></div>
<div class="append-bottom" wicket:id="radioChoices">
<input type="radio"/>
</div>
<form wicket:id="mailForm">
Subject:<br />
<input type="text" wicket:id="mailSubject"><br />
Message:<br />
<textarea wicket:id="mailBody"></textarea><br />
<div>
<input type="submit" value="Send e-mail" wicket:id="submitButton" />
</div>
</form>
</wicket:panel>
</body>
</html>

@ -0,0 +1,150 @@
package se.su.dsv.scipro.admin.panels;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.log4j.Logger;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
import org.apache.wicket.behavior.SimpleAttributeModifier;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.RadioChoice;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.data.dao.interfaces.GeneralSystemSettingsDao;
import se.su.dsv.scipro.data.dao.interfaces.MailEventDao;
import se.su.dsv.scipro.data.dao.interfaces.UserDao;
import se.su.dsv.scipro.data.dataobjects.GeneralSystemSettings;
import se.su.dsv.scipro.data.dataobjects.MailEvent;
import se.su.dsv.scipro.data.dataobjects.User;
public class AdminMailPanel extends Panel {
@SpringBean
private UserDao userDao;
@SpringBean
private MailEventDao mailEventDao;
@SpringBean
private GeneralSystemSettingsDao generalSystemSettingsDao;
private Set<User> userSet;
private static final Logger logger = Logger.getLogger(AdminMailPanel.class);
private final String AUTHORS_ALL = "Just me";
// private final String AUTHORS_ALL = "All authors";
// private final String AUTHORS_CONFIRMED = "Authors with confirmed project ideas";
// private final String AUTHORS_UNCONFIRMED = "Authors with unconfirmed project ideas";
private final String AUTHORS_REFUSED = "Authors with refused project ideas";
private final String SUPERVISOR_ALL = "All supervisors";
// private final String SUPERVISOR_CONFIRMED = "Supervisors with confirmed project ideas";
private final String SUPERVISOR_UNCONFIRMED = "Supervisors with unconfirmed project ideas";
// private final String AUTHORS = "authors";
private final String THESISSUPPORT = "Thesis support";
// private final String SUPERVISOR = "supervisor";
private static final long serialVersionUID = 1L;
public AdminMailPanel(String id) {
super(id);
add(new FeedbackPanel("feedbackPanel"));
setUpRadioButtons();
setUpMailForm();
}
private void setUpMailForm() {
MailForm mailForm = new MailForm("mailForm");
add(mailForm);
}
public class MailForm extends Form<Void> {
private TextField<String> mailSubject;
private TextArea<String> mailBody;
private String fromName;
private String fromEmail;
private static final long serialVersionUID = 1L;
public MailForm(String id) {
super(id);
GeneralSystemSettings gsettings = generalSystemSettingsDao.getGeneralSystemSettingsInstance();
fromName = gsettings.getMailFromName();
fromEmail = gsettings.getSystemFromMail();
Button submitButton = new Button("submitButton");
submitButton.add(new SimpleAttributeModifier(
"onclick",
"if (!confirm('Are you sure you want to send this e-mail to the selected recipients?')){ return false; }"));
add(submitButton);
mailSubject = new TextField<String>("mailSubject", new Model<String>());
mailBody = new TextArea<String>("mailBody", new Model<String>());
add(mailSubject);
add(mailBody);
}
@Override
protected void onSubmit() {
try {
MailEvent me = new MailEvent(mailSubject.getInput(), mailBody.getInput(), userSet, fromName, fromEmail);
me = mailEventDao.save(me);
System.out.println("Mail to: " + me.getRecipients() );
System.out.println("Mail subject: " + me.getSubject());
System.out.println("Mail body: " + me.getMessageBody());
info("E-mail sent successfully to the following users: " + me.getRecipients());
} catch (Exception e) {
logger.info("Failed to send e-mail");
}
}
}
private void setUpRadioButtons() {
List<String> myChoices = Arrays.asList(new String[]{AUTHORS_ALL,AUTHORS_REFUSED,THESISSUPPORT,SUPERVISOR_ALL, SUPERVISOR_UNCONFIRMED});
final RadioChoice<String> rc = new RadioChoice<String>("radioChoices",new Model<String>(), myChoices);
AjaxFormChoiceComponentUpdatingBehavior behavior = new AjaxFormChoiceComponentUpdatingBehavior() {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
userSet = new HashSet<User>();
userSet = getRecipients(rc.getModelObject());
}
};
rc.add(behavior);
add(rc);
}
private Set<User> getRecipients(String choiceInput) {
Set<User> recipients = new HashSet<User>();
if(choiceInput.equals(AUTHORS_ALL)) {
recipients.add(userDao.getUserByEmail("emil-siv@dsv.su.se"));
}
else if(choiceInput.equals(AUTHORS_REFUSED)) {
recipients.add(userDao.getUserByEmail("emil-siv@dsv.su.se"));
//recipients.add(userDao.getUserByEmail("fred-fri@dsv.su.se"));
}
else if(choiceInput.equals(THESISSUPPORT)) {
recipients.add(userDao.getUserByEmail("emil-siv@dsv.su.se"));
//recipients.add(userDao.getUserByEmail("fred-fri@dsv.su.se"));
//recipients.add(userDao.getUserByEmail("robi-ekl@dsv.su.se"));
}
else if(choiceInput.equals(SUPERVISOR_ALL)) {
}
else if(choiceInput.equals(SUPERVISOR_UNCONFIRMED)) {
}
return recipients;
}
}