Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1286 → Rev 1296

/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportStudentsService.java
59,7 → 59,7
//Cadeiras a Vulso
//Erasmus
//disciplinas a vulso ESS
Integer[] cursosFicticios = {19,4,0,22};
static Integer[] cursosFicticios = {19,4,0,22};
 
static boolean studentComUnidadesRepetidas = false;
 
328,7 → 328,7
}
}
 
boolean isCursoFicticio(int cursoCode)
protected static boolean isCursoFicticio(int cursoCode)
{
for(Integer cursoFicticio: cursosFicticios)
{
/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/dao/DisciplinaDao.java
New file
0,0 → 1,138
package pt.estgp.estgweb.services.sigesimports.oracle.dao;
 
import pt.estgp.estgweb.services.sigesimports.oracle.domain.Disciplina;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
 
/**
* Created by jorgemachado on 26/02/16.
*/
public class DisciplinaDao extends AbstractDao<Disciplina>
{
private static DisciplinaDao instance = null;
 
private DisciplinaDao()
{
}
 
public static DisciplinaDao getInstance()
{
if (instance == null)
instance = new DisciplinaDao();
return instance;
}
 
protected String getTable() {
return "CSE.T_TBDISCIP";
}
 
protected String getIdColumn() {
return "CD_DISCIP";
}
 
 
public Disciplina load(Integer codigo) throws SQLException {
 
Disciplina d = null;
Connection conn = getCurrentConnection();
PreparedStatement catCMD = conn.prepareStatement("SELECT DISTINCT CSE.T_TBDISCIP.CD_DISCIP AS CD_DISCIP, CSE.T_TBDISCIP.DS_DISCIP AS DS_DISCIP, CSE.T_TBDISCIP.CD_INSTITUIC AS CD_INSTITUIC, CSE.T_INSCRI.CD_CURSO AS CD_CURSO, CSE.T_CURSOS.NM_CURSO AS NM_CURSO, CSE.T_CURSOS.CD_GRAU1 AS CD_GRAU1 FROM CSE.T_INSCRI INNER JOIN CSE.T_TBDISCIP ON CSE.T_INSCRI.CD_DISCIP=CSE.T_TBDISCIP.CD_DISCIP INNER JOIN CSE.T_CURSOS ON CSE.T_CURSOS.CD_CURSO = CSE.T_INSCRI.CD_CURSO WHERE CSE.T_TBDISCIP.CD_DISCIP = " + codigo);
ResultSet aReader = catCMD.executeQuery();
if (aReader.next())
{
d = getDisciplina(aReader);
}
//close the reader
aReader.close();
catCMD.close();
conn.close();
return d;
}
 
 
public Disciplina load(ResultSet aReader) throws SQLException
{
Disciplina d = new Disciplina();
d.codigo = getDecimal("CD_DISCIP",aReader);
d.nome = getString("DS_DISCIP",aReader);
d.codigoInstituicao = getDecimal("CD_INSTITUIC", aReader);
return d;
}
 
 
private String getCodigosDisciplinasQuery(Integer codigoInstituicao, String ano, String semestre)
{
/*return "SELECT DISTINCT CSE.T_TBDISCIP.CD_DISCIP, CSE.T_INSCRI.CD_TURMA_T,"+
"CSE.T_TBDISCIP.DS_DISCIP AS DS_DISCIP, CSE.T_TBDISCIP.CD_INSTITUIC AS CD_INSTITUIC, CSE.T_INSCRI.CD_CURSO AS CD_CURSO, CSE.T_CURSOS.NM_CURSO AS NM_CURSO, CSE.T_CURSOS.CD_GRAU1 AS CD_GRAU1 "+
"FROM CSE.T_INSCRI INNER JOIN CSE.T_TBDISCIP ON CSE.T_INSCRI.CD_DISCIP=CSE.T_TBDISCIP.CD_DISCIP INNER JOIN CSE.T_CURSOS ON CSE.T_CURSOS.CD_CURSO = CSE.T_INSCRI.CD_CURSO WHERE "+
" (((((CSE.T_TBDISCIP.CD_INSTITUIC)=" + codigoInstituicao + ") AND ((CSE.T_INSCRI.CD_LECTIVO)='" + ano + "')) AND CSE.T_INSCRI.CD_DURACAO = '" + semestre + "') AND (CSE.T_INSCRI.CD_TIPDIS = 1 OR CSE.T_INSCRI.CD_TIPDIS = 2))";*/
return "SELECT DISTINCT " +
"CSE.T_TBDISCIP.CD_DISCIP AS CD_DISCIP, "+
"CSE.T_TBDISCIP.DS_DISCIP AS DS_DISCIP, " +
"CSE.T_TBDISCIP.CD_INSTITUIC AS CD_INSTITUIC, " +
"CSE.T_INSCRI.CD_CURSO AS CD_CURSO, " +
"CSE.T_CURSOS.NM_CURSO AS NM_CURSO, " +
"CSE.T_CURSOS.CD_GRAU1 AS CD_GRAU1 " +
"FROM " +
"CSE.T_INSCRI INNER JOIN CSE.T_TBDISCIP ON CSE.T_INSCRI.CD_DISCIP=CSE.T_TBDISCIP.CD_DISCIP " +
"INNER JOIN CSE.T_CURSOS ON CSE.T_CURSOS.CD_CURSO = CSE.T_INSCRI.CD_CURSO " +
"WHERE "+
" (((((CSE.T_TBDISCIP.CD_INSTITUIC)=" + codigoInstituicao + ") AND ((CSE.T_INSCRI.CD_LECTIVO)='" + ano + "')) AND CSE.T_INSCRI.CD_DURACAO = '" + semestre + "') AND ((CSE.T_INSCRI.CD_STATUS)<>5) AND (CSE.T_INSCRI.CD_TIPDIS = 2 OR CSE.T_INSCRI.CD_TIPDIS = 1))";
/**\//SO QUEREMOS 1 e 2
* eliminamos tb inscricoes nao regulares STATUS <> 5</>
* As restantes 5 e 6 so servem para depois procurar a Real para atribuir ao aluno
* A unica coisa que falta aqui será do outro lado eliminar cursos ficticios
*
* CD_TIPDISC = 1 Inscricoes normais
* CD_TIPDISC = 2 Nao conta para media
* CD_TIPDISC = 3 Qualitativa
* CD_TIPDISC = 4 Equivalencia
* CD_TIPDISC = 5 Equivalencia sem nota
* CD_TIPDISC = 6 Extra Curricular
* CD_TIPDISC = 7 Suplemento Diploma
* CD_TIPDISC = 8 Integracao ou refazimento do plano de estudos
*/
}
 
 
 
public List<Disciplina> loadDisciplinas(Integer codigoInstituicao, String ano, String semestre,Connection conn) throws SQLException {
List<Disciplina> disciplinas = new ArrayList<Disciplina>();
boolean connWasNull = conn == null;
if(connWasNull)
conn = getCurrentConnection();
PreparedStatement catCMD = conn.prepareStatement(getCodigosDisciplinasQuery(codigoInstituicao, ano, semestre));
ResultSet aReader = catCMD.executeQuery();
while (aReader.next())
{
disciplinas.add(getDisciplina(aReader));
}
//close the reader
aReader.close();
catCMD.close();
if(connWasNull)
conn.close();
return disciplinas;
}
 
 
 
 
private Disciplina getDisciplina(ResultSet aReader) throws SQLException {
Disciplina d = new Disciplina();
d.codigo = getDecimal("CD_DISCIP", aReader);
d.nome = getString("DS_DISCIP", aReader);
d.codigoInstituicao = getDecimal("CD_INSTITUIC", aReader);
d.codigoCurso = getDecimal("CD_CURSO", aReader);
d.nomeCurso = getString("NM_CURSO", aReader);
d.grauCurso = "" + getDecimal("CD_GRAU1", aReader);
//d.cdTurma = "" + getString("CD_TURMA_T", aReader);
return d;
}
 
}
 
/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/domain/Disciplina.java
106,6 → 106,10
return cdTipologia;
}
 
public void setGrauCurso(String grauCurso) {
this.grauCurso = grauCurso;
}
 
@Override
public String toString() {
return "Disciplina{" +
/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportCourseService.java
17,17 → 17,15
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages;
import pt.estgp.estgweb.services.sigesimports.oracle.dao.DisciplinaDao;
import pt.estgp.estgweb.services.sigesimports.oracle.dao.connection.ConnectionManager;
import pt.estgp.estgweb.services.sigesimports.oracle.domain.Disciplina;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.utils.Email;
import pt.ipportalegre.siges.web.services.ArrayOfDisciplina;
import pt.ipportalegre.siges.web.services.Disciplina;
import pt.ipportalegre.siges.web.services.SiGesWEB;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import javax.xml.namespace.QName;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.*;
 
/**
42,6 → 40,7
int newUnits = 0;
int newCourses = 0;
int unitsRepeated = 0;
int unitsAtualizadas = 0;
public ILogMessages run(String year) throws ServiceException
{
String msgS = "STARTING COURSES IMPORT SERVICE FOR YEAR: " + year;
51,6 → 50,7
newUnits = 0;
newCourses = 0;
unitsRepeated = 0;
unitsAtualizadas = 0;
 
DefaultLogMessages logMessages = new DefaultLogMessages();
try
71,7 → 71,7
/**
* Build Course Units Maps
*/
SiGesWEB service;
/*SiGesWEB service;
String WSDL = DaoFactory.getConfigurationDaoImpl().getSigesWebServicesWsdl();
try
{
85,16 → 85,18
serviceLogError(logMessages.getLastMessage(), e);
return logMessages;
}
*/
DisciplinaDao service = DisciplinaDao.getInstance();
Connection conn = ConnectionManager.openConnection();
 
importUnitsSemestre(service,conn, "S1", year, disciplinasMap, disciplinasMapS1, cursosMap, logMessages);
importUnitsSemestre(service,conn, "S2", year, disciplinasMap, disciplinasMapS2, cursosMap, logMessages);
importUnitsSemestre(service,conn, "A", year, disciplinasMap, disciplinasMapA, cursosMap, logMessages);
importUnitsSemestre(service,conn, "T1", year, disciplinasMap, disciplinasMapT1, cursosMap, logMessages);
importUnitsSemestre(service,conn, "T2", year, disciplinasMap, disciplinasMapT2, cursosMap, logMessages);
importUnitsSemestre(service,conn, "T3", year, disciplinasMap, disciplinasMapT3, cursosMap, logMessages);
importUnitsSemestre(service,conn, "T4", year, disciplinasMap, disciplinasMapT4, cursosMap, logMessages);
 
importUnitsSemestre(service, "S1", year, disciplinasMap, disciplinasMapS1, cursosMap, logMessages);
importUnitsSemestre(service, "S2", year, disciplinasMap, disciplinasMapS2, cursosMap, logMessages);
importUnitsSemestre(service, "A", year, disciplinasMap, disciplinasMapA, cursosMap, logMessages);
importUnitsSemestre(service, "T1", year, disciplinasMap, disciplinasMapT1, cursosMap, logMessages);
importUnitsSemestre(service, "T2", year, disciplinasMap, disciplinasMapT2, cursosMap, logMessages);
importUnitsSemestre(service, "T3", year, disciplinasMap, disciplinasMapT3, cursosMap, logMessages);
importUnitsSemestre(service, "T4", year, disciplinasMap, disciplinasMapT4, cursosMap, logMessages);
 
/**
* Import Courses
*/
130,14 → 132,16
/**
* Update Course Units
*/
updateCourseUnits(disciplinasMapS1, "S1",logMessages,year,service);
updateCourseUnits(disciplinasMapS2, "S2",logMessages,year,service);
updateCourseUnits(disciplinasMapA, "A",logMessages,year,service);
updateCourseUnits(disciplinasMapT1, "T1",logMessages,year,service);
updateCourseUnits(disciplinasMapT2, "T2",logMessages,year,service);
updateCourseUnits(disciplinasMapT3, "T3",logMessages,year,service);
updateCourseUnits(disciplinasMapT4, "T4",logMessages,year,service);
updateCourseUnits(disciplinasMapS1, "S1",logMessages,year,service,conn);
updateCourseUnits(disciplinasMapS2, "S2",logMessages,year,service,conn);
updateCourseUnits(disciplinasMapA, "A",logMessages,year,service,conn);
updateCourseUnits(disciplinasMapT1, "T1",logMessages,year,service,conn);
updateCourseUnits(disciplinasMapT2, "T2",logMessages,year,service,conn);
updateCourseUnits(disciplinasMapT3, "T3",logMessages,year,service,conn);
updateCourseUnits(disciplinasMapT4, "T4",logMessages,year,service,conn);
 
conn.close();
 
serviceLogInfo("######################################");
serviceLogInfo("######################################");
serviceLogInfo("#Courses Imported:" + cursosMap.size());
150,7 → 154,8
serviceLogInfo("#Units Imported T4:" + disciplinasMapT4.size());
serviceLogInfo("#New Courses Found:" + newCourses);
serviceLogInfo("#New Units Found:" + newUnits);
serviceLogInfo("#Unidades Repetidas:" + unitsRepeated);
serviceLogInfo("#Regular Updated Units:" + unitsAtualizadas);
serviceLogInfo("#Unidades Repetidas (A mesma para o conjunto (Codigo,Curso,Ano,Semestre)):" + unitsRepeated);
 
logger.info("######################################");
logger.info("######################################");
164,7 → 169,8
logger.info("#Units Imported T4:" + disciplinasMapT4.size());
logger.info("#New Courses Found:" + newCourses);
logger.info("#New Units Found:" + newUnits);
logger.info("#Unidades Repetidas:" + unitsRepeated);
logger.info("#Regular Updated Units:" + unitsAtualizadas);
logger.info("#Unidades Repetidas (A mesma para o conjunto (Codigo,Curso,Ano,Semestre)):" + unitsRepeated);
 
 
}
210,21 → 216,21
 
}
 
