/impl/conf/language/MessageResourcesSurvey.properties |
---|
New file |
0,0 → 1,106 |
################################################################################ |
# |
# Survey MESSAGE RESOURCES - Duarte Santos |
# |
################################################################################ |
# SERVICE ZONE |
surveys=Questionários |
survey.create.survey=Criar Questionário |
survey.list.surveys=Listar Questionários |
survey.zero.placed=0 questionários criados |
intranet.my.surveys=Os Meus Questionários |
intranet.my.surveys.stats=As Estatísticas Que Posso Consultar |
survey.stats.zero.placed=Não existem estatísticas que possa consultar |
# SUBMIT SURVEY |
survey.submit.form.title=Título |
survey.submit.form.type=Tipo |
survey.submit.form.target.roles=Pessoas a quem destina |
survey.submit.form.target.pairs=Par a que se destina |
survey.submit.form.stats.consult.roles=Quem pode consultar resultados |
survey.submit.form.start.date=Data de inicio |
survey.submit.form.end.date=Data de fim |
survey.submit.form.questions=Perguntas |
survey.submit.form.delete.question=Apagar pergunta |
survey.submit.form.required.question=Obrigatória? |
survey.submit.form.question=Pergunta |
survey.submit.form.add.hoption=Adicionar opção horizontal |
survey.submit.form.add.voption=Adicionar opção vertical |
survey.submit.form.add.question=Adicionar pergunta |
# SUBMIT SURVEY selects |
surveys.type.general=Geral |
surveys.type.pedagogic=Pedagógico |
surveys.target.pair.student.courseunit=Estudante/Cadeira |
surveys.target.pair.teacher.courseunit=Professor/Cadeira |
surveys.stats.consult.owner=Criador |
surveys.question.type.radio=Escolha múltipla radio |
surveys.question.type.check=Escolha múltipla check |
surveys.question.type.matrix=Escolha múltipla matriz |
surveys.question.type.text=Pergunta de texto |
#SUBMIT SURVEY errors |
survey.submit.form.error.need.expire.date=A data em que o questionário acaba é obrigatória |
survey.submit.form.error.need.questions=É necessário adicionar pelo menos uma pergunta |
survey.submit.form.error.question.need.label=A {0}ª pergunta tem de ter texto |
survey.submit.form.error.question.need.hoption=A {0}ª pergunta tem de ter pelo menos uma opção horizontal |
survey.submit.form.error.question.need.voption=A {0}ª pergunta tem de ter pelo menos uma opção vertical |
survey.submit.form.error.question.options.need.labels=Todas as opções da {0}ª pergunta devem estar preenchidas |
survey.submit.form.error.question.need.hoption.first=Primeiro tem de adicionar uma opção horizontal |
# ANSWER SURVEY |
survey.answer.form.title=Título |
survey.answer.form.type=Tipo |
survey.answer.form.end.date=Data de Fim |
survey.answer.form.related=Relativo a |
survey.answer.form.required.question=Pergunta obrigatória |
# ANSWER SURVEY errors |
survey.answer.form.error.answer.question.required=A {0}ª pergunta é obrigatória! |
# LIST SURVEY |
survey.list.form.title=Título |
survey.list.form.type=Tipo |
survey.list.form.target=Destinatários |
survey.list.form.year=Ano |
survey.list.form.semester=Semestre |
survey.list.form.start.date=Data de Início |
survey.list.form.end.date=Data de Fim |
survey.list.form.created.by=Criado por |
survey.list.form.number.responses=Nº de Respostas |
survey.list.form.status=Estado |
survey.list.form.percentage.symbol=% |
survey.list.form.empty=Não existem questionários |
# LIST SURVEY options |
survey.list.form.option.edit=Editar |
survey.list.form.option.clone=Replicar |
survey.list.form.option.consist=Consistir |
survey.list.form.option.gen.stats=Gerar estatísticas |
survey.list.form.option.view.stats=Ver estatísticas |
survey.list.form.option.download.csv=Download CSV |
# LIST SURVEY status |
survey.list.form.status.create.survey=A criar o questionário, aguarde... |
survey.list.form.status.consist.survey=A consistir o questionário, aguarde... |
survey.list.form.status.generate.stats=A gerar estatísticas, aguarde... |
# STATS |
survey.stats.graph.axis.range.label=Nº de Respostas |
survey.stats.graph.axis.domain.label=Itens |
# General MESSAGES |
survey.message.created.success=Questionário criado com sucesso |
survey.message.edited.success=Questionário editado com sucesso |
survey.message.answered.success=Questionário respondido com sucesso |
survey.message.operation.started=Operação iniciada com sucesso |
# TOPNAV |
survey.topnav.create.survey=Criar Questionário |
survey.topnav.list.surveys=Listar Questionários |
survey.topnav.list.stats=Listar Estatísticas |
survey.topnav.load.stats=a ver estatísticas |
survey.topnav.response.survey=a responder questionário |
survey.topnav.view.graphs=a ver gráficos |
# TO.DO |
module.Surveys=Questionários |
survey.type.todo=Para responder |
/impl/conf/language/MessageResources.properties |
---|
133,7 → 133,9 |
user.role.studentsID=Alunos de Informação e Documentação |
user.role.studentsFSIR=Alunos de Fontes de Informação e Serviço de Referência |
user.role.admin,teacher=Admin e Professor |
#Filter Errors |
fail.role=Lamentamos o incómodo, mas necessita de permissões especiais para aceder a esta área. |
fail.owner=Lamentamos o incómodo, mas não tem permissões sobre o objecto ao qual tentou aceder. |
/impl/conf/WEB-INF/struts/struts-default.xml |
---|
10,7 → 10,7 |
<form-beans> |
<!-- Import --> |
<!--<form-bean type="pt.estgp.estgweb.web.form.announcements.AnnouncementsForm" name="AnnouncementsForm"/>--> |
<form-bean type="pt.estgp.estgweb.web.form.EmptyForm" name="EmptyForm"/> |
<form-bean type="pt.estgp.estgweb.web.form.EmptyForm" name="EmptyForm"/> |
<!--<form-bean type="com.innovkey.opt.imports.web.ImportForm" name="ImportForm"/>--> |
</form-beans> |
201,10 → 201,11 |
/WEB-INF/struts/tiles-intranet.xml, |
/WEB-INF/struts/tiles-reminders.xml, |
/WEB-INF/struts/tiles-managedidentifier.xml, |
/WEB-INF/struts/tiles-srusource.xml"/> |
/WEB-INF/struts/tiles-srusource.xml, |
/WEB-INF/struts/tiles-survey.xml"/> <!-- Duarte Santos --> |
</plug-in> |
<plug-in className="org.apache.struts.validator.ValidatorPlugIn"> |
<set-property property="pathnames" value="/WEB-INF/struts/validator-rules.xml,/WEB-INF/struts/validation.xml"/> |
</plug-in> |
</struts-config> |
</struts-config> |
/impl/conf/WEB-INF/struts/struts-survey.xml |
---|
New file |
0,0 → 1,67 |
<?xml version="1.0" encoding="UTF-8"?> |
<!--<!DOCTYPE struts-config PUBLIC--> |
<!--"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"--> |
<!--"http://struts.apache.org/dtds/struts-config_1_3.dtd">--> |
<struts-config> |
<form-beans> |
<form-bean type="pt.estgp.estgweb.web.form.surveys.SurveysForm" name="SurveysForm"/> |
</form-beans> |
<global-exceptions> |
</global-exceptions> |
<global-forwards> |
</global-forwards> |
<action-mappings> |
<action path="/user/submitSurveyFromServiceZone" |
type="pt.estgp.estgweb.web.controllers.surveys.SurveysController" |
name="SurveysForm" |
scope="request" |
parameter="dispatch" |
input="page.submit.survey.from.serviceZone" |
validate="true"> |
<forward name="serviceZone" path="page.separators.serviceZone"/> |
</action> |
<action path="/user/startSurveyResponseFromHome" forward="/user/surveysControllerFromServiceZone.do?dispatch=loadResponse&from=Home"/> |
<action path="/user/submitSurveyResponseFromHome" |
type="pt.estgp.estgweb.web.controllers.surveys.SurveysController" |
name="SurveysForm" |
scope="request" |
parameter="dispatch" |
input="page.submit.survey.response.from.home" |
validate="true"> |
<forward name="home" path="page.separators.home"/> |
</action> |
<action path="/user/startLoadSurveyNodeGraphs" forward="page.load.survey.node.graphs"/> |
<action path="/user/startListSurveyStats" forward="/user/surveysControllerFromServiceZone.do?dispatch=listStats"/> |
<action path="/user/startListSurveysFromServiceZone" forward="page.list.surveys.from.serviceZone"/> |
<action path="/user/startGenerateSurveyStatsFromServiceZone" forward="/user/surveysControllerFromServiceZone.do?dispatch=generateStats&from=ServiceZone"/> |
<action path="/user/startConsistSurveyFromServiceZone" forward="/user/surveysControllerFromServiceZone.do?dispatch=consist&from=ServiceZone"/> |
<action path="/user/startCloneSurveyFromServiceZone" forward="/user/surveysControllerFromServiceZone.do?dispatch=clone&from=ServiceZone"/> |
<action path="/user/startEditSurveyFromServiceZone" forward="/user/surveysControllerFromServiceZone.do?dispatch=edit&from=ServiceZone"/> |
<action path="/user/startSubmitSurveyFromServiceZone" forward="/user/surveysControllerFromServiceZone.do?dispatch=start&from=ServiceZone"/> |
<action path="/user/surveysControllerFromServiceZone" |
type="pt.estgp.estgweb.web.controllers.surveys.SurveysController" |
name="SurveysForm" |
scope="request" |
parameter="dispatch" |
input="page.submit.survey.from.serviceZone" |
validate="false"> |
<forward name="response" path="page.submit.survey.response.from.home"/> |
<forward name="stats" path="page.list.survey.stats"/> |
<forward name="serviceZone" path="page.separators.serviceZone"/> |
<forward name="from.add.role" path="page.submit.survey.from.serviceZone"/> |
</action> |
</action-mappings> |
</struts-config> |
/impl/conf/WEB-INF/struts/tiles-survey.xml |
---|
New file |
0,0 → 1,39 |
<?xml version="1.0" encoding="UTF-8" ?> |
<!--<!DOCTYPE tiles-definitions PUBLIC--> |
<!--"-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"--> |
<!--"http://struts.apache.org/dtds/tiles-config_1_1.dtd">--> |
<tiles-definitions> |
<definition name="page.submit.survey.from.serviceZone" extends="page.separators.serviceZone"> |
<put name="title" value="Questionário"/> |
<put name="topnav" value="/user/serviceZone/topnavCreateSurvey.jsp"/> |
<put name="body" value="/admin/surveys/submitSurvey.jsp"/> |
</definition> |
<definition name="page.list.surveys.from.serviceZone" extends="page.separators.serviceZone"> |
<put name="title" value="Questionário"/> |
<put name="topnav" value="/user/serviceZone/topnavListSurvey.jsp"/> |
<put name="body" value="/user/surveys/listSurveys.jsp"/> |
</definition> |
<definition name="page.list.survey.stats" extends="page.separators.serviceZone"> |
<put name="title" value="Questionário"/> |
<put name="topnav" value="/user/serviceZone/topnavListSurveyStats.jsp"/> |
<put name="body" value="/user/surveys/listSurveyStats.jsp"/> |
</definition> |
<definition name="page.load.survey.node.graphs" extends="page.separators.serviceZone"> |
<put name="title" value="Questionário"/> |
<put name="topnav" value="/user/serviceZone/topnavLoadSurveyNodeGraphs.jsp"/> |
<put name="body" value="/user/surveys/loadSurveyNodeGraphs.jsp"/> |
</definition> |
<definition name="page.submit.survey.response.from.home" extends="page.separators.home"> |
<put name="title" value="Questionário"/> |
<put name="topnav" value="/user/home/topnavResponseSurvey.jsp"/> |
<put name="body" value="/user/surveys/submitSurveyResponse.jsp"/> |
</definition> |
</tiles-definitions> |
/impl/conf/WEB-INF/tlds/baco.tld |
---|
251,6 → 251,5 |
<required>false</required> |
<rtexprvalue>false</rtexprvalue> |
</attribute> |
</tag> |
</taglib> |
/impl/conf/WEB-INF/web.xml |
---|
144,7 → 144,8 |
/WEB-INF/struts/struts-intranet.xml, |
/WEB-INF/struts/struts-reminders.xml, |
/WEB-INF/struts/struts-managedidentifier.xml, |
/WEB-INF/struts/struts-srusource.xml |
/WEB-INF/struts/struts-srusource.xml, |
/WEB-INF/struts/struts-survey.xml <!-- Duarte Santos --> |
</param-value> |
</init-param> |
<init-param> |
/impl/conf/app.properties |
---|
1,4 → 1,4 |
|
#FICHEIRO DE CONFIGURACOES |
tmp.dir=@tmp.dir@ |
67,7 → 67,10 |
module.profile=true |
module.sms=false |
module.quotasImpressao=true |
#module.quotasImpressao=false |
module.srusource=true |
#Duarte Santos |
module.surveys=true |
################################################## |
# SMS |
# |
85,7 → 88,6 |
##Proxy Servers |
#If is an HTTP Server needs encoding config if FTP needs user pass config |
#This server is the server for unit contents, must be named ionline, it is hardcoded |
#server.ionline=ftp://www.global.estgp.pt |
server.ionline=ftp://w2.estgp.pt |
server.ionline.start.path= |
ionline.pass=baco |
99,6 → 101,7 |
estgp.proxy.port= |
server.conteudos.start.path= |
#server.conteudos=http://localhost:9090/conteudos |
server.conteudos=http://deptal.estgp.pt:9090/conteudos |
conteudos.encoding=UTF-8 |
conteudos.proxy.host= |
265,7 → 268,38 |
blog.desc.summary.size=250 |
blog.type.courseunit=courseunit |
######################################################################### |
# Surveys - Duarte Santos |
# |
surveys.type.0=general |
surveys.type.1=pedagogic |
# Esta role tem de existir nas user.role senão tem de ser adicionada nas messages props |
surveys.target.role.0=all |
surveys.target.role.1=teacher |
surveys.target.role.2=student |
surveys.target.pair.0=student.courseunit |
surveys.target.pair.1=teacher.courseunit |
# Esta role tem de existir nas user.role senão tem de ser adicionada nas messages props |
surveys.stats.consult.role.0=all |
surveys.stats.consult.role.1=teacher |
surveys.stats.consult.role.2=student |
surveys.question.type.0=radio |
surveys.question.type.1=check |
surveys.question.type.2=matrix |
surveys.question.type.3=text |
# Stats |
surveys.stats.graph.img.width=800 |
surveys.stats.graph.img.height=300 |
######################################################################### |
# Link Analysis |
# |
url.stat.tmp.dir=/linkchart |
386,6 → 420,7 |
#PopService |
# |
pop.container.use=true |
#pop.container.use=false |
pop.web.interface=http://mail.estgp.pt/exchange |
pop.server=mail.estgp.pt |
pop.use.default.server=true |
/impl/conf/berserk/sd.xml |
---|
1475,14 → 1475,167 |
</filterChains> |
</service> |
<!-- Duarte Santos --> |
<service> |
<name>LoadSurvey</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveyService</implementationClass> |
<description>Load survey view</description> |
<isTransactional>true</isTransactional> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
</filterChains> |
</service> |
<service> |
<name>LoadEditSurvey</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveyService</implementationClass> |
<description>Load survey view to edit</description> |
<isTransactional>true</isTransactional> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="CanEditSurvey"/> |
</filterChains> |
</service> |
<service> |
<name>LoadCloneSurvey</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveyService</implementationClass> |
<description>Load survey view to clone</description> |
<isTransactional>true</isTransactional> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="OwnersLoadSurvey"/> |
</filterChains> |
</service> |
<service> |
<name>LoadListStatsSurvey</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveyService</implementationClass> |
<description>Load survey view to list stats</description> |
<isTransactional>true</isTransactional> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="CanConsultSurveyStats"/> |
</filterChains> |
</service> |
<service> |
<name>LoadSurveys</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveysService</implementationClass> |
<description>Load all survey views</description> |
<isTransactional>true</isTransactional> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="Admins"/> |
</filterChains> |
</service> |
<service> |
<name>LoadOwnedSurveys</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveysService</implementationClass> |
<description>Load owned survey views</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>loadOwnedSurveys</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
</filterChains> |
</service> |
<service> |
<name>LoadSurveyResponse</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveyResponseService</implementationClass> |
<description>Load survey response view</description> |
<isTransactional>true</isTransactional> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="OwnersLoadResponse"/> |
</filterChains> |
</service> |
<service> |
<name>CreateEditSurvey</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.CreateEditSurveyService</implementationClass> |
<description>Create or edit survey</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>createEditSurveyService</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="Admins"/> |
</filterChains> |
</service> |
<service> |
<name>ConsistSurvey</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.ConsistSurveyService</implementationClass> |
<description>Apply survey responses to new users</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>consistSurveyService</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="OwnersLoadSurvey"/> |
</filterChains> |
</service> |
<service> |
<name>InsertSurveyAnswers</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.InsertSurveyAnswersService</implementationClass> |
<description>Insert survey answers</description> |
<isTransactional>true</isTransactional> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="OwnersLoadResponse"/> |
</filterChains> |
</service> |
<service> |
<name>GenerateSurveyStats</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.GenerateSurveyStatsService</implementationClass> |
<description>Generate all survey stats</description> |
<isTransactional>true</isTransactional> |
<defaultMethod>generateStatsService</defaultMethod> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="OwnersLoadSurvey"/> |
</filterChains> |
</service> |
<service> |
<name>GenerateSurveyStatsCsv</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.GenerateSurveyStatsCsvService</implementationClass> |
<description>Generate all survey stats on a csv file</description> |
<isTransactional>true</isTransactional> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="OwnersLoadSurvey"/> |
</filterChains> |
</service> |
<service> |
<name>LoadSurveyNodeGraphs</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.LoadSurveyNodeGraphsService</implementationClass> |
<description>Load survey graphics of a node</description> |
<isTransactional>true</isTransactional> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="CanConsultSurveyStats"/> |
</filterChains> |
</service> |
<service> |
<name>LoadConsultStatsSurveys</name> |
<implementationClass>pt.estgp.estgweb.services.surveys.LoadConsultStatsSurveysService</implementationClass> |
<description>Load surveys views which user can consult stats</description> |
<isTransactional>true</isTransactional> |
<filterChains> |
<chain name="Logger"/> |
<chain name="Session"/> |
<chain name="AuthenticatedUsers"/> |
</filterChains> |
</service> |
<!-- Duarte Santos --> |
DeleteSruSource |
</serviceDefinitions> |
/impl/conf/berserk/fd.xml |
---|
183,4 → 183,21 |
<description>Check if a resource can be loaded</description> |
<isTransactional>false</isTransactional> |
</filter> |
<!-- Duarte Santos --> |
<filter> |
<name>CanConsultSurveyStatsClass</name> |
<implementationClass>pt.estgp.estgweb.filters.filters.CanConsultSurveyStatsClass</implementationClass> |
<description>Checks if the requester can consult stats of specified object</description> |
<isTransactional>false</isTransactional> |
</filter> |
<filter> |
<name>CanEditSurveyClass</name> |
<implementationClass>pt.estgp.estgweb.filters.filters.CanEditSurveyClass</implementationClass> |
<description>Checks if the requester can edit specified object</description> |
<isTransactional>false</isTransactional> |
</filter> |
<!-- Duarte Santos --> |
</filterDefinitions> |
/impl/conf/berserk/fcd.xml |
---|
206,31 → 206,36 |
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass> |
</filterChain> |
<!-- Duarte Santos --> |
<filterChain> |
<name>ContextStaticTimerExample</name> |
<expression>ContextStaticTimer("2008-03-1 12:00:00","2008-03-2 19:56:00")</expression> |
<description>Timer Control Chain</description> |
<name>OwnersLoadSurvey</name> |
<expression>OwnerUsersClass("serializable","pt.estgp.estgweb.domain.SurveyImpl")</expression> |
<description>Owner of an object Control Chain</description> |
<invocationTiming>1</invocationTiming> |
<filterClass>pt.estgp.estgweb.filters.chains.ContextControlFilter</filterClass> |
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass> |
</filterChain> |
<filterChain> |
<name>ContextObjectTimer</name> |
<expression>ContextObjectTimer("object.serializable","object.referenceClass")</expression> |
<description>Timer Control Chain from Object Time</description> |
<name>CanConsultSurveyStats</name> |
<expression>CanConsultSurveyStatsClass("serializable","pt.estgp.estgweb.domain.SurveyImpl")</expression> |
<description>Owner of an object Control Chain</description> |
<invocationTiming>1</invocationTiming> |
<filterClass>pt.estgp.estgweb.filters.chains.ContextControlFilter</filterClass> |
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass> |
</filterChain> |
<filterChain> |
<name>OwnersLoadResponse</name> |
<expression>OwnerUsersClass("serializable","pt.estgp.estgweb.domain.SurveyResponseImpl")</expression> |
<description>Owner of an object Control Chain</description> |
<invocationTiming>1</invocationTiming> |
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass> |
</filterChain> |
<filterChain> |
<name>CanEditSurvey</name> |
<expression>CanEditSurveyClass("serializable","pt.estgp.estgweb.domain.SurveyImpl")</expression> |
<description>Owner of an object Control Chain</description> |
<invocationTiming>1</invocationTiming> |
<filterClass>pt.estgp.estgweb.filters.chains.LoadControlFilter</filterClass> |
</filterChain> |
<!-- Duarte Santos --> |
/impl/src/java/jomm/dao/impl/AbstractDao.java |
---|
5,22 → 5,22 |
import jomm.dao.IDomainObjectDao; |
import jomm.dao.utils.HibernateUtils; |
import org.hibernate.*; |
import org.hibernate.proxy.HibernateProxy; |
import org.hibernate.criterion.CriteriaSpecification; |
import org.hibernate.criterion.Order; |
import org.hibernate.criterion.Projections; |
import static org.hibernate.criterion.Restrictions.eq; |
import org.hibernate.proxy.HibernateProxy; |
import pt.estgp.estgweb.domain.DomainObject; |
import pt.estgp.estgweb.domain.DomainSerializableObject; |
import pt.estgp.estgweb.domain.Teacher; |
import java.io.Serializable; |
import java.sql.SQLException; |
import java.util.Collection; |
import java.util.Date; |
import java.util.List; |
import java.util.Date; |
import static org.hibernate.criterion.Restrictions.eq; |
/** |
* This class will not be overwritten once it has been created. This is the |
* superclass of all DAOs. |
235,6 → 235,7 |
} |
} |
public List<CLAZZ> getAll() |
{ |
Session s = getCurrentSession(); |
/impl/src/java/pt/estgp/estgweb/utils/DatesUtils.java |
---|
1,15 → 1,13 |
package pt.estgp.estgweb.utils; |
import jomm.utils.MyCalendar; |
import pt.estgp.estgweb.Globals; |
import java.util.Date; |
import java.util.List; |
import java.util.ArrayList; |
import java.text.SimpleDateFormat; |
import java.text.MessageFormat; |
import java.text.SimpleDateFormat; |
import java.util.ArrayList; |
import java.util.List; |
import jomm.utils.MyCalendar; |
/** |
* @author Jorge Machado |
* @date 13/Jun/2008 |
32,7 → 30,7 |
int month = mc.getMonth(); |
MyCalendar firstYear; |
MyCalendar secondYear; |
if(month <= 8) |
if(month <= 9) |
{ |
firstYear = new MyCalendar(mc.getYear() - 1,1,1); |
secondYear = new MyCalendar(mc.getYear(),1,1); |
/impl/src/java/pt/estgp/estgweb/Globals.java |
---|
233,7 → 233,7 |
public static final boolean MODULE_STATUS_PROFILE = ConfigProperties.getBooleanProperty("module.profile"); |
public static final boolean MODULE_STATUS_COURSEUNITS = ConfigProperties.getBooleanProperty("module.courseunits"); |
public static final boolean MODULE_STATUS_SMS = ConfigProperties.getBooleanProperty("module.sms"); |
// Duarte Santos |
// Duarte Santos |
public static final boolean MODULE_STATUS_SURVEYS = ConfigProperties.getBooleanProperty("module.surveys"); |
// Duarte Santos |
public static final String SURVEY_TYPE_GENERAL = ConfigProperties.getProperty("surveys.type.0"); |
/impl/src/java/pt/estgp/estgweb/services/surveys/LoadNodeGraphsService.java |
---|
File deleted |
/impl/src/java/pt/estgp/estgweb/services/surveys/ConsistSurveyService.java |
---|
1,17 → 1,15 |
package pt.estgp.estgweb.services.surveys; |
import jomm.dao.impl.AbstractDao; |
import jomm.utils.MessageResources; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.domain.views.SurveyView; |
import pt.estgp.estgweb.utils.DatesUtils; |
import pt.estgp.estgweb.utils.RoleManager; |
import pt.estgp.estgweb.web.controllers.surveys.SurveysController; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.io.Serializable; |
import javax.servlet.http.HttpServletRequest; |
import java.util.ArrayList; |
import java.util.List; |
28,38 → 26,41 |
private static final int MAX_COMMIT = 100; |
private long surveyId; |
private HttpServletRequest request; |
public void consistService(long surveyId, UserSession userSession) |
public void consistSurveyService(long surveyId, HttpServletRequest request, UserSession userSession) |
{ |
if(surveyId <= 0) return; |
Survey survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
SurveyImpl survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
if(survey != null) |
{ |
this.surveyId = surveyId; |
survey.setStatusPercentage(0); |
survey.setStatus(SurveyStatusEnum.STATUS_CONSIST_SURVEY.getStatus()); |
ConsistSurveyService s = new ConsistSurveyService(); |
s.request = request; |
s.surveyId = surveyId; |
// start a thread |
Thread thread = new Thread(this); |
Thread thread = new Thread(s); |
thread.start(); |
logger.info("Starting thread with id: "+thread.getId()); |
} |
} |
private synchronized void consistPedagogic(Survey survey) |
private synchronized SurveyImpl consistPedagogic(SurveyImpl survey) |
{ |
String semester = survey.getSemester(); |
String semesterMsg = MessageResources.getMessage(request,"courseunit."+semester); |
String importYear = survey.getYear(); |
List<String> areas = DaoFactory.getCourseDaoImpl().loadAreas(); |
SurveyStructuralNode nodeYear = survey.getStructuralNode(); |
SurveyStructuralNode nodeSemester = ((SurveyStructuralNodeImpl)nodeYear).getChildNode(semester); |
SurveyStructuralNode nodeSemester = ((SurveyStructuralNodeImpl)nodeYear).getChildNode(semesterMsg); |
List<SurveyResponse> responses = new ArrayList<SurveyResponse>(); |
for(String area : areas) |
{ |
SurveyStructuralNode nodeArea = ((SurveyStructuralNodeImpl)nodeSemester).getChildNode(area); |
String areaMsg = MessageResources.getMessage(request,"area."+area); |
SurveyStructuralNode nodeArea = ((SurveyStructuralNodeImpl)nodeSemester).getChildNode(areaMsg); |
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllImportYearOrderByName(importYear,area); |
for(Course course : courses) |
{ |
71,9 → 72,13 |
List<User> users = new ArrayList<User>(); |
if(survey.getTargetRoles().equals(Globals.SURVEY_PEDAGOGIC_STUDENT_COURSEUNIT)) |
users.addAll(DaoFactory.getStudentDaoImpl().loadByCourseUnit(courseUnit.getId())); |
{ |
users = new ArrayList<User>(courseUnit.getStudents()); |
} |
else if(survey.getTargetRoles().equals(Globals.SURVEY_PEDAGOGIC_TEACHER_COURSEUNIT)) |
users.addAll(DaoFactory.getTeacherDaoImpl().loadByCourseUnit(courseUnit.getId())); |
{ |
users = new ArrayList<User>(courseUnit.getTeachers()); |
} |
for(User user: users) |
{ |
90,38 → 95,37 |
} |
} |
long i = 1; |
if(responses.size() == 0) |
{ |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
survey.setStatusPercentage(100); |
return survey; |
} |
long i = 0; |
int status; |
if(responses.size() > 0) |
for(SurveyResponse r : responses) |
{ |
for(SurveyResponse r : responses) |
long userId = r.getOwner().getId(); |
long nodeId = r.getStructuralNode().getId(); |
if(i++ % MAX_COMMIT == 0) |
{ |
if(i++ % MAX_COMMIT == 0) |
{ |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
survey = DaoFactory.getSurveyDaoImpl().load(survey.getId()); |
} |
DaoFactory.getSurveyResponseDaoImpl().save(r); |
status = (int)(((double)i/(double)responses.size())*100); |
if(status >= 100) |
{ |
status = 100; |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
} |
survey.setStatusPercentage(status); |
DaoFactory.getSurveyDaoImpl().saveOrUpdate(survey); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
} |
r.setOwner(DaoFactory.getUserDaoImpl().load(userId)); |
r.setStructuralNode(DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId)); |
DaoFactory.getSurveyResponseDaoImpl().save(r); |
} |
else |
{ |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
survey.setStatusPercentage(100); |
} |
survey.setStatusPercentage(100); |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
return survey; |
} |
private synchronized void consistGeneral(Survey survey) |
private synchronized SurveyImpl consistGeneral(SurveyImpl survey) |
{ |
List<String> roles = RoleManager.getRolesFromSerial(survey.getTargetRoles()); |
List<User> users = new ArrayList<User>(); |
149,35 → 153,35 |
} |
} |
if(responses.size() == 0) |
{ |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
survey.setStatusPercentage(100); |
return survey; |
} |
long i = 0; |
int status; |
if(responses.size() > 0) |
for(SurveyResponse r : responses) |
{ |
for(SurveyResponse r : responses) |
long userId = r.getOwner().getId(); |
long nodeId = r.getStructuralNode().getId(); |
if(i++ % MAX_COMMIT == 0) |
{ |
if(i++ % MAX_COMMIT == 0) |
{ |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
survey = DaoFactory.getSurveyDaoImpl().load(survey.getId()); |
} |
DaoFactory.getSurveyResponseDaoImpl().save(r); |
status = (int)(((double)i/(double)responses.size())*100); |
if(status >= 100) |
{ |
status = 100; |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
} |
survey.setStatusPercentage(status); |
DaoFactory.getSurveyDaoImpl().saveOrUpdate(survey); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
} |
r.setOwner(DaoFactory.getUserDaoImpl().load(userId)); |
r.setStructuralNode(DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId)); |
DaoFactory.getSurveyResponseDaoImpl().save(r); |
} |
else |
{ |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
survey.setStatusPercentage(100); |
} |
survey.setStatusPercentage(100); |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
return survey; |
} |
public void run() |
185,17 → 189,24 |
logger.info("Running thread..."); |
AbstractDao.getCurrentSession().beginTransaction(); |
Survey survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
SurveyImpl survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
survey.setStatusPercentage(0); |
survey.setStatus(SurveyStatusEnum.STATUS_CONSIST_SURVEY.getStatus()); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
if(((SurveyImpl)survey).isTypeOf(Globals.SURVEY_TYPE_GENERAL)) |
{ |
logger.info("Consisting general survey..."); |
consistGeneral(survey); |
survey = consistGeneral(survey); |
} |
else if(((SurveyImpl)survey).isTypeOf(Globals.SURVEY_TYPE_PEDAGOGIC)) |
{ |
logger.info("Consisting pedagogic survey..."); |
consistPedagogic(survey); |
survey = consistPedagogic(survey); |
} |
AbstractDao.getCurrentSession().getTransaction().commit(); |
/impl/src/java/pt/estgp/estgweb/services/surveys/GenerateSurveyStatsCsvService.java |
---|
42,9 → 42,12 |
String filename = Globals.TMP_DIR + "/survey_"+survey.getId()+".csv"; |
File file = new File(filename); |
FileOutputStream fout = new FileOutputStream(file); |
OutputStreamWriter writer = new OutputStreamWriter(fout, Charset.forName("UTF-8")); |
fout.write(239); |
fout.write(187); |
fout.write(191); |
OutputStreamWriter writer = new OutputStreamWriter(fout, "UTF-8"); |
String[] csvHeader = {"IDResposta","IDQuestionario","Titulo do Questionario","IDPergunta","Pergunta","IDItem","Item","IDCandidata","Candidata","Resposta de Texto","IDUtilizador","Utilizador","Nos"}; |
String[] csvHeader = {"IDResposta","IDQuestionário","Título do Questionário","IDPergunta","Pergunta","IDItem","Item","IDCandidata","Candidata","Resposta de Texto","IDUtilizador","Utilizador","Nós"}; |
writeCsvHeader(writer,csvHeader); |
List list = DaoFactory.getSurveyQuestionAnswerDaoImpl().loadForCsv(survey.getId()); |
82,11 → 85,13 |
String extension = FilesUtils.getExtension(filename); |
FileInputStream inputStream = new FileInputStream(file); |
String identifier = survey.getIdentifier(); |
if(identifier == null) |
identifier = repositoryService.storeRepositoryFile(inputStream,"text/comma-separated-values",extension,(int)file.length(),file.getName(),"CSV file of survey: "+survey.getId(), ResourceAccessControlEnum.surveyStatsDomain,userSession); |
else |
repositoryService.updateRepositoryFile(identifier,inputStream,"text/comma-separated-values",extension,(int)file.length(),file.getName(),"CSV file of survey: "+survey.getId(),ResourceAccessControlEnum.surveyStatsDomain); |
survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
survey.setIdentifier(identifier); |
boolean deleted = file.delete(); |
/impl/src/java/pt/estgp/estgweb/services/surveys/InsertSurveyAnswersService.java |
---|
22,7 → 22,7 |
private LoadSurveyService loadSurveyService = new LoadSurveyService(); |
public SurveyView run(SurveyView surveyView, long responseId, UserSession userSession) |
public SurveyView run(long responseId, SurveyView surveyView, UserSession userSession) |
{ |
SurveyResponse response = DaoFactory.getSurveyResponseDaoImpl().load(responseId); |
56,6 → 56,8 |
response.setDate(new Date()); |
response.setAnswered(true); |
logger.info("Answer inserted to survey with id: "+surveyView.getId()); |
return loadSurveyService.run(surveyView.getId(), userSession); |
} |
} |
/impl/src/java/pt/estgp/estgweb/services/surveys/CreateEditSurveyService.java |
---|
1,19 → 1,23 |
package pt.estgp.estgweb.services.surveys; |
import jomm.dao.impl.AbstractDao; |
import jomm.utils.MessageResources; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.impl.SurveyQuestionDaoImpl; |
import pt.estgp.estgweb.domain.views.*; |
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.domain.views.SurveyQuestionCandidateAnswerView; |
import pt.estgp.estgweb.domain.views.SurveyQuestionItemView; |
import pt.estgp.estgweb.domain.views.SurveyQuestionView; |
import pt.estgp.estgweb.domain.views.SurveyView; |
import pt.estgp.estgweb.utils.DatesUtils; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.utils.RoleManager; |
import pt.estgp.estgweb.utils.StringsUtils; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.util.*; |
import javax.servlet.http.HttpServletRequest; |
import java.util.ArrayList; |
import java.util.Date; |
import java.util.List; |
/** |
* @author: Duarte Santos |
28,15 → 32,12 |
private static final int MAX_COMMIT = 100; |
private long surveyId; |
private HttpServletRequest request; |
public SurveyView createEditSurveyService(SurveyView surveyView, UserSession userSession) throws AccessDeniedOperationException |
public SurveyView createEditSurveyService(SurveyView surveyView, HttpServletRequest request, UserSession userSession) |
{ |
// delete questions, items, candidates |
processDeletedObjects(surveyView); |
// Survey |
Survey s; |
SurveyImpl s; |
if(surveyView.getId() <= 0) |
{ |
s = DomainObjectFactory.createSurveyImpl(); |
50,13 → 51,15 |
s.setStatusPercentage(0); |
s.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
DaoFactory.getSurveyDaoImpl().save(s); |
logger.info("Creating survey: "+s.getId()); |
logger.info("Creating survey with id: "+s.getId()); |
} |
else |
{ |
// delete questions, items, candidates |
processDeletedObjects(surveyView); |
s = DaoFactory.getSurveyDaoImpl().load(surveyView.getId()); |
surveyView.persistViewInObject(s); |
logger.info("Updating survey: "+s.getId()); |
logger.info("Editing survey with id: "+s.getId()); |
} |
// SurveyQuestions |
74,7 → 77,6 |
{ |
q = DaoFactory.getSurveyQuestionDaoImpl().load(questionView.getId()); |
questionView.persistViewInObject(q); |
logger.info("Updating survey question: "+q.getId()); |
} |
// SurveyQuestionItems |
92,7 → 94,6 |
{ |
qi = DaoFactory.getSurveyQuestionItemDaoImpl().load(itemView.getId()); |
itemView.persistViewInObject(qi); |
logger.info("Updating survey question item: "+qi.getId()); |
} |
// SurveyQuestionCandidateAnswers |
110,29 → 111,29 |
{ |
ca = DaoFactory.getSurveyQuestionCandidateAnswerDaoImpl().load(candidateAnswerView.getId()); |
candidateAnswerView.persistViewInObject(ca); |
logger.info("Updating survey question item: " + ca.getId()); |
} |
} |
} |
} |
SurveyView view = new SurveyView(s); |
AbstractDao.getCurrentSession().flush(); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
// start a thread |
if(surveyView.getId() <= 0) |
{ |
Survey survey = DaoFactory.getSurveyDaoImpl().load(s.getId()); |
this.surveyId = survey.getId(); |
survey.setStatusPercentage(0); |
survey.setStatus(SurveyStatusEnum.STATUS_CREATE_SURVEY.getStatus()); |
CreateEditSurveyService service = new CreateEditSurveyService(); |
service.request = request; |
service.surveyId = s.getId(); |
Thread thread = new Thread(this); |
Thread thread = new Thread(service); |
thread.start(); |
logger.info("Starting thread with id: "+thread.getId()); |
} |
return surveyView; |
return view; |
} |
private void processDeletedObjects(SurveyView surveyView) |
178,21 → 179,23 |
} |
} |
private synchronized void createPedagogicResponses(Survey survey) |
private synchronized SurveyImpl createPedagogicResponses(SurveyImpl survey) |
{ |
String semester = survey.getSemester(); |
String semesterMsg = MessageResources.getMessage(request,"courseunit."+semester); |
String importYear = survey.getYear(); |
List<String> areas = DaoFactory.getCourseDaoImpl().loadAreas(); |
String semester = DatesUtils.getSemestre(); |
String importYear = DatesUtils.getImportYear(); |
SurveyStructuralNodeImpl nodeYear = createSurveyStructuralNodeTree(survey,importYear,null); |
survey.setStructuralNode(nodeYear); |
SurveyStructuralNodeImpl nodeSemester = createSurveyStructuralNodeTree(survey,semester,nodeYear); |
SurveyStructuralNodeImpl nodeSemester = createSurveyStructuralNodeTree(survey,semesterMsg,nodeYear); |
List<SurveyResponse> responses = new ArrayList<SurveyResponse>(); |
for(String area : areas) |
{ |
SurveyStructuralNodeImpl nodeArea = createSurveyStructuralNodeTree(survey,area,nodeSemester); |
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllImportYearOrderByName(DatesUtils.getImportYear(),area); |
String areaMsg = MessageResources.getMessage(request,"area."+area); |
SurveyStructuralNodeImpl nodeArea = createSurveyStructuralNodeTree(survey,areaMsg,nodeSemester); |
List<Course> courses = DaoFactory.getCourseDaoImpl().findAllImportYearOrderByName(importYear,area); |
for(Course course : courses) |
{ |
SurveyStructuralNodeImpl nodeCourse = createSurveyStructuralNodeTree(survey,course.getName(),nodeArea); |
203,9 → 206,13 |
List<User> users = new ArrayList<User>(); |
if(survey.getTargetRoles().equals(Globals.SURVEY_PEDAGOGIC_STUDENT_COURSEUNIT)) |
users.addAll(DaoFactory.getStudentDaoImpl().loadByCourseUnit(courseUnit.getId())); |
{ |
users = new ArrayList<User>(courseUnit.getStudents()); |
} |
else if(survey.getTargetRoles().equals(Globals.SURVEY_PEDAGOGIC_TEACHER_COURSEUNIT)) |
users.addAll(DaoFactory.getTeacherDaoImpl().loadByCourseUnit(courseUnit.getId())); |
{ |
users = new ArrayList<User>(courseUnit.getTeachers()); |
} |
for(User user : users) |
{ |
219,50 → 226,56 |
} |
} |
long i = 1; |
if(responses.size() == 0) |
{ |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
survey.setStatusPercentage(100); |
return survey; |
} |
long i = 0; |
int status; |
if(responses.size() > 0) |
for(SurveyResponse r : responses) |
{ |
for(SurveyResponse r : responses) |
long userId = r.getOwner().getId(); |
long nodeId = r.getStructuralNode().getId(); |
if (i++ % MAX_COMMIT == 0) |
{ |
if (i++ % MAX_COMMIT == 0) |
{ |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
survey = DaoFactory.getSurveyDaoImpl().load(survey.getId()); |
} |
DaoFactory.getSurveyResponseDaoImpl().save(r); |
status = (int)(((double)i/(double)responses.size())*100); |
if(status >= 100) |
{ |
status = 100; |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
} |
survey.setStatusPercentage(status); |
DaoFactory.getSurveyDaoImpl().saveOrUpdate(survey); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
} |
r.setOwner(DaoFactory.getUserDaoImpl().load(userId)); |
r.setStructuralNode(DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId)); |
DaoFactory.getSurveyResponseDaoImpl().save(r); |
} |
survey.setStatusPercentage(100); |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
return survey; |
} |
private synchronized void createGeneralResponses(Survey survey) |
private synchronized SurveyImpl createGeneralResponses(SurveyImpl survey) |
{ |
String importYear = survey.getYear(); |
String semester = survey.getSemester(); |
String semesterMsg = MessageResources.getMessage(request,"courseunit."+semester); |
List<String> roles = RoleManager.getRolesFromSerial(survey.getTargetRoles()); |
List<User> users = new ArrayList<User>(); |
SurveyStructuralNodeImpl nodeYear = createSurveyStructuralNodeTree(survey,importYear,null); |
survey.setStructuralNode(nodeYear); |
SurveyStructuralNodeImpl nodeSemester = createSurveyStructuralNodeTree(survey,semesterMsg,nodeYear); |
SurveyStructuralNodeImpl nodeGeneral = createSurveyStructuralNodeTree(survey,survey.getTitle(),nodeSemester); |
if(roles.size() == 1 && roles.get(0).equals("all")) |
users.addAll(DaoFactory.getUserDaoImpl().getAll()); |
else |
users.addAll(DaoFactory.getUserDaoImpl().loadRolesUsers(roles)); |
String importYear = DatesUtils.getImportYear(); |
String semester = DatesUtils.getSemestre(); |
SurveyStructuralNodeImpl nodeYear = createSurveyStructuralNodeTree(survey,importYear,null); |
survey.setStructuralNode(nodeYear); |
SurveyStructuralNodeImpl nodeSemester = createSurveyStructuralNodeTree(survey,semester,nodeYear); |
SurveyStructuralNodeImpl nodeGeneral = createSurveyStructuralNodeTree(survey,survey.getTitle(),nodeSemester); |
List<SurveyResponse> responses = new ArrayList<SurveyResponse>(); |
for(User user : users) |
{ |
273,30 → 286,36 |
responses.add(sr); |
} |
long i = 1; |
if(responses.size() == 0) |
{ |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
survey.setStatusPercentage(100); |
return survey; |
} |
long i = 0; |
int status; |
if(responses.size() > 0) |
for(SurveyResponse r : responses) |
{ |
for(SurveyResponse r : responses) |
long userId = r.getOwner().getId(); |
long nodeId = r.getStructuralNode().getId(); |
if (i++ % MAX_COMMIT == 0) |
{ |
if (i++ % MAX_COMMIT == 0) |
{ |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
survey = DaoFactory.getSurveyDaoImpl().load(survey.getId()); |
} |
DaoFactory.getSurveyResponseDaoImpl().save(r); |
status = (int)(((double)i/(double)responses.size())*100); |
if(status >= 100) |
{ |
status = 100; |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
} |
survey.setStatusPercentage(status); |
DaoFactory.getSurveyDaoImpl().saveOrUpdate(survey); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
} |
r.setOwner(DaoFactory.getUserDaoImpl().load(userId)); |
r.setStructuralNode(DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId)); |
DaoFactory.getSurveyResponseDaoImpl().save(r); |
} |
survey.setStatusPercentage(100); |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
return survey; |
} |
private synchronized SurveyStructuralNodeImpl createSurveyStructuralNodeTree(Survey survey, String msg, SurveyStructuralNodeImpl parent) |
319,17 → 338,26 |
logger.info("Running thread..."); |
AbstractDao.getCurrentSession().beginTransaction(); |
Survey survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
logger.info("Loading survey with id: "+surveyId); |
SurveyImpl survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
if(((SurveyImpl)survey).isTypeOf(Globals.SURVEY_TYPE_GENERAL)) |
survey.setStatusPercentage(0); |
survey.setStatus(SurveyStatusEnum.STATUS_CREATE_SURVEY.getStatus()); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
if(survey.isTypeOf(Globals.SURVEY_TYPE_GENERAL)) |
{ |
logger.info("Creating general responses..."); |
createGeneralResponses(survey); |
survey = createGeneralResponses(survey); |
} |
else if(((SurveyImpl)survey).isTypeOf(Globals.SURVEY_TYPE_PEDAGOGIC)) |
else if(survey.isTypeOf(Globals.SURVEY_TYPE_PEDAGOGIC)) |
{ |
logger.info("Creating pedagogic responses..."); |
createPedagogicResponses(survey); |
survey = createPedagogicResponses(survey); |
} |
AbstractDao.getCurrentSession().getTransaction().commit(); |
/impl/src/java/pt/estgp/estgweb/services/surveys/GenerateSurveyStatsService.java |
---|
7,11 → 7,15 |
import org.jfree.chart.ChartFactory; |
import org.jfree.chart.ChartUtilities; |
import org.jfree.chart.JFreeChart; |
import org.jfree.chart.axis.NumberAxis; |
import org.jfree.chart.LegendItemCollection; |
import org.jfree.chart.axis.*; |
import org.jfree.chart.plot.CategoryPlot; |
import org.jfree.chart.plot.PlotOrientation; |
import org.jfree.data.category.CategoryDataset; |
import org.jfree.data.category.DefaultCategoryDataset; |
import org.jfree.text.TextBlockAnchor; |
import org.jfree.ui.RectangleAnchor; |
import org.jfree.ui.TextAnchor; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
22,6 → 26,7 |
import pt.estgp.estgweb.utils.ConfigProperties; |
import javax.servlet.http.HttpServletRequest; |
import java.awt.*; |
import java.io.*; |
import java.util.ArrayList; |
import java.util.List; |
43,27 → 48,26 |
private HttpServletRequest request; |
private UserSession userSession; |
public void generateStatsService(HttpServletRequest request, long surveyId, UserSession userSession) |
public void generateStatsService(long surveyId, HttpServletRequest request, UserSession userSession) |
{ |
if(surveyId <= 0) return; |
Survey survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
SurveyImpl survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
if(survey != null) |
{ |
this.surveyId = surveyId; |
this.request = request; |
this.userSession = userSession; |
survey.setStatusPercentage(0); |
survey.setStatus(SurveyStatusEnum.STATUS_GENERATE_STATS.getStatus()); |
GenerateSurveyStatsService s = new GenerateSurveyStatsService(); |
s.request = request; |
s.surveyId = surveyId; |
s.userSession = userSession; |
// start a thread |
Thread thread = new Thread(this); |
Thread thread = new Thread(s); |
thread.start(); |
logger.info("Starting thread with id: "+thread.getId()); |
} |
} |
private synchronized SurveyStatsGraphic buildChart(HttpServletRequest request, SurveyQuestion q, SurveyStructuralNode node, UserSession userSession, boolean withCategories) |
private synchronized JFreeChart buildChart(HttpServletRequest request, SurveyQuestion q, SurveyStructuralNode node, UserSession userSession, boolean withCategories) |
{ |
// get counted values and labels |
List<Integer> countedValues = new ArrayList<Integer>(); |
98,29 → 102,18 |
CategoryDataset dataset = buildCategoryDataset(categories,series,values); |
JFreeChart chart = buildJFreeChart(q.getLabelpt(),domainAxisLabel,MessageResources.getMessage(request,"survey.stats.graph.axis.range.label"),dataset,orientation); |
// store on repository |
String filename = "/survey_"+q.getSurvey().getId()+"_question_"+q.getId()+"_node_"+node.getId()+".png"; |
SurveyStatsGraphic graph = DaoFactory.getSurveyStatsGraphicDaoImpl().load(q.getId(), node.getId()); |
String identifier; |
if(graph == null) |
{ |
identifier = storeChartRepository(chart,filename,"descricao",null,userSession); |
if(identifier != null) |
{ |
graph = DomainObjectFactory.createSurveyStatsGraphicImpl(); |
graph.setQuestion(q); |
graph.setStructuralNode(node); |
graph.setIdentifier(identifier); |
} |
} |
else |
{ |
identifier = graph.getIdentifier(); |
storeChartRepository(chart,filename,"descricao",identifier,userSession); |
graph = null; |
} |
// chart configs |
final CategoryPlot plot = chart.getCategoryPlot(); |
final ValueAxis valueAxis = plot.getRangeAxis(); |
final CategoryAxis categoryAxis = plot.getDomainAxis(); |
final CategoryLabelPositions positions = categoryAxis.getCategoryLabelPositions(); |
Font font = new Font("Tahoma",Font.PLAIN, 11); |
categoryAxis.setMaximumCategoryLabelLines(3); |
categoryAxis.setTickLabelFont(font); |
CategoryLabelPosition right = new CategoryLabelPosition(RectangleAnchor.RIGHT, TextBlockAnchor.CENTER_RIGHT); |
categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.replaceRightPosition(positions, right)); |
return graph; |
return chart; |
} |
public synchronized String storeChartRepository(JFreeChart chart, String filename, String description, String identifier, UserSession userSession) |
187,50 → 180,79 |
logger.info("Running thread..."); |
AbstractDao.getCurrentSession().beginTransaction(); |
Survey survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
SurveyImpl survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
survey.setStatusPercentage(0); |
survey.setStatus(SurveyStatusEnum.STATUS_GENERATE_STATS.getStatus()); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
GenerateSurveyStatsCsvService service = new GenerateSurveyStatsCsvService(); |
service.run(surveyId,userSession); |
List<SurveyStructuralNode> childNodes = ((SurveyStructuralNodeImpl)survey.getStructuralNode()).getChildsStructuralNodes(); |
List<SurveyStatsGraphic> graphics = new ArrayList<SurveyStatsGraphic>(); |
long total = childNodes.size() * survey.getQuestions().size(); |
long i = 0; |
int status; |
for(SurveyStructuralNode node : childNodes) |
{ |
for(SurveyQuestion question : survey.getQuestions()) |
{ |
SurveyStatsGraphic graph = null; |
if(question.getType().equals(Globals.SURVEY_QUESTION_TYPE_MATRIX)) |
graph = buildChart(request, question, node, userSession, true); |
else if(question.getType().equals(Globals.SURVEY_QUESTION_TYPE_CHECK) || question.getType().equals(Globals.SURVEY_QUESTION_TYPE_RADIO)) |
graph = buildChart(request, question, node, userSession, false); |
long nodeId = node.getId(); |
long questionId = question.getId(); |
if(graph != null) |
graphics.add(graph); |
} |
} |
long i = 0; |
int status; |
if(graphics.size() > 0) |
{ |
for(SurveyStatsGraphic g : graphics) |
{ |
if (i++ % MAX_COMMIT == 0) |
{ |
status = (int)(((double)i/(double)total)*100); |
survey.setStatusPercentage(status); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
AbstractDao.getCurrentSession().beginTransaction(); |
survey = DaoFactory.getSurveyDaoImpl().load(survey.getId()); |
survey = DaoFactory.getSurveyDaoImpl().load(surveyId); |
} |
DaoFactory.getSurveyStatsGraphicDaoImpl().save(g); |
node = DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId); |
question = DaoFactory.getSurveyQuestionDaoImpl().load(questionId); |
status = (int)(((double)i/(double)graphics.size())*100); |
if(status >= 100) |
JFreeChart chart = null; |
if(question.getType().equals(Globals.SURVEY_QUESTION_TYPE_MATRIX)) |
chart = buildChart(request, question, node, userSession, true); |
else if(question.getType().equals(Globals.SURVEY_QUESTION_TYPE_CHECK) || question.getType().equals(Globals.SURVEY_QUESTION_TYPE_RADIO)) |
chart = buildChart(request, question, node, userSession, false); |
if(chart != null) |
{ |
status = 100; |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
node = DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId); |
question = DaoFactory.getSurveyQuestionDaoImpl().load(questionId); |
String identifier; |
String filename = "/survey_"+surveyId+"_question_"+question.getId()+"_node_"+node.getId()+".png"; |
SurveyStatsGraphic graph = DaoFactory.getSurveyStatsGraphicDaoImpl().load(question.getId(),node.getId()); |
if(graph == null) |
{ |
identifier = storeChartRepository(chart,filename,"descricao",null,userSession); |
if(identifier != null) |
{ |
graph = DomainObjectFactory.createSurveyStatsGraphicImpl(); |
graph.setQuestion(question); |
graph.setStructuralNode(node); |
graph.setIdentifier(identifier); |
DaoFactory.getSurveyStatsGraphicDaoImpl().save(graph); |
} |
} |
else |
{ |
identifier = graph.getIdentifier(); |
storeChartRepository(chart,filename,"descricao",identifier,userSession); |
} |
} |
survey.setStatusPercentage(status); |
DaoFactory.getSurveyDaoImpl().saveOrUpdate(survey); |
} |
} |
survey.setStatusPercentage(100); |
survey.setStatus(SurveyStatusEnum.STATUS_STOPPED.getStatus()); |
AbstractDao.getCurrentSession().getTransaction().commit(); |
logger.info("End of thread..."); |
} |
/impl/src/java/pt/estgp/estgweb/services/surveys/LoadConsultStatsSurveysService.java |
---|
New file |
0,0 → 1,34 |
package pt.estgp.estgweb.services.surveys; |
import pt.estgp.estgweb.domain.Survey; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.domain.views.SurveyView; |
import pt.estgp.estgweb.utils.RoleManager; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.util.ArrayList; |
import java.util.List; |
/** |
* @author: Duarte Santos |
* @date: 17-08-2011 |
* @time: 0:53 |
* @email: a12564 [at] estgp [dot] pt |
*/ |
public class LoadConsultStatsSurveysService implements IService |
{ |
public List<SurveyView> run(UserSession userSession) |
{ |
List<Survey> surveys = DaoFactory.getSurveyDaoImpl().loadAllSurveys(); |
List<SurveyView> surveyViews = new ArrayList<SurveyView>(); |
for(Survey s : surveys) |
{ |
List<String> statsConsultRolesList = RoleManager.getRolesFromSerial(s.getStatsConsultRoles()); |
if(s.isOwnedBy(userSession.getUser()) || statsConsultRolesList.contains("all") || userSession.getUser().hasRole(statsConsultRolesList) || userSession.getUser().isSuperuserOrAdmin()) |
surveyViews.add(new SurveyView(s)); |
} |
return surveyViews; |
} |
} |
/impl/src/java/pt/estgp/estgweb/services/surveys/LoadSurveyNodeGraphsService.java |
---|
New file |
0,0 → 1,44 |
package pt.estgp.estgweb.services.surveys; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.domain.SurveyStatsGraphic; |
import pt.estgp.estgweb.domain.SurveyStructuralNode; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.domain.views.SurveyStatsGraphicView; |
import pt.estgp.estgweb.domain.views.SurveyStructuralNodeView; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.util.ArrayList; |
import java.util.List; |
/** |
* @author: Duarte Santos |
* @date: 13-08-2011 |
* @time: 1:43 |
* @email: a12564 [at] estgp [dot] pt |
*/ |
public class LoadSurveyNodeGraphsService implements IService |
{ |
private static final Logger logger = Logger.getLogger(LoadSurveyNodeGraphsService.class); |
public List<SurveyStatsGraphicView> run(long surveyId, long nodeId, UserSession userSession) |
{ |
SurveyStructuralNode node = DaoFactory.getSurveyStructuralNodeDaoImpl().load(nodeId); |
if(node != null) |
{ |
List<SurveyStatsGraphicView> surveyStatsGraphicViews = new ArrayList<SurveyStatsGraphicView>(); |
for(SurveyStatsGraphic g : node.getGraphics()) |
{ |
SurveyStructuralNodeView nodeView = new SurveyStructuralNodeView(g.getStructuralNode()); |
SurveyStatsGraphicView surveyStatsGraphicView = new SurveyStatsGraphicView(g); |
surveyStatsGraphicView.setStructuralNodeView(nodeView); |
surveyStatsGraphicViews.add(surveyStatsGraphicView); |
} |
return surveyStatsGraphicViews; |
} |
return null; |
} |
} |
/impl/src/java/pt/estgp/estgweb/services/surveys/SurveysCommonServices.java |
---|
1,17 → 1,13 |
package pt.estgp.estgweb.services.surveys; |
import jomm.dao.impl.AbstractDao; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.domain.DomainObject; |
import pt.estgp.estgweb.domain.SurveyResponseImpl; |
import pt.estgp.estgweb.domain.SurveyStructuralNode; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.domain.views.SurveyResponseView; |
import pt.estgp.estgweb.domain.views.SurveyStructuralNodeView; |
import pt.estgp.estgweb.services.common.*; |
import pt.estgp.estgweb.services.common.impl.DefaultToDo; |
import pt.estgp.estgweb.web.UserSessionProxy; |
import pt.estgp.estgweb.Globals; |
import pt.utl.ist.berserk.logic.serviceManager.IService; |
import java.util.ArrayList; |
54,14 → 50,17 |
public List<IToDo> getAllToDos(UserSession userSession) |
{ |
List<IToDo> todos = new ArrayList<IToDo>(); |
List<SurveyResponseImpl> surveyResponses = DaoFactory.getSurveyResponseDaoImpl().loadByUserId(userSession.getUser().getId()); |
for(SurveyResponseImpl sr: surveyResponses) |
{ |
String surveyOwner = sr.getStructuralNode().getSurvey().getOwner().getUsername(); |
DefaultToDo defaultToDo = new DefaultToDo(sr.getStructuralNode().getMsg(),null,surveyOwner,"survey.type.todo","/user/startSurveyResponseFromHome.do?resp="+sr.getId()); |
todos.add(defaultToDo); |
List<IToDo> todos = new ArrayList<IToDo>(); |
if(Globals.MODULE_STATUS_SURVEYS){ |
List<SurveyResponseImpl> surveyResponses = DaoFactory.getSurveyResponseDaoImpl().loadByUserId(userSession.getUser().getId()); |
for(SurveyResponseImpl sr: surveyResponses) |
{ |
String surveyOwner = sr.getStructuralNode().getSurvey().getOwner().getUsername(); |
DefaultToDo defaultToDo = new DefaultToDo(sr.getStructuralNode().getMsg(),null,surveyOwner,"survey.type.todo","/user/startSurveyResponseFromHome.do?resp="+sr.getId()); |
todos.add(defaultToDo); |
} |
} |
return todos; |
/impl/src/java/pt/estgp/estgweb/services/surveys/LoadSurveyService.java |
---|
29,14 → 29,18 |
public SurveyView run(long surveyId, UserSession userSession) |
{ |
Survey s = DaoFactory.getSurveyDaoImpl().get(surveyId); |
logger.info("Loading survey with id: "+s.getId()+" and structuralNode: "+s.getStructuralNode().getId()); |
long nrOfResponsesAnswered = DaoFactory.getSurveyResponseDaoImpl().countResponses(s.getId(),true); |
long nrTotalOfResponses = DaoFactory.getSurveyResponseDaoImpl().countResponses(s.getId(),null); |
if(s == null) return null; |
long answered = DaoFactory.getSurveyResponseDaoImpl().countResponses(s.getId(),true); |
long total = DaoFactory.getSurveyResponseDaoImpl().countResponses(s.getId(),null); |
SurveyStructuralNodeView surveyStructuralNodeView = new SurveyStructuralNodeView(s.getStructuralNode()); |
SurveyView surveyView = new SurveyView(s); |
surveyView.setStructuralNodeView(surveyStructuralNodeView); |
surveyView.setNumberOfResponses(nrOfResponsesAnswered); |
surveyView.setNumberTotalOfResponses(nrTotalOfResponses); |
surveyView.setNumberOfResponses(answered); |
surveyView.setNumberTotalOfResponses(total); |
return surveyView; |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/SurveyImpl.java |
---|
1,6 → 1,8 |
package pt.estgp.estgweb.domain; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.utils.RoleManager; |
import java.io.Serializable; |
import java.util.List; |
12,7 → 14,7 |
* @email: a12564 [at] estgp [dot] pt |
*/ |
public class SurveyImpl extends Survey implements IOwned |
public class SurveyImpl extends Survey implements IOwned, IConsultSurveyStats, IEdit |
{ |
private static final Logger logger = Logger.getLogger(SurveyImpl.class); |
54,4 → 56,47 |
{ |
return (getType().equals(type)); |
} |
public boolean canConsultSurveyStats(GenericUserImpl u) |
{ |
return canConsultStats(u,false); |
} |
public boolean canConsultSurveyStats(GenericUserImpl u, boolean transaction) |
{ |
return canConsultStats(u,transaction); |
} |
public boolean canConsultStats(GenericUserImpl user, boolean transaction) |
{ |
return RoleManager.hasRole(getStatsConsultRolesList(), Globals.ALL_ROLE) || (user != null && (user.hasRole(getStatsConsultRoles()) || user.isSuperuserOrAdmin())) || isOwnedBy(user,transaction); |
} |
public List<String> getStatsConsultRolesList() |
{ |
return RoleManager.getRolesFromSerial(getStatsConsultRoles()); |
} |
public boolean canEdit(GenericUserImpl u) |
{ |
return canEditSurvey(u,false); |
} |
public boolean canEdit(GenericUserImpl u,boolean transaction) |
{ |
return canEditSurvey(u,true); |
} |
private boolean canEditSurvey(GenericUserImpl user, boolean transaction) |
{ |
List<SurveyStructuralNode> childNodes = ((SurveyStructuralNodeImpl)getStructuralNode()).getChildsStructuralNodes(); |
for(SurveyStructuralNode node : childNodes) |
{ |
for(SurveyResponse response : node.getResponses()) |
{ |
return response.getAnswers().size() > 0 && user != null && (user.isSuperuserOrAdmin() || isOwnedBy(user,transaction)); |
} |
} |
return false; |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/IConsultSurveyStats.java |
---|
New file |
0,0 → 1,14 |
package pt.estgp.estgweb.domain; |
/** |
* @author: Duarte Santos |
* @date: 16-08-2011 |
* @time: 20:19 |
* @email: a12564 [at] estgp [dot] pt |
*/ |
public interface IConsultSurveyStats |
{ |
public boolean canConsultSurveyStats(GenericUserImpl u); |
public boolean canConsultSurveyStats(GenericUserImpl u, boolean transaction); |
} |
/impl/src/java/pt/estgp/estgweb/domain/SurveyResponseImpl.java |
---|
12,11 → 12,30 |
* @email: a12564 [at] estgp [dot] pt |
*/ |
public class SurveyResponseImpl extends SurveyResponse |
public class SurveyResponseImpl extends SurveyResponse implements IOwned |
{ |
private static final Logger logger = Logger.getLogger(SurveyResponseImpl.class); |
@Override |
public boolean isOwnedBy(GenericUser u) |
{ |
return isOwnedBy(u,false); |
} |
@Override |
public boolean isOwnedBy(GenericUser u, boolean transaction) |
{ |
return u.getId() == getOwner().getId(); |
} |
@Override |
public GenericUser getOwner() |
{ |
return super.getOwner(); |
} |
@Override |
public List<String> getOwnerRoles() { |
logger.warn("Invoke not implemented method in class:" + getClass().getName()); |
return null; |
31,4 → 50,6 |
public Serializable getSerializable() { |
return getId(); |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/views/SurveyStatsGraphicView.java |
---|
19,6 → 19,7 |
private long id; |
private String identifier; |
private SurveyStructuralNodeView structuralNodeView; |
public SurveyStatsGraphicView() |
{} |
51,6 → 52,14 |
this.identifier = identifier; |
} |
public SurveyStructuralNodeView getStructuralNodeView() { |
return structuralNodeView; |
} |
public void setStructuralNodeView(SurveyStructuralNodeView structuralNodeView) { |
this.structuralNodeView = structuralNodeView; |
} |
@Override |
public Class getReferenceClass() { |
return SurveyStatsGraphicImpl.class; |
/impl/src/java/pt/estgp/estgweb/domain/views/SurveyStructuralNodeView.java |
---|
185,4 → 185,21 |
getChildsStructuralNodesViewRecursive(nodesList, this); |
return nodesList; |
} |
private boolean isRelativeParentOfRecursive(SurveyStructuralNodeView node, long nodeId) |
{ |
if(node.getId() == nodeId) |
return true; |
for(SurveyStructuralNodeView n : node.getNodes()) |
{ |
if(isRelativeParentOfRecursive(n,nodeId)) |
return true; |
} |
return false; |
} |
public boolean isRelativeParentOf(long nodeId) |
{ |
return isRelativeParentOfRecursive(this,nodeId); |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/views/SurveyView.java |
---|
3,6 → 3,7 |
import jomm.dao.impl.AbstractDao; |
import jomm.utils.StringsUtils; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.services.surveys.SurveyStatusEnum; |
import pt.estgp.estgweb.utils.ConfigProperties; |
308,6 → 309,11 |
return (now.getTime() - this.updateDate.getTime() > EXPIRE_TIME); |
} |
public boolean isPedagogic() |
{ |
return (this.getType().equals(Globals.SURVEY_TYPE_PEDAGOGIC)); |
} |
public List<String> getOwnerRoles() |
{ |
logger.warn("Invoke not implemented method in class:" + getClass().getName()); |
/impl/src/java/pt/estgp/estgweb/domain/DomainObjectFactory.java |
---|
209,8 → 209,8 |
return new SruSourceCollectionImpl(); |
} |
// Duarte Santos |
public static Survey createSurveyImpl() |
// Duarte Santos |
public static SurveyImpl createSurveyImpl() |
{ |
return new SurveyImpl(); |
} |
/impl/src/java/pt/estgp/estgweb/domain/IEdit.java |
---|
New file |
0,0 → 1,14 |
package pt.estgp.estgweb.domain; |
/** |
* @author: Duarte Santos |
* @date: 16-08-2011 |
* @time: 22:50 |
* @email: a12564 [at] estgp [dot] pt |
*/ |
public interface IEdit |
{ |
public boolean canEdit(GenericUserImpl u); |
public boolean canEdit(GenericUserImpl u, boolean transaction); |
} |
/impl/src/java/pt/estgp/estgweb/domain/UserImpl.java |
---|
101,17 → 101,7 |
return false; |
} |
// Duarte Santos |
public boolean haveResponse(Survey s, String msg) |
{ |
for(SurveyResponse r : getMySurveyResponses()) |
{ |
if(r.getStructuralNode().getSurvey() == s && r.getStructuralNode().getMsg().equals(msg)) |
return true; |
} |
return false; |
} |
// Duarte Santos |
public boolean haveResponse(Survey s, SurveyStructuralNode node) |
{ |
for(SurveyResponse r : getMySurveyResponses()) |
121,5 → 111,4 |
} |
return false; |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/SurveyStructuralNodeDaoImpl.java |
---|
29,6 → 29,14 |
return (SurveyStructuralNodeDaoImpl) myInstance; |
} |
public SurveyStructuralNode loadByRepositoryId(String identifier) |
{ |
return (SurveyStructuralNode) createCriteria() |
.createAlias("graphics","g") |
.add(eq("g.identifier",identifier)) |
.uniqueResult(); |
} |
public SurveyStructuralNode findBySurvey(long surveyId) |
{ |
return (SurveyStructuralNode) createCriteria().add(eq("survey.id",surveyId)).add(isNull("parentNode")).uniqueResult(); |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/SurveyDaoImpl.java |
---|
1,7 → 1,9 |
package pt.estgp.estgweb.domain.dao.impl; |
import jomm.dao.impl.AbstractDao; |
import org.apache.log4j.Logger; |
import org.hibernate.Criteria; |
import org.hibernate.criterion.Criterion; |
import org.hibernate.criterion.Order; |
import pt.estgp.estgweb.domain.Survey; |
import pt.estgp.estgweb.domain.SurveyImpl; |
16,15 → 18,17 |
* @email: a12564 [at] estgp [dot] pt |
*/ |
public class SurveyDaoImpl extends SurveyDao |
public class SurveyDaoImpl extends AbstractDao<SurveyImpl> |
{ |
private static final Logger logger = Logger.getLogger(SurveyDaoImpl.class); |
protected static SurveyDaoImpl myInstance = null; |
public static SurveyDaoImpl getInstance() |
{ |
if(myInstance == null) |
myInstance = new SurveyDaoImpl(); |
return (SurveyDaoImpl) myInstance; |
return myInstance; |
} |
public List<Survey> loadAllSurveys() |
43,4 → 47,9 |
.add(eq("identifier",identifier)) |
.uniqueResult(); |
} |
@Override |
protected Class getReferenceClass() { |
return SurveyImpl.class; |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseDaoImpl.java |
---|
1,19 → 1,22 |
package pt.estgp.estgweb.domain.dao.impl; |
import static org.hibernate.criterion.Restrictions.*; |
import org.hibernate.criterion.*; |
import org.hibernate.Criteria; |
import org.hibernate.Query; |
import org.hibernate.criterion.Criterion; |
import org.hibernate.criterion.Expression; |
import org.hibernate.criterion.Order; |
import org.hibernate.criterion.Projections; |
import pt.estgp.estgweb.domain.Course; |
import pt.estgp.estgweb.domain.CourseImpl; |
import pt.estgp.estgweb.domain.CourseUnit; |
import pt.estgp.estgweb.domain.dao.DaoUtils; |
import pt.estgp.estgweb.services.common.SearchTypeEnum; |
import pt.estgp.estgweb.utils.DatesUtils; |
import pt.estgp.estgweb.services.common.SearchTypeEnum; |
import java.util.List; |
import static org.hibernate.criterion.Restrictions.eq; |
/** |
* @author Jorge Machado |
* @date 28/Fev/2008 |
87,7 → 90,7 |
public List<Course> findAllOrderByName(String importYear) |
{ |
return createCriteria() |
.add(eq("importYear", importYear)) |
.add(eq("cu.importYear", importYear)) |
.addOrder(Order.asc("name")) |
.list(); |
} |
95,8 → 98,13 |
public List<Course> findAllOrderByName(String importYear, String area, String type) |
{ |
Criteria c = createCriteria(); |
/* c.setProjection(Projections.projectionList() |
.add(Projections.distinct(Projections.id())));*/ |
c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); |
c.createAlias("courseUnits","cu"); |
if (importYear != null && importYear.length() > 0) |
c.add(eq("importYear", importYear)); |
c.add(eq("cu.importYear", importYear)); |
if (area != null && area.length() > 0) |
c.add(eq("area", area)); |
if (type != null && type.length() > 0) |
109,7 → 117,7 |
public List<String> loadImportYears() |
{ |
Query q = createQuery("select distinct c.importYear from c in class " + Course.class.getName() + " order by c.importYear desc"); |
Query q = createQuery("select distinct c.importYear from c in class " + CourseUnit.class.getName() + " order by c.importYear desc"); |
return q.list(); |
} |
145,7 → 153,7 |
.list(); |
} |
// Duarte Santos |
// Duarte Santos |
public List<String> loadAreas() |
{ |
return |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/SurveyQuestionAnswerDaoImpl.java |
---|
62,8 → 62,7 |
.addOrder(Order.asc("qca.id")) |
.addOrder(Order.asc("qi.id")) |
.addOrder(Order.asc("q.id")) |
.addOrder(Order.asc("s.id")) |
.addOrder(Order.asc("r.id")); |
.addOrder(Order.asc("s.id")); |
return c.list(); |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/UserDaoImpl.java |
---|
5,10 → 5,8 |
import org.apache.log4j.Logger; |
import org.hibernate.Criteria; |
import org.hibernate.HibernateException; |
import org.hibernate.criterion.CriteriaSpecification; |
import org.hibernate.criterion.Criterion; |
import org.hibernate.criterion.Order; |
import static org.hibernate.criterion.Restrictions.*; |
import pt.estgp.estgweb.domain.User; |
import pt.estgp.estgweb.domain.dao.DaoUtils; |
import pt.estgp.estgweb.services.common.SearchTypeEnum; |
17,6 → 15,8 |
import java.util.Date; |
import java.util.List; |
import static org.hibernate.criterion.Restrictions.*; |
/** |
* @author Jorge Machado |
* @date 28/Fev/2008 |
216,8 → 216,8 |
{ |
return (User) createCriteria().add(or(eq("sigesCode",sigesCode),eq("username","a" + sigesCode))).uniqueResult(); |
} |
// Duarte Santos |
// Duarte Santos |
public List<User> loadRolesUsers(List<String> roles) |
{ |
Criteria criteria = createCriteria(); |
233,25 → 233,4 |
criteria.add(co); |
return criteria.list(); |
} |
public int countUsersWithoutResponse(List<String> roles) |
{ |
Criteria criteria = createCriteria(); |
if(roles != null) |
{ |
Criterion co = null; |
for (String role : roles) |
{ |
Criterion cor = like("roles", "%" + role + "%"); |
if (co == null) |
co = cor; |
else |
co = or(co, cor); |
} |
criteria.add(co); |
} |
criteria.createAlias("mySurveyResponses","sr", CriteriaSpecification.LEFT_JOIN) |
.add(isNull("sr.id")); |
return criteria.list().size(); |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/dao/DaoFactory.java |
---|
199,7 → 199,7 |
return SruSourceCollectionDaoImpl.getInstance(); |
} |
// Duarte Santos |
// Duarte Santos |
public static SurveyDaoImpl getSurveyDaoImpl() |
{ |
return SurveyDaoImpl.getInstance(); |
/impl/src/java/pt/estgp/estgweb/filters/chains/ResourceAccessControlEnum.java |
---|
16,7 → 16,7 |
superUserDomain("resource.access.superDomain",new ResourceAccessControlSuperDomainFilter()), |
courseunitDeliverableDomain("resource.access.courseunitDeliverableDomain",new ResourceAccessControlCourseUnitDeliverableFilter()), |
courseunitDomain("resource.access.courseunitDomain",new ResourceAccessControlCourseUnitFilter()), |
// Duarte Santos |
// Duarte Santos |
surveyStatsDomain("resource.access.survey", new ResourceAccessControlSurvey()); |
private String key; |
/impl/src/java/pt/estgp/estgweb/filters/filters/CanConsultSurveyStatsClass.java |
---|
New file |
0,0 → 1,49 |
package pt.estgp.estgweb.filters.filters; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.IAddContents; |
import pt.estgp.estgweb.domain.IConsultSurveyStats; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.filters.chains.LoadControlFilter; |
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException; |
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException; |
import pt.estgp.estgweb.filters.filters.utils.LoadObjectFromParameters; |
import pt.utl.ist.berserk.ServiceRequest; |
import pt.utl.ist.berserk.ServiceResponse; |
import pt.utl.ist.berserk.logic.filterManager.FilterParameters; |
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException; |
/** |
* @author: Duarte Santos |
* @date: 16-08-2011 |
* @time: 20:35 |
* @email: a12564 [at] estgp [dot] pt |
*/ |
public class CanConsultSurveyStatsClass extends LoadControlFilter |
{ |
private static final Logger logger = Logger.getLogger(CanConsultSurveyStatsClass.class); |
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception |
{ |
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY); |
if(userSession.getUser() == null) |
{ |
logger.info("try access restricted area:" + request.getRequester()); |
throw new NeedAuthenticationException(); |
} |
if(userSession.getUser().isSuperuser()) |
return; |
IConsultSurveyStats iConsultSurveyStats = (IConsultSurveyStats) LoadObjectFromParameters.loadObjectFromClassName((String) filterParameters.getParameter(1), filterParameters, request.getServiceParameters()); |
if(!iConsultSurveyStats.canConsultSurveyStats(userSession.getUser(),true)) |
{ |
logger.warn(userSession.getUser().getUsername() + ": try access restricted area"); |
throw new AccessDeniedOperationException("fail.owner"); |
} |
} |
} |
/impl/src/java/pt/estgp/estgweb/filters/filters/CanEditSurveyClass.java |
---|
New file |
0,0 → 1,49 |
package pt.estgp.estgweb.filters.filters; |
import org.apache.log4j.Logger; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.IConsultSurveyStats; |
import pt.estgp.estgweb.domain.IEdit; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.filters.chains.LoadControlFilter; |
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException; |
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException; |
import pt.estgp.estgweb.filters.filters.utils.LoadObjectFromParameters; |
import pt.utl.ist.berserk.ServiceRequest; |
import pt.utl.ist.berserk.ServiceResponse; |
import pt.utl.ist.berserk.logic.filterManager.FilterParameters; |
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException; |
/** |
* @author: Duarte Santos |
* @date: 16-08-2011 |
* @time: 22:55 |
* @email: a12564 [at] estgp [dot] pt |
*/ |
public class CanEditSurveyClass extends LoadControlFilter |
{ |
private static final Logger logger = Logger.getLogger(CanEditSurveyClass.class); |
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception |
{ |
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY); |
if(userSession.getUser() == null) |
{ |
logger.info("try access restricted area:" + request.getRequester()); |
throw new NeedAuthenticationException(); |
} |
if(userSession.getUser().isSuperuser()) |
return; |
IEdit iEdit = (IEdit) LoadObjectFromParameters.loadObjectFromClassName((String) filterParameters.getParameter(1), filterParameters, request.getServiceParameters()); |
if(!iEdit.canEdit(userSession.getUser(),true)) |
{ |
logger.warn(userSession.getUser().getUsername() + ": try access restricted area"); |
throw new AccessDeniedOperationException("fail.owner"); |
} |
} |
} |
/impl/src/java/pt/estgp/estgweb/filters/filters/ResourceAccessControlSurvey.java |
---|
1,6 → 1,7 |
package pt.estgp.estgweb.filters.filters; |
import pt.estgp.estgweb.domain.Survey; |
import pt.estgp.estgweb.domain.SurveyStructuralNode; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.filters.chains.ResourceAccessControlFilter; |
17,7 → 18,16 |
@Override |
public boolean canAccessResource(UserSession userSession, String identifier) |
{ |
Survey s = DaoFactory.getSurveyDaoImpl().loadByRepositoryId(identifier); |
Survey s; |
s = DaoFactory.getSurveyDaoImpl().loadByRepositoryId(identifier); |
if(s == null) |
{ |
SurveyStructuralNode node = DaoFactory.getSurveyStructuralNodeDaoImpl().loadByRepositoryId(identifier); |
if(node == null) |
return false; |
else |
s = node.getSurvey(); |
} |
return (userSession.getUser().hasRole(s.getStatsConsultRoles()) || userSession.getUser().isAdmin()); |
} |
} |
} |
/impl/src/java/pt/estgp/estgweb/web/controllers/surveys/SurveysController.java |
---|
7,6 → 7,7 |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.views.*; |
import pt.estgp.estgweb.filters.exceptions.AccessDeniedOperationException; |
import pt.estgp.estgweb.web.UserSessionProxy; |
import pt.estgp.estgweb.web.controllers.AddRolesController; |
import pt.estgp.estgweb.web.form.surveys.SurveysForm; |
import pt.estgp.estgweb.web.utils.DatesUtils; |
71,29 → 72,27 |
} |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {}; |
Object[] args = {view}; |
String[] names = {"serializable"}; |
Object[] args = {view,request}; |
boolean newSurvey = true; |
if(view.getId() > 0) |
newSurvey = false; |
SurveyView surveyView; |
surveyView = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"CreateEditSurvey",args,names); |
surveyForm.setSurveyView(surveyView); |
if(surveyView != null) |
{ |
if(view.getId() <= 0) |
if(newSurvey) |
addMessage(request, "survey.message.created.success"); |
else |
addMessage(request, "survey.message.edited.success"); |
return mapping.findForward("serviceZone"); |
} |
return mapping.getInputForward(); |
return mapping.findForward("serviceZone"); |
} |
catch(AccessDeniedOperationException e) |
{ |
logger.info(e.getMessage()); |
// addMessage(request,"survey.cant.be.edit.because.have.answers"); // Todo TIRAR ISTO |
return mapping.findForward("list"); |
} |
catch (FilterChainFailedException e) |
{ |
return mapping.findForward("error401"); |
168,9 → 167,9 |
SurveyQuestionView qView = surveyView.getQuestions().get(questionIndex); |
String questionsToDelete = ""+qView.getId()+","; |
String itemsToDelete = ""; |
String candidatesToDelete = ""; |
String questionsToDelete = surveyView.getDeletedQuestions()+qView.getId()+","; |
String itemsToDelete = surveyView.getDeletedItems(); |
String candidatesToDelete = surveyView.getDeletedCandidates(); |
for(SurveyQuestionItemView iView : qView.getItems()) |
{ |
181,9 → 180,9 |
} |
} |
surveyView.setDeletedQuestions(surveyView.getDeletedQuestions().concat(questionsToDelete)); |
surveyView.setDeletedItems(surveyView.getDeletedItems().concat(itemsToDelete)); |
surveyView.setDeletedCandidates(surveyView.getDeletedCandidates().concat(candidatesToDelete)); |
surveyView.setDeletedQuestions(questionsToDelete); |
surveyView.setDeletedItems(itemsToDelete); |
surveyView.setDeletedCandidates(candidatesToDelete); |
surveyView.getQuestions().remove(questionIndex); |
} |
336,11 → 335,11 |
{ |
try { |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {}; |
String[] names = {"serializable"}; |
Object[] args = {new Long(request.getParameter("id"))}; |
SurveyView view; |
view = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"LoadSurvey",args,names); // todo ALTERAR O NOME DO SERVICO PARA ADICIONAR FILTRO |
view = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"LoadEditSurvey",args,names); |
if(view != null) |
{ |
387,11 → 386,11 |
{ |
try { |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {}; |
String[] names = {"serializable"}; |
Object[] args = {new Long(request.getParameter("id"))}; |
SurveyView surveyView; |
surveyView = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"LoadSurvey",args,names); // todo: ALTERAR O NOME DO SERVIÇO PARA DPS POR O FILTRO |
surveyView = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"LoadCloneSurvey",args,names); |
if(surveyView != null) |
{ |
455,8 → 454,8 |
try { |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {}; |
Object[] args = {new Long(request.getParameter("id"))}; |
String[] names = {"serializable"}; |
Object[] args = {new Long(request.getParameter("id")),request}; |
sm.execute(RequestUtils.getRequester(request,response),"ConsistSurvey",args,names); |
486,13 → 485,10 |
{ |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {}; |
Object[] args = {request,new Long(request.getParameter("id"))}; |
String[] names = {"serializable"}; |
Object[] args = {new Long(request.getParameter("id")),request}; |
sm.execute(RequestUtils.getRequester(request,response),"GenerateSurveyStats",args,names); |
Object[] args2 = {new Long(request.getParameter("id"))}; |
sm.execute(RequestUtils.getRequester(request,response),"GenerateSurveyStatsCsv",args2,names); |
addMessage(request,"survey.message.operation.started"); |
return mapping.findForward("serviceZone"); |
517,11 → 513,11 |
try |
{ |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {}; |
String[] names = {"serializable"}; |
Object[] args = {new Long(request.getParameter("id"))}; |
SurveyView view; |
view = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"LoadSurvey",args,names); // todo: ALTERAR NOME DO SERVIÇO PARA FILTROS |
view = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"LoadListStatsSurvey",args,names); |
if(view != null) |
{ |
555,7 → 551,7 |
long resp = Long.parseLong(request.getParameter("resp")); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = {}; |
String[] names = {"serializable"}; |
Object[] args = {resp}; |
SurveyResponseView surveyResponseView; |
565,7 → 561,7 |
{ |
surveysForm.setSurveyResponseView(surveyResponseView); |
String[] names2 = {}; |
String[] names2 = {"serializable"}; |
Object[] args2 = {surveyResponseView.getStructuralNodeView().getSurveyView().getId()}; |
SurveyView surveyView; |
665,10 → 661,11 |
try |
{ |
IServiceManager sm = ServiceManager.getInstance(); |
Object[] args = {sView, rView.getId()}; |
String[] names = {"serializable"}; |
Object[] args = {rView.getId(),sView}; |
SurveyView surveyView; |
surveyView = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"InsertSurveyAnswers",args); |
surveyView = (SurveyView) sm.execute(RequestUtils.getRequester(request,response),"InsertSurveyAnswers",args,names); |
if(surveyView != null) |
{ |
/impl/src/updates/db/update10Surveys.sql |
---|
New file |
0,0 → 1,167 |
DROP TABLE IF EXISTS `surveystructuralnode`; |
CREATE TABLE `surveystructuralnode` ( |
`id` bigint(20) NOT NULL auto_increment, |
`discriminator` varchar(255) NOT NULL, |
`msg` varchar(255) default NULL, |
`msgKey` varchar(255) default NULL, |
`myKey` varchar(255) default NULL, |
`parentNode` bigint(20) default NULL, |
`survey` bigint(20) default NULL, |
PRIMARY KEY (`id`), |
KEY `msgKeyIndex` (`msgKey`), |
KEY `myKeyIndex` (`myKey`), |
KEY `msgIndex` (`msg`), |
KEY `FK9A3D3A3991D39EEB` (`parentNode`), |
KEY `FK9A3D3A39383CD3FA` (`survey`), |
CONSTRAINT `FK_surveystructuralnode_1` FOREIGN KEY (`parentNode`) REFERENCES `surveystructuralnode` (`id`) |
) ENGINE=Innodb DEFAULT CHARSET=latin1; |
DROP TABLE IF EXISTS `survey`; |
CREATE TABLE `survey` ( |
`id` bigint(20) NOT NULL auto_increment, |
`discriminator` varchar(255) NOT NULL, |
`updateDate` datetime NOT NULL, |
`title` varchar(255) default NULL, |
`saveDate` datetime default NULL, |
`startDate` datetime default NULL, |
`endDate` datetime default NULL, |
`type` varchar(255) default NULL, |
`targetRoles` varchar(255) default NULL, |
`statsConsultRoles` varchar(255) default NULL, |
`year` varchar(255) default NULL, |
`semester` varchar(255) default NULL, |
`status` varchar(255) default NULL, |
`owner` bigint(20) default NULL, |
`structuralNode` bigint(20) default NULL, |
`identifier` varchar(255) default NULL, |
`statusPercentage` int(11) default NULL, |
PRIMARY KEY (`id`), |
KEY `FKCAE3A75AFF83C59E` (`structuralNode`), |
KEY `FKCAE3A75A410CFD44` (`owner`), |
KEY `FKCAE3A75A52876F6F` (`owner`), |
CONSTRAINT `FKCAE3A75A410CFD44` FOREIGN KEY (`owner`) REFERENCES `user` (`id`), |
CONSTRAINT `FKCAE3A75A52876F6F` FOREIGN KEY (`owner`) REFERENCES `user` (`id`), |
CONSTRAINT `FKCAE3A75AFF83C59E` FOREIGN KEY (`structuralNode`) REFERENCES `surveystructuralnode` (`id`) |
) ENGINE=Innodb DEFAULT CHARSET=latin1; |
-- |
-- Table structure for table `surveyresponse` |
-- |
DROP TABLE IF EXISTS `surveyresponse`; |
CREATE TABLE `surveyresponse` ( |
`id` bigint(20) NOT NULL auto_increment, |
`discriminator` varchar(255) NOT NULL, |
`date` datetime default NULL, |
`answered` bit(1) default NULL, |
`structuralNode` bigint(20) default NULL, |
`owner` bigint(20) default NULL, |
PRIMARY KEY (`id`), |
KEY `FKE812C19BFF83C59E` (`structuralNode`), |
KEY `FKE812C19B410CFD44` (`owner`), |
KEY `FKE812C19B52876F6F` (`owner`), |
CONSTRAINT `FKE812C19B410CFD44` FOREIGN KEY (`owner`) REFERENCES `user` (`id`), |
CONSTRAINT `FKE812C19B52876F6F` FOREIGN KEY (`owner`) REFERENCES `user` (`id`), |
CONSTRAINT `FKE812C19BFF83C59E` FOREIGN KEY (`structuralNode`) REFERENCES `surveystructuralnode` (`id`) |
) ENGINE=Innodb DEFAULT CHARSET=latin1; |
-- |
-- Table structure for table `surveyquestion` |
-- |
DROP TABLE IF EXISTS `surveyquestion`; |
CREATE TABLE `surveyquestion` ( |
`id` bigint(20) NOT NULL auto_increment, |
`discriminator` varchar(255) NOT NULL, |
`labelpt` varchar(255) default NULL, |
`labelen` varchar(255) default NULL, |
`required` bit(1) default NULL, |
`type` varchar(255) default NULL, |
`survey` bigint(20) default NULL, |
PRIMARY KEY (`id`), |
KEY `FKB6DDE940383CD3FA` (`survey`), |
CONSTRAINT `FKB6DDE940383CD3FA` FOREIGN KEY (`survey`) REFERENCES `survey` (`id`) |
) ENGINE=Innodb DEFAULT CHARSET=latin1; |
DROP TABLE IF EXISTS `surveyquestionitem`; |
CREATE TABLE `surveyquestionitem` ( |
`id` bigint(20) NOT NULL auto_increment, |
`discriminator` varchar(255) NOT NULL, |
`labelpt` varchar(255) default NULL, |
`labelen` varchar(255) default NULL, |
`question` bigint(20) default NULL, |
PRIMARY KEY (`id`), |
KEY `FKD778C453EB11688C` (`question`), |
CONSTRAINT `FKD778C453EB11688C` FOREIGN KEY (`question`) REFERENCES `surveyquestion` (`id`) |
) ENGINE=Innodb DEFAULT CHARSET=latin1; |
-- |
-- Table structure for table `surveyquestionanswer` |
-- |
DROP TABLE IF EXISTS `surveyquestioncandidateanswer`; |
CREATE TABLE `surveyquestioncandidateanswer` ( |
`id` bigint(20) NOT NULL auto_increment, |
`discriminator` varchar(255) NOT NULL, |
`labelpt` varchar(255) default NULL, |
`labelen` varchar(255) default NULL, |
`type` varchar(255) default NULL, |
`questionItem` bigint(20) default NULL, |
PRIMARY KEY (`id`), |
KEY `FK5692D5C1BC26ACD2` (`questionItem`), |
CONSTRAINT `FK5692D5C1BC26ACD2` FOREIGN KEY (`questionItem`) REFERENCES `surveyquestionitem` (`id`) |
) ENGINE=Innodb DEFAULT CHARSET=latin1; |
DROP TABLE IF EXISTS `surveyquestionanswer`; |
CREATE TABLE `surveyquestionanswer` ( |
`id` bigint(20) NOT NULL auto_increment, |
`discriminator` varchar(255) NOT NULL, |
`textAnswer` varchar(255) default NULL, |
`candidateAnswer` bigint(20) default NULL, |
`response` bigint(20) default NULL, |
PRIMARY KEY (`id`), |
KEY `FKCE6438FE4D7B1942` (`response`), |
KEY `FKCE6438FEDB91A49C` (`candidateAnswer`), |
CONSTRAINT `FKCE6438FE4D7B1942` FOREIGN KEY (`response`) REFERENCES `surveyresponse` (`id`), |
CONSTRAINT `FKCE6438FEDB91A49C` FOREIGN KEY (`candidateAnswer`) REFERENCES `surveyquestioncandidateanswer` (`id`) |
) ENGINE=Innodb DEFAULT CHARSET=latin1; |
-- |
-- Table structure for table `surveyquestioncandidateanswer` |
-- |
-- |
-- Table structure for table `surveyquestionitem` |
-- |
-- |
-- Table structure for table `surveystatsgraphic` |
-- |
DROP TABLE IF EXISTS `surveystatsgraphic`; |
CREATE TABLE `surveystatsgraphic` ( |
`id` bigint(20) NOT NULL auto_increment, |
`discriminator` varchar(255) NOT NULL, |
`identifier` varchar(255) default NULL, |
`question` bigint(20) default NULL, |
`structuralNode` bigint(20) default NULL, |
PRIMARY KEY (`id`), |
KEY `FK47D2BDC3EB11688C` (`question`), |
KEY `FK47D2BDC3FF83C59E` (`structuralNode`), |
CONSTRAINT `FK47D2BDC3EB11688C` FOREIGN KEY (`question`) REFERENCES `surveyquestion` (`id`), |
CONSTRAINT `FK47D2BDC3FF83C59E` FOREIGN KEY (`structuralNode`) REFERENCES `surveystructuralnode` (`id`) |
) ENGINE=Innodb DEFAULT CHARSET=latin1; |
-- |
-- Table structure for table `surveystructuralnode` |
-- |
/impl/src/hbm/pt/estgp/estgweb/domain/GenericUser.hbm.xml |
---|
11,7 → 11,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="superuser" type="boolean"/> |
<property name="username" type="string" unique="true" length="50" index="usernameIndex"/> |
72,11 → 72,11 |
<key column="owner"/> |
<one-to-many class="pt.estgp.estgweb.domain.ManagedIdentifierCollection"/> |
</set> |
<set name="mySurveys" lazy="true"> |
<set name="mySurveys" lazy="true" order-by="id asc"> |
<key column="owner"/> |
<one-to-many class="pt.estgp.estgweb.domain.Survey"/> |
</set> |
<set name="mySurveyResponses" lazy="true"> |
<set name="mySurveyResponses" lazy="true" order-by="id asc"> |
<key column="owner"/> |
<one-to-many class="pt.estgp.estgweb.domain.SurveyResponse"/> |
</set> |
/impl/src/hbm/pt/estgp/estgweb/domain/Record.hbm.xml |
---|
11,7 → 11,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="title" type="string" index="titleIndex"/> |
<property name="type" type="string" index="typeIndex"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/UrlStatYear.hbm.xml |
---|
13,7 → 13,7 |
<key-many-to-one name="urlStat" class="pt.estgp.estgweb.domain.UrlStat" column="relativePath"/> |
</composite-id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="totalClicks" type="integer"/> |
<set name="months" order-by="month asc" lazy="true" cascade="all" inverse="true"> |
/impl/src/hbm/pt/estgp/estgweb/domain/RepositoryFile.hbm.xml |
---|
11,7 → 11,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<many-to-one name="owner" class="pt.estgp.estgweb.domain.GenericUser" outer-join="true" lazy="proxy"/> |
<many-to-one name="lastVersion" class="pt.estgp.estgweb.domain.RepositoryFileVersion" outer-join="true" lazy="false"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/Image.hbm.xml |
---|
11,7 → 11,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="name" type="string"/> |
<property name="contentType" type="string"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/Blog.hbm.xml |
---|
11,7 → 11,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="name" type="string" unique="true" index="nameIndex"/> |
<property name="title" type="string"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/Teste.hbm.xml |
---|
11,7 → 11,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="name" type="string"/> |
<property name="morada" type="string"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/BlogPost.hbm.xml |
---|
11,7 → 11,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="month" type="int"/> |
<property name="year" type="int"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/Announcement.hbm.xml |
---|
11,7 → 11,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="startDate" type="timestamp"/> |
<property name="expireDate" type="timestamp"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/SruSource.hbm.xml |
---|
12,7 → 12,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="name" type="string"/> |
<property name="collectionField" column="collection_field" type="string"/> |
34,7 → 34,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="collection" type="string"/> |
<property name="admitedRoles" type="string" column="admited_roles"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/UrlStatDay.hbm.xml |
---|
17,7 → 17,7 |
</key-many-to-one> |
</composite-id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="date" type="date"/> |
<property name="totalClicks" type="integer"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/CourseUserAssociation.hbm.xml |
---|
11,7 → 11,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="role" type="string"/> |
<many-to-one name="user" class="pt.estgp.estgweb.domain.User" outer-join="true" column="user_id"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/Survey.hbm.xml |
---|
11,7 → 11,7 |
<generator class="native"/> |
</id> |
<discriminator column="discriminator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null" source="db"/> |
<property name="title" type="string"/> |
<property name="saveDate" type="timestamp"/> |
<property name="startDate" type="timestamp"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/UrlStat.hbm.xml |
---|
11,7 → 11,7 |
<generator class="assigned"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="name" type="text"/> |
<property name="description" type="text"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/CourseUnit.hbm.xml |
---|
11,7 → 11,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="semestre" type="string" index="semestreIndex"/> |
<property name="name" type="string" index="nameIndex"/> |
68,7 → 68,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="question" type="text"/> |
<property name="answer" type="text"/> |
85,7 → 85,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="deliverDate" type="timestamp"/> |
<property name="deliverType" type="string"/> |
109,7 → 109,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="deliverDate" type="timestamp"/> |
<property name="grade" type="string"/> |
131,7 → 131,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="publishDate" type="timestamp"/> |
<property name="grade" type="int" index="gradeIndex"/> |
150,7 → 150,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="dataAula" type="timestamp"/> |
<property name="tipoAula" type="string"/> |
173,7 → 173,7 |
<!--<generator class="native"/>--> |
<!--</id>--> |
<!--<discriminator column="discrimitator"/>--> |
<!--<timestamp name="updateDate" unsaved-value="null"/>--> |
<!--<timestamp source="db" name="updateDate" unsaved-value="null"/>--> |
<!--<property name="saveDate" type="timestamp"/>--> |
<!--<property name="deliverDate" type="timestamp"/>--> |
<!--<property name="deliverType" type="string"/>--> |
/impl/src/hbm/pt/estgp/estgweb/domain/Course.hbm.xml |
---|
11,7 → 11,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="name" type="string"/> |
<property name="description" type="text"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/IdentifiersManagement.hbm.xml |
---|
11,7 → 11,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="sequenceNumber" type="long"/> |
<property name="description" type="text"/> |
27,7 → 27,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="name" type="string"/> |
<property name="sequenceNumber" type="long"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/UrlStatMonth.hbm.xml |
---|
16,7 → 16,7 |
</key-many-to-one> |
</composite-id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="date" type="date"/> |
<property name="totalClicks" type="integer"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/Reminder.hbm.xml |
---|
11,7 → 11,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="startDate" type="timestamp"/> |
<property name="expireDate" type="timestamp"/> |
/impl/src/hbm/pt/estgp/estgweb/domain/SessionObject.hbm.xml |
---|
16,7 → 16,7 |
</key-many-to-one> |
</composite-id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="type" type="string"/> |
<property name="object" type="java.io.Serializable"> |
/impl/src/hbm/pt/estgp/estgweb/domain/Job.hbm.xml |
---|
11,7 → 11,7 |
<generator class="native"/> |
</id> |
<discriminator column="discrimitator"/> |
<timestamp name="updateDate" unsaved-value="null"/> |
<timestamp source="db" name="updateDate" unsaved-value="null"/> |
<property name="saveDate" type="timestamp"/> |
<property name="startDate" type="timestamp" index="startDateIndex"/> |
<property name="description" type="string"/> |
/impl/src/web/admin/surveys/submitSurvey.jsp |
---|
9,11 → 9,23 |
<jsp:useBean id="SurveysForm" type="pt.estgp.estgweb.web.form.surveys.SurveysForm" scope="request"/> |
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/> |
<jomm:messages/> |
<html:errors/> |
<html:form action="/user/submitSurveyFromServiceZone"> |
<% |
String fromAction = ""; |
String from = ""; |
String user = ""; |
if (request.getParameter("from") != null) |
{ |
user = "/user"; |
fromAction = "From" + request.getParameter("from"); |
from = "?from=" + request.getParameter("from"); |
} |
request.setAttribute("from", from); |
request.setAttribute("user", user); |
request.setAttribute("fromAction", fromAction); |
%> |
<html:form action="${user}/submitSurvey${fromAction}${from}"> |
<html:hidden property="surveyView.id"/> |
<html:hidden property="surveyView.deletedQuestions"/> |
<html:hidden property="surveyView.deletedItems"/> |
/impl/src/web/css/style.css |
---|
1162,17 → 1162,6 |
} |
/*Duarte Santos*/ |
.form #inputVertical |
{ |
width:150px; |
} |
.form #inputHorizontal |
{ |
width:300px; |
} |
.form input[type="text"], .form input[type="password"], .form input.text, .form input.password |
{ |
width: 800px; |
1828,8 → 1817,17 |
width:100%; |
} |
/*SURVEYS - Duarte Santos*/ |
/* Duarte Santos */ |
/* SURVEYS - Duarte Santos*/ |
.form #inputVertical |
{ |
width:150px; |
} |
.form #inputHorizontal |
{ |
width:300px; |
} |
textarea#surveyTextarea { |
width: 400px; |
height: 80px; |
1863,3 → 1861,19 |
border-bottom:1px solid #eeeeee; |
} |
div#loadNodeGraphs { |
margin:10px; |
} |
div#loadNodeGraphsHeader { |
margin-bottom:5px; |
} |
div#listSurveyStats { |
margin:10px; |
} |
.nodeSection { |
margin:5px; |
} |
/impl/src/web/layout/navigationTop.jsp |
---|
70,6 → 70,8 |
<div class="shadow "> |
<ul class="menu"> |
<li><a href="http://www.ipportalegre.pt/poliempreende/">Poliempreende</a></li> |
<li><a href="http://www.essp.pt/Aliment_saudavel.php">alimentacao saudavel</a></li> |
<li><a href="http://www.c3i.ipportalegre.pt/">C3i</a></li> |
<!-- <li><a href="#">SGQ</a></li> |
--> </ul> |
</div> |
/impl/src/web/user/surveys/viewResponseGraphs.jsp |
---|
File deleted |
\ No newline at end of file |
/impl/src/web/user/surveys/listSurveyResponsesRecursive.jsp |
---|
File deleted |
\ No newline at end of file |
/impl/src/web/user/surveys/listSurveyStats.jsp |
---|
1,6 → 1,5 |
<%@ page import="pt.estgp.estgweb.domain.views.SurveyStructuralNodeView" %> |
<%@ page import="pt.estgp.estgweb.domain.views.SurveyView" %> |
<%@ page import="java.util.List" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> |
17,7 → 16,12 |
<% |
SurveyView surveyView = (SurveyView) request.getAttribute("SurveyView"); |
SurveyStructuralNodeView nodeRoot = surveyView.getStructuralNodeView(); |
request.setAttribute("id",surveyView.getId()); |
request.setAttribute("node",nodeRoot); |
%> |
<jsp:include page="listSurveyResponsesRecursive.jsp"/> |
<div id="listSurveyStats"> |
<jsp:include page="listSurveyStatsRecursive.jsp"/> |
</div> |
/impl/src/web/user/surveys/loadSurveyNodeGraphs.jsp |
---|
New file |
0,0 → 1,39 |
<%@ page import="pt.estgp.estgweb.domain.views.SurveyStatsGraphicView" %> |
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %> |
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.IServiceManager" %> |
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.ServiceManager" %> |
<%@ page import="java.util.List" %> |
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException" %> |
<div id="loadNodeGraphs"> |
<% |
try |
{ |
String[] names = {"serializable"}; |
Object[] args = {Long.parseLong(request.getParameter("id")),Long.parseLong(request.getParameter("node"))}; |
IServiceManager sm = ServiceManager.getInstance(); |
List<SurveyStatsGraphicView> surveyStatsGraphicViews = (List<SurveyStatsGraphicView>) sm.execute(RequestUtils.getRequester(request,response),"LoadSurveyNodeGraphs",args,names); |
if(surveyStatsGraphicViews.size() > 0) |
{ |
%> |
<div id="loadNodeGraphsHeader">Gráfico(s) relativo(s) a: <b><%=surveyStatsGraphicViews.get(0).getStructuralNodeView().getMsg()%></b></div> |
<% |
for(SurveyStatsGraphicView gView : surveyStatsGraphicViews) |
{ |
%> |
<div><img src="<%=request.getContextPath()%>/repositoryStream/<%=gView.getIdentifier()%>" alt=""/></div><br> |
<% |
} |
} |
else |
out.println("<div>Não há graficos</div>"); |
} |
catch(FilterChainFailedException e) |
{} |
catch (Throwable e) |
{} |
%> |
</div> |
/impl/src/web/user/surveys/listSurveys.jsp |
---|
43,6 → 43,7 |
<tr> |
<th><bean:message key="survey.list.form.title"/></th> |
<th><bean:message key="survey.list.form.type"/></th> |
<th><bean:message key="survey.list.form.target"/></th> |
<th><bean:message key="survey.list.form.year"/></th> |
<th><bean:message key="survey.list.form.semester"/></th> |
<th><bean:message key="survey.list.form.start.date"/></th> |
57,6 → 58,18 |
<tr> |
<td><bean:write name="surveyView" property="title"/></td> |
<td><bean:message key="surveys.type.${surveyView.type}"/></td> |
<% |
if(sv.isPedagogic()) |
{ |
%> |
<td><bean:message key="surveys.target.pair.${surveyView.targetRoles}"/></td> |
<% |
} else { |
%> |
<td><bean:message key="user.role.${surveyView.targetRoles}"/></td> |
<% |
} |
%> |
<td><bean:write name="surveyView" property="year"/></td> |
<td><bean:message key="courseunit.${surveyView.semester}"/></td> |
<td><bean:write name="surveyView" property="formatedStartDate"/></td> |
68,12 → 81,16 |
if(sv.getStatus() != null && (sv.getStatus() == SurveyStatusEnum.STATUS_STOPPED || sv.isExpired())) |
{ |
%> |
<logic:equal name="surveyView" property="numberOfResponses" value="0"> |
<td><html:link action="/user/startEditSurveyFromServiceZone.do?id=${surveyView.id}"><bean:message key="survey.list.form.option.edit"/></html:link></td> |
</logic:equal> |
<td><html:link action="/user/startCloneSurveyFromServiceZone.do?id=${surveyView.id}"><bean:message key="survey.list.form.option.clone"/></html:link></td> |
<td><html:link action="/user/startConsistSurveyFromServiceZone.do?id=${surveyView.id}"><bean:message key="survey.list.form.option.consist"/></html:link></td> |
<td><html:link action="/user/startGenerateSurveyStatsFromServiceZone.do?id=${surveyView.id}"><bean:message key="survey.list.form.option.gen.stats"/></html:link></td> |
<td><html:link action="/user/startListSurveyStatsFromServiceZone.do?id=${surveyView.id}"><bean:message key="survey.list.form.option.view.stats"/></html:link></td> |
<logic:present name="surveyView" property="identifier"> |
<td><html:link action="/user/startListSurveyStats.do?id=${surveyView.id}"><bean:message key="survey.list.form.option.view.stats"/></html:link></td> |
<td><a href="<%=request.getContextPath()%>/repositoryStream/${surveyView.identifier}"><bean:message key="survey.list.form.option.download.csv"/></a></td> |
</logic:present> |
<% |
} |
else if(sv.getStatus() != null) |
/impl/src/web/user/surveys/listSurveyStatsRecursive.jsp |
---|
New file |
0,0 → 1,50 |
<%@ page import="pt.estgp.estgweb.domain.views.SurveyStructuralNodeView" %> |
<% |
String from = ""; |
if (request.getParameter("from") != null) |
{ |
from = "&from=" + request.getParameter("from"); |
} |
request.setAttribute("from", from); |
long nodeToShow = 0; |
if(request.getParameter("node") != null) |
{ |
nodeToShow = Long.parseLong(request.getParameter("node")); |
} |
SurveyStructuralNodeView node = (SurveyStructuralNodeView) request.getAttribute("node"); |
if(node.getNodes().size() > 0) |
{ |
%> |
<a href="#"><img border="0" onclick="this.src=showOrHide('node<%=node.getId()%>','<%=request.getContextPath()%>/imgs/closedPlus.gif','<%=request.getContextPath()%>/imgs/openedMinus.gif')" |
src="<%=request.getContextPath()%>/imgs/closedPlus.gif" alt="abrir"/></a> <%=node.getMsg()%><br> |
<% |
if(node.isRelativeParentOf(nodeToShow)) { |
%> |
<div id="node<%=node.getId()%>" style="display:block" class="nodeSection"> |
<% |
}else{ |
%> |
<div id="node<%=node.getId()%>" style="display:none" class="nodeSection"> |
<% |
} |
for(SurveyStructuralNodeView n : node.getNodes()) |
{ |
request.setAttribute("node",n); |
%> |
<jsp:include page="listSurveyStatsRecursive.jsp"/> |
<% |
} |
%> |
</div> |
<% |
} |
else |
{ |
%> |
<div class="nodeSection"><a href="<%=request.getContextPath()%>/user/startLoadSurveyNodeGraphs.do?id=<%=request.getAttribute("id")%>&node=<%=node.getId()%><%=from%>"><%=node.getMsg()%></a></div> |
<% |
} |
%> |
/impl/src/web/user/home/todos.jsp |
---|
57,7 → 57,7 |
String style; |
String img; |
String styleClass; |
// Duarte Santos |
// Duarte Santos |
if (toDoCat.getDescription().equals(ModuleEnum.TodoAnnouncements.getMessageKey()) || toDoCat.getDescription().equals(ModuleEnum.Surveys.getMessageKey())) |
{ |
styleClass = "WARNING"; |
/impl/src/web/user/serviceZone/serviceZone.jsp |
---|
49,12 → 49,16 |
request.setAttribute("OwnerBlogPosts", ownerBlogPosts); |
} |
// Duarte Santos |
// Duarte Santos |
List<SurveyView> ownerSurveys = null; |
List<SurveyView> consultStatsSurveys = null; |
if(Globals.MODULE_STATUS_SURVEYS) |
{ |
ownerSurveys = (List<SurveyView>) sm.execute(RequestUtils.getRequester(request,response),"LoadOwnedSurveys", args, names); |
request.setAttribute("OwnerSurveys",ownerSurveys); |
consultStatsSurveys = (List<SurveyView>) sm.execute(RequestUtils.getRequester(request,response),"LoadConsultStatsSurveys", args, names); |
request.setAttribute("ConsultStatsSurveys",consultStatsSurveys); |
} |
%> |
<jomm:messages/> |
101,7 → 105,7 |
</baco:hasRole> |
</baco:isModuleOn> |
<!-- Duarte Santos --> |
<!-- Duarte Santos --> |
<baco:isModuleOn module="surveys"> |
<baco:isAdmin> |
<li> |
501,57 → 505,42 |
<baco:isModuleOn module="surveys"> |
<div class="block"> |
<div class="head"> |
<bean:message key="intranet.my.surveys"/> |
<a href="#"><img border="0" onclick="this.src=showOrHide('mySurveys','<%=request.getContextPath()%>/imgs/closedbox.gif','<%=request.getContextPath()%>/imgs/openedbox.gif')" src="<%=request.getContextPath()%>/imgs/closedbox.gif" alt="abrir"/></a> |
<bean:message key="intranet.my.surveys.stats"/> |
<a href="#"><img border="0" onclick="this.src=showOrHide('mySurveysStats','<%=request.getContextPath()%>/imgs/closedbox.gif','<%=request.getContextPath()%>/imgs/openedbox.gif')" src="<%=request.getContextPath()%>/imgs/closedbox.gif" alt="abrir"/></a> |
</div> |
<div id="mySurveys" style="display:none;"> |
<div id="mySurveysStats" style="display:none;"> |
<% |
if(ownerSurveys.size() == 0) |
{ |
if(consultStatsSurveys.size() == 0) |
{ |
%> |
<div class="zerofound"> |
<bean:message key="survey.zero.placed"/> |
</div> |
<div class="zerofound"> |
<bean:message key="survey.stats.zero.placed"/> |
</div> |
<% |
} |
} |
else |
{ |
{ |
%> |
<table> |
<% |
for(SurveyView s : ownerSurveys) |
{ |
%> |
<tr> |
<td> |
<a href="<%=request.getContextPath()%>/user/startListSurveysFromServiceZone.do"><%=s.getTitle()%></a> |
</td> |
<td> |
<%=s.getFormatedSaveDate()%> |
</td> |
</tr> |
<% |
} |
%> |
</table> |
<table> |
<% |
} |
for (SurveyView s : consultStatsSurveys) |
{ |
%> |
<tr> |
<td> |
<a href="<%=request.getContextPath()%>/user/startListSurveyStats.do?id=<%=s.getId()%>&from=ServiceZone"><%=s.getTitle()%></a> |
</td> |
</tr> |
<% |
} |
%> |
</table> |
<% |
} |
%> |
</div> |
</div> |
<div class="block"> |
<div class="head"> |
<bean:message key="intranet.my.surveys.stats"/> |
<a href="#"><img border="0" onclick="this.src=showOrHide('mySurveysStats','<%=request.getContextPath()%>/imgs/closedbox.gif','<%=request.getContextPath()%>/imgs/openedbox.gif')" src="<%=request.getContextPath()%>/imgs/closedbox.gif" alt="abrir"/></a> |
</div> |
<div id="mySurveysStats" style="display:none;"> |
<div class="zerofound"> |
<bean:message key="survey.stats.zero.placed"/> |
</div> |
</div> |
</div> |
</baco:isModuleOn> |
<!----> |
</td> |
</tr> |
/impl/src/web/user/serviceZone/topnavListSurveyStats.jsp |
---|
5,7 → 5,8 |
<% |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/startServiceZone.do", "intranet.separator.service.zone.back"); |
topNav.addNavPlace("/user/startListSurveysFromServiceZone.do", "survey.topnav.list.surveys"); |
if(request.getParameter("from") == null) |
topNav.addNavPlace("/user/startListSurveysFromServiceZone.do", "survey.topnav.list.surveys"); |
topNav.addNavPlace(null, "survey.topnav.list.stats"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |
/impl/src/web/user/serviceZone/topnavLoadSurveyNodeGraphs.jsp |
---|
New file |
0,0 → 1,16 |
<%@page contentType="text/html"%> |
<%@page pageEncoding="UTF-8"%> |
<%@page import="jomm.web.utils.NavPlaceServer"%> |
<%@ page import="jomm.web.utils.TopNav" %> |
<% |
TopNav topNav = NavPlaceServer.getInstance().createTopNav(request); |
topNav.addNavPlace("/user/startServiceZone.do", "intranet.separator.service.zone.back"); |
String from = ""; |
if(request.getParameter("from") == null) |
topNav.addNavPlace("/user/startListSurveysFromServiceZone.do", "survey.topnav.list.surveys"); |
else |
from = "&from=" + request.getParameter("from"); |
topNav.addNavPlace("/user/startListSurveyStats.do?id="+Long.parseLong(request.getParameter("id"))+from+"&node="+Long.parseLong(request.getParameter("node"))+"", "survey.topnav.list.stats"); |
topNav.addNavPlace(null, "survey.topnav.view.graphs"); |
%> |
<jsp:include page="/layout/topnav.jsp"/> |