Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 510 → Rev 511

/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">