private void importUnitsSemestre(SiGesWEB service,
private void importUnitsSemestre(DisciplinaDao service,
Connection conn,
String semestre,
String year,
HashMap<String, Disciplina> disciplinasMap,
HashMap<String, Disciplina> disciplinasMapSemestre,
HashMap<String, Disciplina> cursosMap,
DefaultLogMessages logMessages)
{
DefaultLogMessages logMessages) throws SQLException {
 
 
logMessages.addMessage(new DefaultLogMessage("import.semestre.course.units." + semestre, LogMessageTypeEnum.INFO));
serviceLogInfo("importing " + semestre + " course units");
logger.info("importing " + semestre + " course units");
ArrayOfDisciplina arrayOfDisciplina = service.getSiGesWEBSoap().getDisciplinasDaInstituicaoSemestre(new BigDecimal(DaoFactory.getConfigurationDaoImpl().getSigesInstitutionCode()), year, semestre);
List<Disciplina> disciplinas = arrayOfDisciplina.getDisciplina();
List<Disciplina> disciplinas = service.loadDisciplinas(DaoFactory.getConfigurationDaoImpl().getSigesInstitutionCode(), year, semestre,conn);
 
for (Disciplina d : disciplinas)
{
if (disciplinasMap.get(getDisciplinaUniqueRef(d)) != null)
241,11 → 247,11
 
private String getDisciplinaUniqueRef(Disciplina d)
{
return d.getCodigo().intValue() + ":" + d.getCodigoCurso() + ":" + d.getCdDuracao() + ":" + d.getCdTurma();
return d.getCodigo().intValue() + ":" + d.getCodigoCurso() + ":" + d.getCdDuracao(); // + ":" + d.getCdTurma();
}
 
public static final int SIGES_CODIGO_TIPO_DISCIPLINA_EXTRA_CURRICULAR = ConfigProperties.getIntProperty("siges.codigo.tipo.disciplina.extra.curricular");
private void updateCourseUnits(HashMap<String, Disciplina> disciplinasMapS, String semestre, DefaultLogMessages logMessages, String year,SiGesWEB service)
private void updateCourseUnits(HashMap<String, Disciplina> disciplinasMapS, String semestre, DefaultLogMessages logMessages, String year,DisciplinaDao service,Connection conn)
{
logMessages.addMessage(new DefaultLogMessage("import.semestre.updating.course.units." + semestre, LogMessageTypeEnum.INFO));
 
257,9 → 263,9
{
Disciplina d = entry.getValue();
//TIPO 6 é uma EXTRA CURRICULAR
if(d.getCdTipoDisciplina().longValue() == SIGES_CODIGO_TIPO_DISCIPLINA_EXTRA_CURRICULAR)
if(ImportStudentsService.isCursoFicticio(d.getCodigoCurso()))
{
logMessages.addMessage(new DefaultLogMessage("import.error","Ignorando disciplina com tipo = " + d.getCdTipoDisciplina(), "see log for details", LogMessageTypeEnum.WARNING));
logMessages.addMessage(new DefaultLogMessage("import.error","Ignorando disciplina com codigo de curso ficticio - codigo: " + d.getCodigoCurso(), " see log for details", LogMessageTypeEnum.WARNING));
logger.warn(logMessages.getLastMessage());
serviceLogWarn(logMessages.getLastMessage());
 
276,6 → 282,13
logger.fatal(logMessages.getLastMessage());
serviceLogWarn(logMessages.getLastMessage());
}
else if(cus != null && cus.size() == 1)
{
unitsAtualizadas++;
String msg = "Regular unit update: " + "(" + d.getCodigo() + ") curso: " + d.getCodigoCurso() + " " + semestre + " " + year;
logger.info(msg);
serviceLogInfo(msg);
}
 
 
if (cus == null || cus.size() == 0)
/impl/src/java/pt/estgp/estgweb/web/FtpServer.java
111,7 → 111,8
logger.warn("Cant login user: " + username);
}
}
errorMsg = "errors.ftp.unknown.error";
if(errorMsg == null)
errorMsg = "errors.ftp.unknown.error";
return null;
 
/* estava assim
/impl/src/java/pt/estgp/estgweb/web/FtpManager.java
63,10 → 63,16
{
items2import.add(item);
}
else
else if(stream != null && item.getName() != null)
{
logger.warn("ITEM:" + item.getName() + " not parameter and has ZERO BYTES will not import");
messageBack.addError(request,"errors.file.zero.bytes",item.getName());
String newFolder = (String) request.getAttribute("newFolder");
String deleteFile = (String) request.getAttribute("deleteFile");
String deleteFolder = (String) request.getAttribute("deleteFolder");
if((newFolder == null || newFolder.length() == 0) && (deleteFile == null || deleteFile.length() == 0) && (deleteFolder == null || deleteFolder.length() == 0))
{
logger.warn("ITEM:" + item.getName() + " not parameter and has ZERO BYTES will not import");
messageBack.addError(request,"errors.file.zero.bytes",item.getName());
}
}
}
String username = (String) request.getAttribute("username");
/impl/src/web/admin/announcements/submitTodoAnnouncement.jsp
26,7 → 26,12
request.setAttribute("fromAction", fromAction);
%>
 
<html:form action="${user}/submitTodoAnnouncement${fromAction}${from}" enctype="multipart/form-data">
 
<div class="container">
 
 
<html:form styleClass="form-horizontal" action="${user}/submitTodoAnnouncement${fromAction}${from}" enctype="multipart/form-data">
 
<html:hidden property="role"/>
<html:hidden property="announcementView.id"/>
<html:hidden property="smallImageStr"/>
35,15 → 40,15
<html:hidden property="announcementView.type" value="todo"/>
 
<input type="hidden" name="dispatch" value="removeRole">
<table class="form">
 
 
 
<baco:isAdmin>
<tr>
<th>
<bean:message key="announcement.status"/>
</th>
<td>
<html:select property="announcementView.status">
<div class="form-group">
<label class="control-label col-sm-2" for="status"><bean:message key="announcement.status"/></label>
<div class="col-sm-10">
<%--<input type="email" class="form-control" id="email">--%>
<html:select styleId="status" styleClass="form-control" property="announcementView.status">
<html:option value="true">
<bean:message key="yes"/>
</html:option>
51,18 → 56,17
<bean:message key="no"/>
</html:option>
</html:select>
</td>
</tr>
</div>
</div>
 
</baco:isAdmin>
 
<logic:present name="UserSession" property="user">
<logic:notEmpty name="UserSession" property="user.ownerRoles">
<tr>
<th>
<bean:message key="announcement.sendAnnouncementLike"/>
</th>
<td>
<html:select property="announcementView.choosedOwnerRole">
<div class="form-group">
<label class="control-label col-sm-2" for="ownerRole"><bean:message key="announcement.sendAnnouncementLike"/></label>
<div class="col-sm-10">
<html:select styleId="ownerRole" styleClass="form-control" property="announcementView.choosedOwnerRole">
<logic:iterate id="item" name="UserSession" property="user.ownerRoles">
<jomm:option itemName="item" comparableObjectName="AnnouncementsForm"
comparableObjectProperty="announcementView.choosedOwnerRole">
70,16 → 74,15
</jomm:option>
</logic:iterate>
</html:select>
</td>
</tr>
</div>
</div>
</logic:notEmpty>
</logic:present>
<tr>
<th>
<bean:message key="announcement.target.roles"/>
</th>
<td>
<html:select property="targetRolesStr">
 
<div class="form-group">
<label class="control-label col-sm-2" for="targetRoles"><bean:message key="announcement.target.roles"/></label>
<div class="col-sm-8">
<html:select styleId="targetRoles" styleClass="form-control" property="targetRolesStr">
<logic:present name="AnnouncementsForm" property="targetRoles">
<logic:iterate id="item" name="AnnouncementsForm" property="targetRoles">
<jomm:option itemName="item" comparableObjectName="AnnouncementsForm"
87,78 → 90,89
<bean:message key="user.role.${item}"/>
</jomm:option>
</logic:iterate>
<input type="button" value="<bean:message key="add"/>"
onclick="set(this.form,'addRole');this.form.submit();">
 
</logic:present>
</html:select>
</div>
<div class="col-sm-2">
<button type="button" class="btn btn-success" onclick="set(this.form,'addRole');this.form.submit();"><span class="glyphicon glyphicon-plus"></span></button>
</div>
 
</div>
<logic:present name="AnnouncementsForm" property="selectedRoles">
<logic:notEmpty name="AnnouncementsForm" property="selectedRoles">
<div class="form-group">
<label class="control-label col-sm-2" >Destinatários Seleccionados</label>
<div class="col-sm-10">
 
<logic:present name="AnnouncementsForm" property="selectedRoles">
<logic:notEmpty name="AnnouncementsForm" property="selectedRoles">
<table class="dataTable removeButton">
<logic:iterate id="item" name="AnnouncementsForm" property="selectedRoles">
<tr>
<th>
<div class="list-group">
<logic:iterate id="item" name="AnnouncementsForm" property="selectedRoles">
<div class="list-group-item">
<button type="button" class="btn btn-xs btn-danger"
onclick="AnnouncementsForm.role.value='${item}';set(this.form,'removeRole');this.form.submit();">
<span class="glyphicon glyphicon-remove"></span>
</button>
<bean:message key="user.role.${item}"/>
</th>
<td><input type="button" class="removeButton"
onclick="AnnouncementsForm.role.value='${item}';set(this.form,'removeRole');this.form.submit();">
</td>
</tr>
</logic:iterate>
</table>
</logic:notEmpty>
</logic:present>
</td>
</tr>
 
<tr>
<th>
<bean:message key="announcement.title"/>
*
</th>
<td>
<html:text styleClass="text" property="announcementView.title" maxlength="250"/>
</td>
</tr>
<tr>
<th>
<bean:message key="announcement.expireDate"/>
*
</th>
<td>
<a href="javascript:cal.select(getObjectById('expireDate'),'anchor2','yyyy/MM/dd')" name="anchor2" id="anchor2"><html:text styleClass="date" property="expireDate" styleId="expireDate" readonly="true"/></a>
<input type="button" class="removeButton" onClick="AnnouncementsForm.expireDate.value=null">
</td>
</tr>
<tr>
<th>
<bean:message key="announcement.linkAnnouncement"/>
</th>
<td>
<html:select property="urlProtocol">
 
 
</div>
</logic:iterate>
</div>
</div>
</div>
</logic:notEmpty>
</logic:present>
 
 
 
<div class="form-group">
<label class="control-label col-sm-2" for="title"><bean:message key="announcement.title"/> * </label>
<div class="col-sm-10">
<html:text styleId="title" styleClass="form-control" property="announcementView.title" maxlength="250"/>
</div>
 
</div>
 
 
<div class="form-group">
<label class="control-label col-sm-2" for="expireDate"><bean:message key="announcement.expireDate"/> * </label>
<div class="col-sm-8">
<a href="javascript:cal.select(getObjectById('expireDate'),'anchor2','yyyy/MM/dd')" name="anchor2" id="anchor2">
<html:text style="background-color: #f5f5f5" styleClass="date form-control" property="expireDate" styleId="expireDate" readonly="true"/>
</a>
</div>
<div class="col-sm-2">
<button type="button" class="btn btn-danger" onClick="AnnouncementsForm.expireDate.value=null"><span class="glyphicon glyphicon-remove"></span></button>
</div>
 
 
</div>
 
<div class="form-group">
<label class="control-label col-sm-2" for="linkAnnouncement"><bean:message key="announcement.linkAnnouncement"/> </label>
<div class="col-sm-2">
<html:select styleClass="form-control" property="urlProtocol">
<html:option value="http://">Http://</html:option>
<html:option value="ftp://">ftp://</html:option>
<html:option value="https://">Https://</html:option>
</html:select>
<html:text property="url" maxlength="250"/>
</td>
</tr>
<tr>
<th>
<bean:message key="announcement.text"/>
*
</th>
<td>
<html:textarea styleClass="textarea" property="announcementView.text"/>
</td>
</tr>
<tr class="buttons">
<td colspan="2">
<input type="button"
onclick="set(this.form,'save');this.form.submit()"
value="<bean:message key="confirm"/>"/>
</td>
</tr>
</table>
</html:form>
</div>
<div class="col-sm-8">
<html:text styleClass="form-control" styleId="linkAnnouncement" property="url" maxlength="250"/>
</div>
 
</div>
 
<div class="form-group">
<label class="control-label col-sm-2" for="text"><bean:message key="announcement.text"/> </label> *
<div class="col-sm-10">
<html:textarea styleId="text" styleClass="form-control" property="announcementView.text"/>
</div>
 
</div>
 
<button type="button" class="btn btn-success" onclick="set(this.form,'save');this.form.submit()"><bean:message key="confirm"/></button>
 
</html:form>
</div>
/impl/src/web/css/lavish-bootstrap.css
3531,7 → 3531,7
}
}
.navbar-collapse {
max-height: 340px;
 
overflow-x: visible;
padding-right: 15px;
padding-left: 15px;
4571,6 → 4571,15
text-decoration: none;
background-color: #f5f5f5;
}
 
.list-group-item-info {
color: #8a6100;
background-color: #ffdb96;
}
a.list-group-item-info,
button.list-group-item-info {
color: #8a6100;
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
4766,18 → 4775,18
border-bottom-color: #eed3d7;
}
.panel-info {
border-color: #bce8f1;
border-color: #e8d68a;
}
.panel-info > .panel-heading {
color: #3a87ad;
background-color: #d9edf7;
border-color: #bce8f1;
color: #8a6100;
background-color: #ffdb96;
border-color: #e8d68a;
}
.panel-info > .panel-heading + .panel-collapse .panel-body {
border-top-color: #bce8f1;
border-color: #e8d68a;
}
.panel-info > .panel-footer + .panel-collapse .panel-body {
border-bottom-color: #bce8f1;
border-color: #e8d68a;
}
.well {
min-height: 20px;
/impl/src/web/public/announcements/loadTodoAnnouncement.jsp
10,42 → 10,41
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<jsp:useBean id="Announcement" type="pt.estgp.estgweb.domain.views.AnnouncementView" scope="request"/>
<% UserSessionImpl userSession = (UserSessionImpl) UserSessionProxy.loadUserSession(request, response);%>
<div class="seccao">
 
<h2>${Announcement.title}
<baco:canManage name="Announcement">
<!--valid="false">-->
<%
String fromAction = "";
String user = "";
if(request.getParameter("from")!=null)
{
user = "/user";
fromAction = "From" + request.getParameter("from");
}
request.setAttribute("user",user);
request.setAttribute("fromAction",fromAction);
%>
<html:link action="${user}/startEditAnnouncement${fromAction}?id=${Announcement.id}">
<bean:message key="edit"/>
</html:link>
<html:link action="${user}/startDeleteAnnouncement${fromAction}?id=${Announcement.id}">
<bean:message key="delete"/>
</html:link>
</baco:canManage>
</h2>
<div class="panel panel-info">
<div class="panel-heading">
${Announcement.title}
<baco:canManage name="Announcement">
<!--valid="false">-->
<%
String fromAction = "";
String user = "";
if(request.getParameter("from")!=null)
{
user = "/user";
fromAction = "From" + request.getParameter("from");
}
request.setAttribute("user",user);
request.setAttribute("fromAction",fromAction);
%>
<html:link styleClass="btn btn-default" action="${user}/startEditAnnouncement${fromAction}?id=${Announcement.id}">
<bean:message key="edit"/>
</html:link>
<html:link styleClass="btn btn-danger" action="${user}/startDeleteAnnouncement${fromAction}?id=${Announcement.id}">
<bean:message key="delete"/>
</html:link>
</baco:canManage>
</div>
<div class="panel-body">
 
<table>
<tr>
<td valign="top">
<img width="150px" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imgs/todoMini.jpg">
</td>
<td valign="top">${Announcement.formatedText}</td>
</tr>
<img style="float: left;margin: 10px;" width="150px" alt="<%=Announcement.getTitle()%>" src="<%=request.getContextPath()%>/imgs/todoMini.jpg">
 
<p class="lead">${Announcement.formatedText}</p>
 
<logic:notEmpty name="Announcement" property="url">
<tr>
<td colspan="2"> &nbsp;&nbsp;&gt;&gt; <html:link href="${Announcement.url}">${Announcement.url}</html:link></td>
</tr>
<html:link styleClass="btn btn-success" href="${Announcement.url}">Entrar na tarefa</html:link>
</logic:notEmpty>
</table>
 
</div>
</div>
 
/impl/src/web/user/courseunits/menu.jsp
157,7 → 157,9
 
CourseUnitContentsGrants contentsGrants = CourseUnitContentsGrants.parse(CourseUnitView.getContentsGrants());
if ( contentsGrants == CourseUnitContentsGrants.PUBLIC ||
if ( userSession.getUser().isSuperuserOrAdmin() ||
userSession.getUser().hasRole("services") ||
contentsGrants == CourseUnitContentsGrants.PUBLIC ||
(contentsGrants == CourseUnitContentsGrants.INTERNAL && UserSessionProxy.isAuthenticated(request)) ||
(contentsGrants == CourseUnitContentsGrants.PRIVATE && UserSessionProxy.isAuthenticated(request) &&
(((UserImpl) ((userSession.getUser()))).isTeacherOfCourseUnit(CourseUnitView.getId()) ||