Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 420 → Rev 430

/impl/conf/language/MessageResourcesIntranet.properties
51,12 → 51,14
intranet.home.curricular=Consulta de Material Curricular
 
 
intranet.quotas.error=<p class="statusERROR">Serviço de quotas de impressão não disponível</p>
intranet.quotas.impressoras=Impressoras
intranet.quotas.disponiveis=Quotas Disponíveis
intranet.quotas.donaldPreto=Donald (Preto)
intranet.quotas.billCor=Bill (Cor)
 
 
 
 
 
 
 
 
 
/impl/conf/language/MessageResourcesProfile.properties
77,6 → 77,7
profile.record.deleted.sucess=Registo apagado com sucesso
profile.email.change=*Para alterar o seu email dirija-se aos serviços centrais
profile.record.confirm.delete=Tem a certeza que deseja apagar esta entrada do curriculum?
profile.confirm.delete=Tem a certeza que deseja apagar este utilizador, (Se for aluno os seus trabalhos de unidades irão manter-se no sistema)?
#Dublin Core Fields
profile.record.file=Ficheiro Electrónico
profile.record.file.access=Acesso ao Ficheiro
/impl/conf/WEB-INF/web.xml
208,6 → 208,10
<servlet-name>repositoryStream</servlet-name>
<servlet-class>pt.estgp.estgweb.web.RepositoryStream</servlet-class>
</servlet>
<servlet>
<servlet-name>ServicosImpressao</servlet-name>
<servlet-class>pt.estgp.estgweb.web.ajaxapis.ServicosImpressao</servlet-class>
</servlet>
 
 
 
272,6 → 276,10
<servlet-name>BlogServlet</servlet-name>
<url-pattern>/blogspot/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServicosImpressao</servlet-name>
<url-pattern>/user/ajaxapis/ServicosImpressao</url-pattern>
</servlet-mapping>
 
<!--START FILES-->
<welcome-file-list>
/impl/conf/app.properties
63,7 → 63,7
module.intranet=true
module.profile=true
module.sms=false
 
module.quotasImpressao=true
##################################################
# SMS
#
249,6 → 249,7
url.stat.ignore.prefix.6=/js/
url.stat.ignore.prefix.7=/auth/
url.stat.ignore.prefix.8=/imageStream
url.stat.ignore.prefix.9=/ajaxapis
 
 
 
278,6 → 279,7
filter.ignore.prefix.4=/css
filter.ignore.prefix.5=/imageStream
filter.ignore.prefix.6=/imgs
filter.ignore.prefix.7=/ajaxapis
 
 
#See java.text.SimpleDateFormat
414,3 → 416,13
home.courseunit.last.anouncements.max=3
 
 
#########################################
# Servicos de Impressao API
#
########################################
impressao.servicos.api=http://www.global.estgp.pt/API/XMLImpressao.asp
impressao.servicos.auth=true
impressao.servicos.auth.user.property=ionline.user
impressao.servicos.auth.pass.property=ionline.pass
impressao.servicos.auth.user=
impressao.servicos.auth.pass=
/impl/src/java/pt/estgp/estgweb/Globals.java
49,8 → 49,34
}
}
 
 
 
public static final String INTRANET_IMPRESSAO_SERVICO_API = ConfigProperties.getProperty("impressao.servicos.api");
public static final boolean INTRANET_IMPRESSAO_SERVICO_AUTH = ConfigProperties.getBooleanProperty("impressao.servicos.auth");
 
public static final String INTRANET_IMPRESSAO_SERVICO_AUTH_USER_PROPERTY = ConfigProperties.getProperty("impressao.servicos.auth.user.property");
public static final String INTRANET_IMPRESSAO_SERVICO_AUTH_PASS_PROPERTY = ConfigProperties.getProperty("impressao.servicos.auth.pass.property");
public static String INTRANET_IMPRESSAO_SERVICO_AUTH_USER = ConfigProperties.getProperty("impressao.servicos.auth.user");
public static String INTRANET_IMPRESSAO_SERVICO_AUTH_PASS = ConfigProperties.getProperty("impressao.servicos.auth.pass");
 
