/impl/conf/berserk/sd.xml |
---|
122,6 → 122,18 |
<!--Announcements--> |
<service> |
<name>SendMessage</name> |
<implementationClass>pt.estgp.estgweb.services.announcements.CreateAnnouncementService</implementationClass> |
<description>Send a message to email</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>sendMessage</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
</filterChains> |
</service> |
<service> |
<name>CreateAnnouncement</name> |
<implementationClass>pt.estgp.estgweb.services.announcements.CreateAnnouncementService</implementationClass> |
<description>Create an Announcement</description> |
/impl/src/java/pt/estgp/estgweb/services/announcements/CreateAnnouncementService.java |
---|
11,6 → 11,8 |
import pt.estgp.estgweb.domain.enums.LangEnum; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.domain.views.AnnouncementView; |
import pt.estgp.estgweb.domain.views.CourseView; |
import pt.estgp.estgweb.domain.views.CourseUnitView; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import pt.estgp.estgweb.utils.RoleManager; |
import pt.estgp.estgweb.utils.Email; |
35,6 → 37,61 |
private static final String ALL_ROLE = Globals.ALL_ROLE; |
public enum MessageTarget { |
all("all"), |
workers("workers"), |
students("students"), |
teachers("teachers"), |
teachersStudents("teachers.students"), |
teachersWorkers("teachers.workers") |
; |
public boolean isWorkers() |
{ |
return this == workers || this == teachersWorkers || this == all; |
} |
public boolean isTeachers() |
{ |
return this == teachers || this == teachersStudents ||this == teachersWorkers || this == all; |
} |
public boolean isStudents() |
{ |
return this == students || this == teachersStudents || this == all; |
} |
private String target; |
private MessageTarget(String target) |
{ |
this.target = target; |
} |
public String getTarget() { |
return target; |
} |
public static MessageTarget parse(String target) |
{ |
if(target == null) |
return all; |
for(MessageTarget value: values()) |
{ |
if(value.getTarget().equals(target)) |
return value; |
} |
return all; |
} |
} |
public void sendMessage(String from, String year, String department, long courseId, long courseUnitId, String semestre, MessageTarget target, UserSession userSession) |
{ |
List<User> users = DaoFactory.getAnnouncementDaoImpl().findUsers(year,department,courseId,courseUnitId,semestre,target); |
return; |
} |
public AnnouncementView run(AnnouncementView announcementView, Image imageBig, Image imageSmall, UserSession userSession) |
{ |
Announcement a; |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/AnnouncementDaoImpl.java |
---|
2,8 → 2,10 |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.DaoUtils; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.services.common.ISearchResults; |
import pt.estgp.estgweb.services.common.SearchTypeEnum; |
import pt.estgp.estgweb.services.announcements.CreateAnnouncementService; |
import pt.estgp.estgweb.Globals; |
import java.util.List; |
14,6 → 16,7 |
import org.hibernate.criterion.Criterion; |
import org.hibernate.criterion.Order; |
import org.hibernate.Criteria; |
import org.apache.lucene.search.Query; |
import jomm.dao.impl.AbstractDao; |
import jomm.utils.MyCalendar; |
33,6 → 36,149 |
return (AnnouncementDaoImpl) myInstance; |
} |
public List<User> findUsers(String year, String department, long courseId, long courseUnitId, String semestre, CreateAnnouncementService.MessageTarget target) |
{ |
List<User> users = new ArrayList<User>(); |
if(target.isWorkers()) |
{ |
Criteria criteria = createCriteria(User.class); |
criteria.add(like("roles", "%worker%")); |
users.addAll(criteria.list()); |
} |
if(courseUnitId > 0) |
{ |
CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().load(courseUnitId); |
if(target.isTeachers()) |
{ |
users.addAll(cu.getTeachers()); |
} |
if(target.isStudents()) |
{ |
users.addAll(cu.getStudents()); |
} |
} |
else if(semestre != null && semestre.length() > 0) |
{ |
if(target.isTeachers()) |
{ |
Criteria usersC = createCriteria(Teacher.class); |
usersC.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); |
usersC.createAlias("teachedUnits", "tU"); |
usersC.createAlias("tU.course","tUC"); |
usersC.add(eq("tU.semestre",semestre)) |
.add(eq("tUC.id",courseId)); |
users.addAll(usersC.list()); |
} |
if(target.isStudents()) |
{ |
Criteria usersC = createCriteria(Student.class); |
usersC.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); |
usersC.createAlias("subscribedUnits", "sU"); |
usersC.createAlias("sU.course","sUC"); |
usersC.add(eq("sU.semestre",semestre)) |
.add(eq("sUC.id",courseId)); |
users.addAll(usersC.list()); |
} |
} |
else if(courseId > 0) |
{ |
if(target.isTeachers()) |
{ |
Criteria usersC = createCriteria(Teacher.class); |
usersC.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); |
usersC.createAlias("teachedUnits", "tU"); |
usersC.createAlias("tU.course","tUC"); |
usersC.add(eq("tUC.id",courseId)); |
if(year != null && year.length() > 0) |
usersC.add(eq("tU.importYear",year)); |
users.addAll(usersC.list()); |
} |
if(target.isStudents()) |
{ |
Criteria usersC = createCriteria(Student.class); |
usersC.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); |
usersC.createAlias("subscribedUnits", "sU"); |
usersC.createAlias("sU.course","sUC"); |
usersC.add(eq("sUC.id",courseId)); |
if(year != null && year.length() > 0) |
usersC.add(eq("sU.importYear",year)); |
users.addAll(usersC.list()); |
} |
} |
else if(department != null && department.length() > 0) |
{ |
if(target.isTeachers()) |
{ |
Criteria usersC = createCriteria(Teacher.class); |
usersC.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); |
usersC.createAlias("teachedUnits", "tU"); |
usersC.createAlias("tU.course","tUC"); |
usersC.add(eq("tUC.area",department)); |
if(year != null && year.length() > 0) |
usersC.add(eq("tU.importYear",year)); |
users.addAll(usersC.list()); |
} |
if(target.isStudents()) |
{ |
Criteria usersC = createCriteria(Student.class); |
usersC.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); |
usersC.createAlias("subscribedUnits", "sU"); |
usersC.createAlias("sU.course","sUC"); |
usersC.add(eq("sUC.area",department)); |
if(year != null && year.length() > 0) |
usersC.add(eq("sU.importYear",year)); |
users.addAll(usersC.list()); |
} |
} |
else if(year != null && year.length() > 0) |
{ |
if(target.isTeachers()) |
{ |
Criteria usersC = createCriteria(Teacher.class); |
usersC.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); |
usersC.createAlias("teachedUnits", "tU"); |
usersC.add(eq("tU.importYear",year)); |
users.addAll(usersC.list()); |
} |
if(target.isStudents()) |
{ |
Criteria usersC = createCriteria(Student.class); |
usersC.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); |
usersC.createAlias("subscribedUnits", "sU"); |
usersC.add(eq("sU.importYear",year)); |
users.addAll(usersC.list()); |
} |
} |
else |
{ |
if(target.isTeachers()) |
{ |
Criteria teTeachers = createCriteria(Teacher.class); |
users.addAll(teTeachers.list()); |
} |
if(target.isStudents()) |
{ |
Criteria teSudents = createCriteria(Student.class); |
users.addAll(teSudents.list()); |
} |
} |
System.out.println("Selected People:" + users.size()); |
for(User u : users) |
{ |
System.out.println(u.getName()); |
} |
System.out.println("/Selected Students:" + users.size()); |
return users; |
} |
public List<Announcement> findAnnouncements(int maxAnnouncements, List<String> roles, String subTarget, boolean internal) |
{ |
if (roles == null) |
/impl/src/java/pt/estgp/estgweb/web/controllers/announcements/MessagesController.java |
---|
11,6 → 11,7 |
import pt.estgp.estgweb.services.expceptions.AlreadyExistsException; |
import pt.estgp.estgweb.services.courseunits.DirectedCoordinatedUnitsService; |
import pt.estgp.estgweb.services.courseunits.DirectedCoordinatedCourses; |
import pt.estgp.estgweb.services.announcements.CreateAnnouncementService; |
import pt.utl.ist.berserk.logic.filterManager.exceptions.InvalidFilterException; |
import pt.utl.ist.berserk.logic.filterManager.exceptions.InvalidFilterExpressionException; |
import pt.utl.ist.berserk.logic.filterManager.exceptions.IncompatibleFilterException; |
134,7 → 135,43 |
} |
} |
public ActionForward sendMessage(ActionMapping mapping, |
ActionForm form, |
HttpServletRequest request, |
HttpServletResponse response) |
throws ServletException |
{ |
try |
{ |
MessagesForm mF = (MessagesForm) form; |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{mF.getFromRole(),mF.getImportYear(),mF.getDepartamento(),mF.getCourseId(),mF.getCourseUnitId(),mF.getSemestre(), CreateAnnouncementService.MessageTarget.parse(mF.getTarget())}; |
// String from, String year, String department, long courseId, long courseUnitId, String semestre, MessageTarget target, |
sm.execute(RequestUtils.getRequester(request, response), "SendMessage", args, names); |
return mapping.findForward("success"); |
} |
catch (FilterChainFailedException e) |
{ |
return mapping.findForward("error401"); |
} |
catch (NotFoundException e) |
{ |
return mapping.findForward("error404"); |
} |
catch (Throwable e) |
{ |
logger.error(e, e); |
return mapping.findForward("error500"); |
} |
} |
} |
/impl/src/web/admin/announcements/submitMessage.jsp |
---|
24,9 → 24,9 |
%> |
<html:form action="/admin/submitMessage" enctype="multipart/form-data" onsubmit="alert(myEditor.saveHTML());this.text.value=myEditor.saveHTML();"> |
<html:form action="/admin/submitMessage" enctype="multipart/form-data"> |
<input type="hidden" name="dispatch" value="changeForm"> |
<input type="hidden" name="dispatch" value="sendMessage"> |
<html:hidden property="text"/> |
<div class="form blockForm"> |
<table class="form"> |