static
{
if(INTRANET_IMPRESSAO_SERVICO_AUTH)
{
if(INTRANET_IMPRESSAO_SERVICO_AUTH_USER_PROPERTY != null && INTRANET_IMPRESSAO_SERVICO_AUTH_USER_PROPERTY.length() > 0)
{
INTRANET_IMPRESSAO_SERVICO_AUTH_USER = ConfigProperties.getProperty(INTRANET_IMPRESSAO_SERVICO_AUTH_USER_PROPERTY);
INTRANET_IMPRESSAO_SERVICO_AUTH_PASS = ConfigProperties.getProperty(INTRANET_IMPRESSAO_SERVICO_AUTH_PASS_PROPERTY);
}
else
{
INTRANET_IMPRESSAO_SERVICO_AUTH_USER = ConfigProperties.getProperty("impressao.servicos.auth.user");
INTRANET_IMPRESSAO_SERVICO_AUTH_PASS = ConfigProperties.getProperty("impressao.servicos.auth.pass");
}
}
 
}
 
public static final String INTRANET_CONTENTS = ConfigProperties.getProperty("intranet.contents.dir");
public static final String INTRANET_GRADES = ConfigProperties.getProperty("intranet.grades.dir");
public static final String INTRANET_PRESENCES = ConfigProperties.getProperty("intranet.presences.dir");
/impl/src/java/pt/estgp/estgweb/services/courseunits/CourseUnitWorkService.java
183,16 → 183,30
String identifier = repositoryService.storeRepositoryFile(file, contentType, extension, size, name, "courseunit.assignement " + assignement.getCourseUnit().getName() + " of " + userSession.getUser().getUsername(), ResourceAccessControlEnum.courseunitDeliverableDomain,userSession);
deliverable.setDeliverableRepositoryStream(identifier);
deliverable.setCourseUnitAssignement(assignement);
deliverable.setStudent((Student) userSession.getUser());
setStudentWorkDetails(deliverable,userSession);
DaoFactory.getCourseUnitDeliverableDaoImpl().save(deliverable);
}
else
{
setStudentWorkDetails(deliverable,userSession);
repositoryService.updateRepositoryFile(deliverable.getDeliverableRepositoryStream(), file, contentType, extension, size, name, "courseunit.assignement " + assignement.getCourseUnit().getName() + " of " + userSession.getUser().getUsername(), ResourceAccessControlEnum.courseunitDeliverableDomain);
}
deliverable.setDeliverDate(new Date());
return loadCourseUnitWorks(courseUnitId,userSession);
}
 
private void setStudentWorkDetails(CourseUnitDeliverable deliverable, UserSession userSession)
{
deliverable.setStudent((Student) userSession.getUser());
deliverable.setStudentId(userSession.getUser().getId());
deliverable.setStudentUsername(userSession.getUsername());
deliverable.setStudentName(userSession.getUser().getName());
if(userSession.getUser() instanceof SigesUser)
deliverable.setStudentCode("" + ((SigesUser)userSession.getUser()).getSigesCode());
else
logger.error("BACO APPLICATION ERROR Student should be of type SigesUser");
}
 
//todo alterar o dominio de filtragem
 
 
/impl/src/java/pt/estgp/estgweb/services/ftpservices/FtpService.java
72,7 → 72,27
{
for(FileItem item: ftpRequestForm.getFilesToImport())
{
if(!client.storeFile(item.getName(),item.getInputStream()))
 
String name = item.getName();
 
if(name != null)
{
 
if(name.length() > 2 && name.charAt(1)==':')
{
 
String[] names = name.split("\\\\");
 
name = names[names.length - 1];
}
else
{
name = new File(item.getName()).getName();
}
}
 
 
if(!client.storeFile(name,item.getInputStream()))
result = "errors.ftp.no.permission";
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseUnitDeliverableDaoImpl.java
2,6 → 2,7
 
import org.hibernate.Query;
import static org.hibernate.criterion.Restrictions.*;
import org.hibernate.criterion.Order;
import pt.estgp.estgweb.domain.CourseUnitDeliverable;
 
/**
41,7 → 42,10
(CourseUnitDeliverable)
createCriteria()
.add(eq("courseUnitAssignement.id",workId))
.add(eq("student.id",studentId)).uniqueResult();
.add(eq("student.id",studentId))
.addOrder(Order.desc("deliverDate"))
.setMaxResults(1)
.uniqueResult();
}
 
public CourseUnitDeliverable loadDeliverableByRepositoryId(String repositoryStreamId)
/impl/src/java/pt/estgp/estgweb/domain/views/UserView.java
56,6 → 56,9
private String scholarDegree;
private String academicDegree;
 
//This field should be set true when a user View is representing a deleted user
private boolean deleted = false;
 
private List<RecordView> creatorRecords;
private List<RecordView> contributorRecords;
 
69,6 → 72,11
public UserView(User user)
{
super(user);
if(user == null)
{
this.deleted = true;
return;
}
this.user = user;
this.id = user.getId();
this.name=user.getName();
339,7 → 347,12
}
 
public String getName() {
return name;
if(deleted)
{
return "(Apagado do Sistema) " + name;
}
else
return name;
}
 
public void setName(String name) {
624,6 → 637,16
this.ext = ext;
}
 
public boolean isDeleted()
{
return deleted;
}
 
public void setDeleted(boolean deleted)
{
this.deleted = deleted;
}
 
// public List<Course> getCourses()
// {
// if(courses == null)
/impl/src/java/pt/estgp/estgweb/domain/views/DomainObjectView.java
33,8 → 33,8
public DomainObjectView(DomainObject obj)
{
this.saveDate = obj.getSaveDate();
 
if(obj != null)
this.saveDate = obj.getSaveDate();
}
 
public String getFormatedSaveDate()
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitDeliverableView.java
55,8 → 55,17
this.fileStreamId = courseUnitDeliverable.getDeliverableRepositoryStream();
this.deliverDate = courseUnitDeliverable.getDeliverDate();
this.deliverDateStr = DatesUtils.getStringFromDate(deliverDate);
if(courseUnitDeliverable.getStudent() != null)
this.student = new UserView(courseUnitDeliverable.getStudent());
//if is null will create a userview even if deleted
this.student = new UserView(courseUnitDeliverable.getStudent());
if(this.student.isDeleted() && courseUnitDeliverable.getStudentId() > 0)
{
this.student.setDeleted(true);
this.student.setId(courseUnitDeliverable.getStudentId());
this.student.setUsername(courseUnitDeliverable.getStudentUsername());
this.student.setName(courseUnitDeliverable.getStudentName());
if(courseUnitDeliverable.getStudentCode() != null)
this.student.setCode(Integer.parseInt(courseUnitDeliverable.getStudentCode()));
}
this.courseUnitAssignementView = courseUnitAssignementView;
}
 
/impl/src/java/pt/estgp/estgweb/web/ajaxapis/ServicosImpressao.java
New file
0,0 → 1,120
package pt.estgp.estgweb.web.ajaxapis;
 
 
import jomm.utils.StreamsUtils;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.web.UserSessionProxy;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.MalformedURLException;
 
import org.apache.log4j.Logger;
 
/**
* @author Jorge
* @date 24/Mar/2009
* @time 3:25:40
*/
public class ServicosImpressao extends HttpServlet
{
private static final Logger logger = Logger.getLogger(ServicosImpressao.class);
 
protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException
{
doPost(httpServletRequest, httpServletResponse);
}
 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
StringBuffer sbResponse = new StringBuffer();
 
DataOutputStream out;
 
 
try
{
sbResponse = new StringBuffer();
 
java.net.URL programUrl = new java.net.URL(Globals.INTRANET_IMPRESSAO_SERVICO_API + "?username=" + UserSessionProxy.loadUserSession(request,response).getUsername());
 
 
java.net.HttpURLConnection connection = (java.net.HttpURLConnection)programUrl.openConnection();
if(Globals.INTRANET_IMPRESSAO_SERVICO_AUTH)
{
String user = Globals.INTRANET_IMPRESSAO_SERVICO_AUTH_USER;
String pass = Globals.INTRANET_IMPRESSAO_SERVICO_AUTH_PASS;
String encoding = new sun.misc.BASE64Encoder().encode((user + ":" + pass).getBytes());
connection.setRequestProperty ("Authorization", "Basic " + encoding);
}
 
(connection).setRequestMethod("POST");
connection.setDoOutput(true);
connection.setDoInput(true); //Only if you expect to read a response...
connection.setUseCaches(false); //Highly recommended...
connection.setAllowUserInteraction(true);
connection.setFollowRedirects(true);
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty ("Content-Type",
"application/x-www-form-urlencoded");
 
// System.out.println(request.getParameter("request"));
// System.out.println(request.getParameter("showmap"));
 
 
 
// out = new DataOutputStream(connection.getOutputStream());
// String content = "request=" + URLEncoder.encode (request.getParameter("request"))
// + "&showmap=" + URLEncoder.encode (request.getParameter("showmap"));
System.out.println("\n" + "sending form to HTTP server ...");
// out.writeBytes (content);
// out.flush ();
// out.close ();
 
 
// PrintWriter output = new PrintWriter(new OutputStreamWriter(connection.getOutputStream()));
// output.print("request="+ URIUtil.encodeQuery(request.getParameter("request")));
// output.print("&showmap=" + URIUtil.encodeQuery(request.getParameter("showmap")));
// //output.flush();
// output.close();
 
 
BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
 
String line;
 
while ((line = rd.readLine()) != null)
{
sbResponse.append(line);
}
 
rd.close();
 
} catch (MalformedURLException e)
{
sbResponse.setLength(0);
sbResponse.append(e.getMessage());
e.printStackTrace();
response.sendError(500);
} catch (IOException e)
{
e.printStackTrace();
sbResponse.setLength(0);
sbResponse.append(e.getMessage());
response.sendError(500);
}
catch (Throwable throwable)
{
logger.error(throwable,throwable);
response.sendError(500);
}
 
response.setContentType("text/xml");
PrintWriter pw = new PrintWriter(response.getOutputStream());
pw.write(sbResponse.toString());
pw.close();
}
}
/impl/src/updates/db/update3.sql
New file
0,0 → 1,2
 
ALTER TABLE `courseunitdeliverable` ADD COLUMN `studentId` BIGINT(20) NOT NULL default '0' AFTER `obs` , ADD COLUMN `studentUsername` VARCHAR(255) AFTER `studentId`, ADD COLUMN `studentCode` VARCHAR(255) AFTER `studentUsername`, ADD COLUMN `studentName` VARCHAR(255) AFTER `studentCode`, ADD INDEX `studentUsernameIndex`(`studentUsername`), ADD INDEX `studentNameIndex`(`studentName`), ADD INDEX `studentCodeIndex`(`studentCode`);
/impl/src/hbm/pt/estgp/estgweb/domain/GenericUser.hbm.xml
94,6 → 94,10
<key column="student"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUnitGrade"/>
</set>
<set name="deliverables" lazy="true" order-by="deliverDate asc">
<key column="student"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUnitDeliverable"/>
</set>
<subclass name="pt.estgp.estgweb.domain.StudentImpl" discriminator-value="StudentImpl"/>
</subclass>
<subclass name="pt.estgp.estgweb.domain.Teacher">
/impl/src/hbm/pt/estgp/estgweb/domain/CourseUnit.hbm.xml
113,6 → 113,10
<property name="deliverDate" type="timestamp"/>
<property name="grade" type="string"/>
<property name="obs" type="text"/>
<property name="studentId" type="long"/>
<property name="studentUsername" type="string"/>
<property name="studentCode" type="string"/>
<property name="studentName" type="string"/>
<property name="deliverableRepositoryStream" type="string" index="deliverableRepositoryStreamIndex"/>
<many-to-one name="courseUnitAssignement" class="pt.estgp.estgweb.domain.CourseUnitAssignement" lazy="false" outer-join="true"/>
<many-to-one name="student" class="pt.estgp.estgweb.domain.Student" lazy="false" outer-join="true"/>
/impl/src/web/admin/profile/profilePersonalData.jsp
161,7 → 161,7
</td>
</tr>
</baco:hasNotRole>
<baco:hasRole role="teacher">
<baco:isAdmin>
<tr>
<th>
<bean:message key="profile.academic.degree"/>
175,7 → 175,7
</html:select>
</td>
</tr>
</baco:hasRole>
</baco:isAdmin>
<tr>
<th>
<bean:message key="bi"/>
/impl/src/web/admin/profile/findUser.jsp
51,7 → 51,7
<td>${userView.name}</td>
<td>${userView.email}</td>
<td><html:link action="/user/startProfileFromSearchUsers?id=${userView.id}"><bean:message key="edit"/></html:link></td>
<td><html:link action="/user/startDeleteProfileFromSearchUsers?id=${userView.id}"><bean:message key="delete"/></html:link></td>
<td><a href="<%=request.getContextPath()%>/user/startDeleteProfileFromSearchUsers.do?id=${userView.id}" onclick="return confirm('<bean:message key="profile.confirm.delete"/>')"><bean:message key="delete"/></a></td>
<td></td>
</tr>
</logic:iterate>
/impl/src/web/css/style.css
1487,11 → 1487,12
{
border-top:1px solid #8ec73f;
}
.remindersContainer
.remindersContainer, .quotasImpressaoContainer
{
vertical-align:top;
}
.remindersContainer input { width:85px }
 
.reminders
{
vertical-align:top;
1501,7 → 1502,7
padding:0;
margin:0;
}
.reminders #reminderForm
.reminders #reminderForm, #quotasImpressao
{
border: 1px solid #8ec73f;
margin-top:4px;
/impl/src/web/js/ajax.js
33,7 → 33,7
return;
}
var finalParams = "";
var url= navjsp;
var url = location.href.substring(0,location.href.indexOf('/',location.href.indexOf("://")+3)) + navjsp;
if(params != null && params.length > 0)
{
//url=url+"?"+ params;
42,7 → 42,8
var paramsArray = params.split("&");
var i;
var union = '';
for(i = 0; i < paramsArray.length; i++){
for(i = 0; i < paramsArray.length; i++)
{
var parameter = paramsArray[i].split("=");
if(parameter.length == 2)
{
445,10 → 446,84
}
 
 
/******************************
* Cotas de Impressao
******************************/
var quotasDiv;
var xmlHttpQuotas;
var quotasErrorMsg;
var impressorasMsg;
var quotasDisponiveisMsg;
var donaldPretoMsg;
var billCorMsg;
 
function loadQuotas(div,action,_quotasErrorMsg, _impressorasMsg, _quotasDisponiveisMsg, _donaldPretoMsg, _billCorMsg)
{
 
quotasDiv = div;
quotasErrorMsg = _quotasErrorMsg;
impressorasMsg = _impressorasMsg;
quotasDisponiveisMsg = _quotasDisponiveisMsg;
donaldPretoMsg = _donaldPretoMsg;
billCorMsg = _billCorMsg;
if(!xmlHttpQuotas)
xmlHttpQuotas = GetXmlHttpObject(stateChangedLoadQuotasCall);
startRequest(xmlHttpQuotas,"","",stateChangedLoadQuotasCall,"",action);
}
function stateChangedLoadQuotasCall()
{
if (xmlHttpQuotas.readyState==4 || xmlHttpQuotas.readyState=="complete")
{
putQuotasImpressao(xmlHttpQuotas.responseXML);
}
}
 
function putQuotasImpressao(xmlData)
{
if(xmlData == null)
{
getObjectById(quotasDiv).innerHTML=quotasErrorMsg;
}
else
{
var pretoTr = xmlData.getElementsByTagName('preto')[0].getElementsByTagName("tr")[0];
var corTr = xmlData.getElementsByTagName('cor')[0].getElementsByTagName("tr")[0];
if(pretoTr == null || corTr == null)
{
getObjectById(quotasDiv).innerHTML=quotasErrorMsg;
}
else
{
var copiasImpressasPreto = pretoTr.getElementsByTagName('td')[1].textContent;
var copiasDisponiveisPreto = pretoTr.getElementsByTagName('td')[2].textContent;
var copiasImpressasCor = corTr.getElementsByTagName('td')[1].textContent;
var copiasDisponiveisCor = corTr.getElementsByTagName('td')[2].textContent;
var response = "";
response += "<table class=\"dataTable\">\n";
response += " <tr>\n";
response += " <th>" + impressorasMsg + "</th>\n";
response += " <th>" + quotasDisponiveisMsg + "</th>\n";
response += " </tr>\n";
response += " <tr>\n";
response += " <th>" + donaldPretoMsg + "</th>\n";
if(copiasDisponiveisPreto == '0')
response += "<td align=\"right\" style=\"color:red\">"+ copiasDisponiveisPreto +"</td>\n"
else
response += "<td align=\"right\" style=\"color:green\">"+ copiasDisponiveisPreto +"</td>\n"
response += " </tr>\n";
response += " <tr>\n";
response += " <th>" + billCorMsg + "</th>\n";
if(copiasDisponiveisCor == '0')
response += "<td align=\"right\" style=\"color:red\">"+ copiasDisponiveisCor +"</td>\n"
else
response += "<td align=\"right\" style=\"color:green\">"+ copiasDisponiveisCor +"</td>\n"
response += " </tr>\n";
 
response += "</table>\n";
getObjectById(quotasDiv).innerHTML=response;
}
}
}
 
 
 
460,3 → 535,7
 
 
 
 
 
 
 
/impl/src/web/public/profile/profileHome.jsp
64,6 → 64,7
if(ProfileForm.getUserView().getUser() instanceof Teacher && ProfileForm.getUserView().getAcademicDegree() != null && ProfileForm.getUserView().getAcademicDegree().trim().length() > 0)
{
%>
<baco:isAdmin>
<tr>
<th>
<bean:message key="profile.academic.degree"/>
72,6 → 73,7
<bean:message key="profile.academic.degree.${ProfileForm.userView.academicDegree}"/>
</td>
</tr>
</baco:isAdmin>
<%
}
%>
/impl/src/web/public/announcements/announcementsPortalRight.jsp
40,6 → 40,11
<table>
<baco:isAuthenticated>
<tr>
<td colspan="2" class="quotasImpressaoContainer">
<jsp:include page="/user/quotasImpressao/quotasImpressao.jsp"/>
</td>
</tr>
<tr>
<td colspan="2" class="remindersContainer">
<jsp:include page="/user/reminders/reminders.jsp"/>
</td>
/impl/src/web/user/quotasImpressao/quotasImpressao.jsp
New file
0,0 → 1,19
<%@ 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" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
 
<baco:isModuleOn module="quotasImpressao">
 
<script type="text/javascript" language="JavaScript1.3">
<!--
loadQuotas('quotasImpressao','<%=request.getContextPath()%>/user/ajaxapis/ServicosImpressao','<bean:message key="intranet.quotas.error"/>','<bean:message key="intranet.quotas.impressoras"/>','<bean:message key="intranet.quotas.disponiveis"/>','<bean:message key="intranet.quotas.donaldPreto"/>','<bean:message key="intranet.quotas.billCor"/>');
-->
</script>
 
<div id="quotasImpressao"></div>
 
</baco:isModuleOn>
/impl/src/web/user/reminders/reminders.jsp
26,15 → 26,16
{
%>
setActiveReminders(<%=reminders.getActiveReminders().size()%>);
<% }
<%
}
if(reminders.getExpiredReminders() != null)
{
%>
setExpiredReminders(<%=reminders.getExpiredReminders().size()%>);
-->
<%
}
%>
-->
</script>
 
<jsp:useBean id="IOwnedReminders" type="pt.estgp.estgweb.services.reminders.IOwnedReminders" scope="request"/>