Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 269 → Rev 312

/impl/importRoutines.xml
New file
0,0 → 1,19
<?xml version="1.0" encoding="UTF-8"?>
<project name="estgweb-import" basedir="." default="help">
 
 
<import file="build.xml"/>
 
 
<target name="courses">
<java classname="pt.estgp.estgweb.services.sigesimports.ImportCourseService" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
</target>
<target name="teachers">
<java classname="pt.estgp.estgweb.services.sigesimports.ImportTeachersService" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
</target>
<target name="students">
<java classname="pt.estgp.estgweb.services.sigesimports.ImportStudentsService" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>
</target>
 
 
</project>
/impl/conf/language/MessageResourcesProfile.properties
7,6 → 7,10
 
profile=Perfil Pessoal
 
 
profile.bad.profile.teacher.iregular.user.class=Existe um problema com o seu perfil. Aparentemente o papel de professor que lhe foi atribuido não foi reconhecido pelo sistema central. Por favor dirija-se ao centro informatico e reporte o problema para que a situação seja corrigida. Pedimos desculpa pelo incómodo.
profile.bad.profile.student.iregular.user.class=Existe um problema com o seu perfil. Aparentemente o papel de estudante que lhe foi atribuido não foi reconhecido pelo sistema central. Por favor dirija-se ao centro informatico e reporte o problema para que a situação seja corrigida. Pedimos desculpa pelo incómodo.
 
#Degrees
profile.scholar.degree.notset=Não disponivel
profile.scholar.degree=Escolaridade
/impl/conf/language/MessageResourcesCourseUnits.properties
16,6 → 16,11
 
courseunit.program.description=Programa Curricular de {0}
 
courseunit.program.archive=Arquivo
 
courseunit.to.add.students.save.first=Para adicionar alunos salve primeiro a unidade curricular e volte aqui.
courseunit.to.add.teachers.save.first=Para adicionar docentes salve primeiro a unidade curricular e volte aqui.
 
courseunit.zero.units=Nenhuma Unidade Curricular
courseunit.objectives.todo=Peenchimento dos objectivos da unidade
courseunit.program.todo=Upload do programa da unidade
/impl/conf/WEB-INF/web.xml
13,6 → 13,10
<filter-class>pt.estgp.estgweb.web.filters.UserSessionFilter</filter-class>
</filter>
<filter>
<filter-name>TopImageFilter</filter-name>
<filter-class>pt.estgp.estgweb.web.filters.TopImageFilter</filter-class>
</filter>
<filter>
<filter-name>UserFilter</filter-name>
<filter-class>pt.estgp.estgweb.web.filters.UserFilter</filter-class>
</filter>
42,6 → 46,10
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>TopImageFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Set-Character-Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
/impl/conf/log4j.properties
26,7 → 26,7
 
 
#default category
log4j.rootLogger = info, defaultLog, stdout
log4j.rootLogger = @log.level@, defaultLog, stdout
 
### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
/impl/conf/app.properties
59,6 → 59,10
sms.courseunit.announcement.only.profs=true
sms.new.grades=true
 
#####################################################
##
## Job Deamon seconds
job.deamon.sleep.seconds=30
 
##################################################
##Proxy Servers
66,13 → 70,14
server.ionline=ftp://www.global.estgp.pt
#server.ionline.start.path=
#TODO USAR a de baixo quando testar as unidades curriculares
server.ionline.start.path=/Eramus/Baco
server.ionline.start.path=
#server.ionline.start.path=/Eramus/Baco
ionline.pass=baco
ionline.user=Baco_web
 
server.estgp=http://localhost:8080
server.estgp=http://www.estgp.pt
estgp.encoding=ISO-8859-1
server.estgp.start.path=/templates
server.estgp.start.path=/testes/nova_web
 
#server.estgp=http://www.estgp.pt/testes/nova_web
#estgp.encoding=UTF-8
326,3 → 331,19
 
 
 
#########################################################################
#
#TopImage Filter Links
#
 
top.image.1.start.with=/
top.image.1=/imgs/top.jpg
 
top.image.start.with.2=/student.do?role=student&menu=menu.alunos
top.image.url.2=/imgs/topStudents.jpg
 
 
 
 
 
 
/impl/conf/hibernate.cfg.xml
10,20 → 10,25
<property name="connection.password">@database.password@</property>
<property name="connection.autocommit">false</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.autoReconnect">true</property>
<property name="hibernate.connection.autoReconnectForPools">true</property>
<property name="show_sql">@hibernate.show.sql@</property>
<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="connection.pool_size">10</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">1800</property>
<!--<property name="connection.pool_size">2</property>-->
<property name="hibernate.transaction.auto_close_session">true</property>
<property name="hibernate.connection.release_mode">after_transaction</property>
<property name="hibernate.c3p0.min_size">2</property>
<property name="hibernate.c3p0.max_size">30</property>
<property name="hibernate.c3p0.timeout">500</property>
<property name="hibernate.max_statements">50</property>
 
 
<!--<property name="current_session_context_class">org.hibernate.context.CurrentSessionContext</property>-->
<!--<property name="current_session_context_class">org.hibernate.context.JTASessionContext</property>-->
<!--<property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.TransactionManagerLookup</property>-->
<property name="current_session_context_class">org.hibernate.context.ThreadLocalSessionContext</property>
<!--<property name="current_session_context_class">org.hibernate.context.ThreadLocalSessionContext</property>-->
<property name="current_session_context_class">thread</property>
 
{0}
</session-factory>
</hibernate-configuration>
</hibernate-configuration>
/impl/src/java/jomm/utils/StreamsUtils.java
37,6 → 37,7
 
public static void inputStream2File(InputStream stream, File f) throws IOException
{
f.getParentFile().mkdirs();
FileOutputStream out = new FileOutputStream(f);
inputStream2OutputStream(stream,out);
}
/impl/src/java/jomm/utils/StringsUtils.java
50,6 → 50,14
{
finalFormatedText.append("&nbsp;&nbsp;&nbsp;&nbsp;");
}
else if (text.charAt(i) == '<')
{
finalFormatedText.append("&lt;");
}
else if (text.charAt(i) == '>')
{
finalFormatedText.append("&gt;");
}
else
{
finalFormatedText.append(text.charAt(i));
59,6 → 67,31
return finalFormatedText.toString();
}
 
public static String getEscapeHtmlText(String text)
{
if (text == null || text.trim().length() == 0)
return "";
 
StringBuilder finalFormatedText = new StringBuilder();
boolean newLine = true;
for (int i = 0; i < text.length(); i++)
{
if (text.charAt(i) == '<')
{
finalFormatedText.append("&lt;");
}
else if (text.charAt(i) == '>')
{
finalFormatedText.append("&gt;");
}
else
{
finalFormatedText.append(text.charAt(i));
}
}
return finalFormatedText.toString();
}
 
public static boolean checkLetters09AZazHiffenUnderScore(String candidate)
{
if (candidate == null)
/impl/src/java/pt/estgp/estgweb/utils/Email.java
8,6 → 8,8
import java.util.Properties;
import java.util.List;
import java.util.ArrayList;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.text.MessageFormat;
import java.io.Serializable;
 
64,4 → 66,28
{
return arguments;
}
 
public static boolean validEmail(String email)
{
if(email == null)
return false;
Pattern p = Pattern.compile(".+@.+\\.[a-z]+");
//Match the given string with the pattern
Matcher m = p.matcher(email);
//check whether match is found
return m.matches();
}
 
public static void main( String[] args )
{
System.out.println(validEmail(""));
System.out.println(validEmail("d.@"));
System.out.println(validEmail("asd@."));
System.out.println(validEmail("a.sd@.p"));
System.out.println(validEmail("@t.pt"));
System.out.println(validEmail("e@.e"));
System.out.println(validEmail("e@"));
System.out.println(validEmail("e@e.pt"));
System.out.println(validEmail("jmachado@estgp.pt"));
}
}
/impl/src/java/pt/estgp/estgweb/Globals.java
86,6 → 86,10
public static final List<String> FILTER_IGNORE_EXTENSIONS = ConfigProperties.getListValues("filter.ignore.extension");
public static final List<String> FILTER_IGNORE_PREFIXES = ConfigProperties.getListValues("filter.ignore.prefix");
 
public static final List<String> TOP_IMAGE_FILTER_LINKS = ConfigProperties.getListValues("top.image.start.with");
public static final List<String> TOP_IMAGE_FILTER_IMAGES_URL = ConfigProperties.getListValues("top.image.url");
 
 
public static final String SITE_URL = ConfigProperties.getProperty("site.url");
 
public static final String INTRANET_MESSAGES_PREFIX = "intranet.";
142,6 → 146,7
 
public static final boolean SMS_COURSEUNIT_ANNOUNCEMENT_ONLY_PROFS = ConfigProperties.getBooleanProperty("sms.courseunit.announcement.only.profs");
 
public static final int JOB_DEAMON_SLEEP_SECONDS=ConfigProperties.getIntProperty("job.deamon.sleep.seconds");
 
public static final String MODULE_STATUS_PREFIX = "module.";
public static final boolean MODULE_STATUS_ANNOUNCEMENTS = ConfigProperties.getBooleanProperty("module.announcements");
/impl/src/java/pt/estgp/estgweb/services/courseunits/UsersUnitsService.java
31,7 → 31,8
TeacherImpl t = (TeacherImpl) DaoFactory.getTeacherDaoImpl().get(teacherId);
if(t != null)
{
courseUnit.getTeachers().remove(t);
if(courseUnit.getTeachers() != null)
courseUnit.getTeachers().remove(t);
courseUnit.getTeachers().add(t);
t.addUnitLocaly(courseUnit);
return loadCourseUnitService.run(courseUnitId,true,true,false,userSession);
59,7 → 60,8
StudentImpl s = (StudentImpl) DaoFactory.getStudentDaoImpl().loadBySigesCode(code);
if(s != null)
{
courseUnit.getStudents().remove(s);
if(courseUnit.getStudents() != null)
courseUnit.getStudents().remove(s);
courseUnit.getStudents().add(s);
s.addUnitLocaly(courseUnit);
return loadCourseUnitService.run(courseUnitId,true,true,false,userSession);
/impl/src/java/pt/estgp/estgweb/services/courseunits/CreateCourseUnitDirPackageService.java
143,9 → 143,8
 
public static void main(String[] args) throws ServiceException
{
 
String teste = "Taludes, Escavações e Fundações Especiais";
System.out.println(StringsUtils.normalizeResourceName(teste));
String teste = "Sistemas Térmicos, Hidráulicos e Pneumáticos";
System.out.println(StringsUtils.normalizeResourceName(teste));
// AbstractDao.getCurrentSession().beginTransaction();
// new CreateCourseUnitDirPackageService().run(null,null);
// AbstractDao.getCurrentSession().getTransaction().commit();
/impl/src/java/pt/estgp/estgweb/services/courseunits/CreateCourseUnitWorksBackupService.java
203,7 → 203,7
 
private String createTeacherActualYearBackup(Teacher t, UserSession userSession) throws ServiceException
{
List<CourseUnit> units = DaoFactory.getCourseUnitDaoImpl().loadTeachedImportYearUnits(t.getId(),DatesUtils.getImportYear());
List units = DaoFactory.getCourseUnitDaoImpl().loadTeachedImportYearUnits(t.getId(),DatesUtils.getImportYear());
if(units == null || units.size() == 0)
return null;
return createTeacherBackup(units,t,userSession);
350,7 → 350,7
{
try
{
FilesUtils.copy(iRepositoryFile.getInput(),deliverDir + "/version" + StringsUtils.normalizeResourceName(iRepositoryFile.getName()));
FilesUtils.copy(iRepositoryFile.getInput(),deliverDir + "/version" + getResourceFileName(iRepositoryFile.getName()));
}
catch (IOException e)
{
360,6 → 360,18
}
}
 
public String getResourceFileName(String resourceName)
{
String extension = FilesUtils.getExtension( resourceName);
if(extension != null)
{
resourceName = resourceName.substring(0,resourceName.length() - extension.length());
}
if(extension == null)
extension = ".unknown";
return resourceName + extension;
}
 
private void createAssignementCopy(CourseUnitAssignement assignement, String assignementDir, UserSession userSession) throws IOException
{
String fileContent = buildAssignementTemplate(assignement);
370,7 → 382,7
if(assignement.getRepositoryStream() != null && assignement.getRepositoryStream().length() > 0)
{
IRepositoryFile iRepositoryFile = repositoryService.load(assignement.getRepositoryStream(),userSession);
FilesUtils.copy(iRepositoryFile.getInput(),assignementDir + "/" + StringsUtils.normalizeResourceName(iRepositoryFile.getName()));
FilesUtils.copy(iRepositoryFile.getInput(),assignementDir + "/" + getResourceFileName(iRepositoryFile.getName()));
}
}
 
/impl/src/java/pt/estgp/estgweb/services/email/SendEmailService.java
47,19 → 47,27
// Create message
MimeMessage message = new MimeMessage(session);
// Set the recipients of the message
for (String recipient : email.getRecipients()) {
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(recipient));
boolean valid = false;
for (String recipient : email.getRecipients())
{
if(Email.validEmail(recipient))
{
valid=true;
message.addRecipient(Message.RecipientType.TO,new InternetAddress(recipient));
}
}
String content = TemplateUtils.getOrLoadTemplate(Globals.TEMPLATE_EMAIL_PATH + "/" + email.getEmailTemplateName());
// Format the mail message
String fullMessage = MessageFormat.format(content, email.getArguments().toArray());
if(valid)
{
String content = TemplateUtils.getOrLoadTemplate(Globals.TEMPLATE_EMAIL_PATH + "/" + email.getEmailTemplateName());
// Format the mail message
String fullMessage = MessageFormat.format(content, email.getArguments().toArray());
 
message.setFrom(new InternetAddress(email.getFrom()));
message.setSubject(email.getSubject());
message.setText(fullMessage);
message.setFrom(new InternetAddress(email.getFrom()));
message.setSubject(email.getSubject());
message.setText(fullMessage);
 
Transport.send(message);
Transport.send(message);
}
}
catch(MessagingException e)
{
142,7 → 150,8
List<String> recipients = new ArrayList<String>();
for(User u: users)
{
recipients.add(u.getEmail());
if(Email.validEmail(u.getEmail()))
recipients.add(u.getEmail());
}
 
String subject = java.text.MessageFormat.format(subjectTxt,new String[]{announcement.getCourseUnit().getNormalizedName(),announcement.getTitle()});
/impl/src/java/pt/estgp/estgweb/services/jobs/JobDeamon.java
3,6 → 3,7
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.Job;
import pt.estgp.estgweb.Globals;
import jomm.dao.impl.AbstractDao;
 
import java.util.List;
34,7 → 35,7
j.setExecuted(true);
}
AbstractDao.getCurrentSession().getTransaction().commit();
Thread.sleep(3000);
Thread.sleep(Globals.JOB_DEAMON_SLEEP_SECONDS*1000);
}
catch (InterruptedException e)
{
/impl/src/java/pt/estgp/estgweb/services/blogs/CreateBlogService.java
2,6 → 2,7
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.data.ImageManager;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.domain.dao.DaoFactory;
36,6 → 37,11
Blog b;
if(bV.getId() <= 0)
{
if(bV.getImage() != null)
{
DaoFactory.getImageDaoImpl().save(bV.getImage());
ImageManager.store((ImageImpl) bV.getImage());
}
if(bV.getCourseUnitView() != null)
{
CourseUnit c = DaoFactory.getCourseUnitDaoImpl().get(bV.getCourseUnitView().getId());
58,6 → 64,15
else
{
b = DaoFactory.getBlogDaoImpl().get(bV.getSerializable());
 
if(bV.getImage() != null && b.getImage() != null)
DaoFactory.getImageDaoImpl().delete(b.getImage().getId());
if(bV.getImage() != null)
{
DaoFactory.getImageDaoImpl().save(bV.getImage());
ImageManager.store((ImageImpl) bV.getImage());
b.setImage(bV.getImage());
}
}
if(userSession.getUser() != null && userSession.getUser().isSuperuserOrAdmin())
bV.persistViewInObjectByAdmin(b);
/impl/src/java/pt/estgp/estgweb/services/blogs/CreateBlogPostService.java
3,10 → 3,7
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.domain.views.BlogPostView;
import pt.estgp.estgweb.domain.Blog;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.BlogPostImpl;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.estgp.estgweb.services.data.ImageManager;
54,13 → 51,9
DaoFactory.getImageDaoImpl().delete(bP.getImage().getId());
}
if(bPV.getImage() != null)
{
byte[] bytes = bPV.getImage().getImage();
bPV.getImage().setImage(null);
{
DaoFactory.getImageDaoImpl().save(bPV.getImage());
bPV.getImage().setImage(bytes);
ImageManager.store(bPV.getImage());
bPV.getImage().setImage(null);
ImageManager.store((ImageImpl) bPV.getImage());
}
 
 
/impl/src/java/pt/estgp/estgweb/services/data/ResourceManager.java
5,6 → 5,7
import java.io.*;
 
import jomm.utils.StreamsUtils;
import org.apache.log4j.Logger;
 
/**
* @author Jorge Machado
14,15 → 15,48
public class ResourceManager
{
 
public static final int DOCS_IN_PATH = 1000;
public static final int DOCS_FIRST_DIR_LEN = 20;
 
public static void saveResource(InputStream stream, String resourcePath, long id) throws IOException
{
StreamsUtils.inputStream2File(stream,new File(Globals.DATA_DIR + resourcePath + "/" + id));
StreamsUtils.inputStream2File(stream, new File(Globals.DATA_DIR + resourcePath + getDocumentPathById(id)));
}
 
public static InputStream getResource(String resourcePath,long id) throws FileNotFoundException
public static InputStream getResource(String resourcePath, long id) throws FileNotFoundException
{
return new FileInputStream(Globals.DATA_DIR + resourcePath + "/" + id);
return new FileInputStream(Globals.DATA_DIR + resourcePath + getDocumentPathById(id));
}
 
public static void setAllChars(char c, char[] dir)
{
for (int i = 0; i < dir.length; i++)
{
dir[i] = c;
}
}
 
public static void copyCharsToArray(char[] dir, String str)
{
int dirLen = dir.length;
int strLen = str.length();
 
for (int i = 0; i < strLen; i++)
{
dir[dirLen - i - 1] = str.charAt(strLen - i - 1);
}
}
 
public static String getDocumentPathById(long id)
{
char[] dir = new char[DOCS_FIRST_DIR_LEN];
setAllChars('0', dir);
long dirNumber = id / DOCS_IN_PATH;
dirNumber = dirNumber * DOCS_IN_PATH;
String dirNumberStr = "" + dirNumber;
copyCharsToArray(dir, dirNumberStr);
dirNumberStr = new String(dir);
return "/" + dirNumberStr + "/" + id;
}
 
}
/impl/src/java/pt/estgp/estgweb/services/data/ImageManager.java
1,6 → 1,7
package pt.estgp.estgweb.services.data;
 
import pt.estgp.estgweb.domain.Image;
import pt.estgp.estgweb.domain.ImageImpl;
 
import java.io.ByteArrayInputStream;
import java.io.IOException;
19,10 → 20,12
 
private static final Logger logger = Logger.getLogger(ImageManager.class);
 
public static boolean store(Image img)
public static boolean store(ImageImpl img)
{
try
{
if(img.getId() <= 0)
logger.error("Image arrive with out identifier: save it first");
ResourceManager.saveResource(new ByteArrayInputStream(img.getImage()), IMAGES_RESOURCE_PATH, img.getId());
return true;
}
/impl/src/java/pt/estgp/estgweb/services/announcements/CreateAnnouncementService.java
6,6 → 6,7
import pt.estgp.estgweb.services.jobs.JobScheduleService;
import pt.estgp.estgweb.services.email.EMAILJob;
import pt.estgp.estgweb.services.email.SendEmailService;
import pt.estgp.estgweb.services.data.ImageManager;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.enums.LangEnum;
import pt.estgp.estgweb.domain.dao.DaoFactory;
49,6 → 50,19
announcementView.persistViewInObject(a);
a.setOwner(userSession.getUser());
a.setSaveDate(new Date());
 
if(imageBig != null)
{
DaoFactory.getImageDaoImpl().save(imageBig);
ImageManager.store((ImageImpl) imageBig);
((ImageImpl)imageBig).setImage(null);
}
if(imageSmall != null)
{
DaoFactory.getImageDaoImpl().save(imageSmall);
ImageManager.store((ImageImpl) imageSmall);
((ImageImpl)imageSmall).setImage(null);
}
a.setBigImage(imageBig);
a.setSmallImage(imageSmall);
if(a.getTargetRoles() == null || a.getTargetRoles().length() == 0)
56,18 → 70,23
}
else
{
a= DaoFactory.getAnnouncementDaoImpl().get(announcementView.getSerializable());
a = DaoFactory.getAnnouncementDaoImpl().get(announcementView.getSerializable());
 
if(imageBig != null)
{
try
if(a.getBigImage() != null)
{
DaoFactory.getImageDaoImpl().delete(a.getBigImage().getId());
// try
// {
DaoFactory.getImageDaoImpl().delete(a.getBigImage().getId());
// }
// catch(Exception e)
// {
// logger.info("Announcement:" + announcementView.getId() + "do not have imageBig!");
// }
}
catch(Exception e)
{
logger.info("Announcement:" + announcementView.getId() + "do not have imageBig!");
}
DaoFactory.getImageDaoImpl().save(imageBig);
ImageManager.store((ImageImpl) imageBig);
announcementView.setBigImage(imageBig);
}
else
79,20 → 98,25
}
catch(Exception e)
{
logger.info("ImageBig form announcement:" + announcementView.getId() + "do not exist!");
logger.debug("ImageBig form announcement:" + announcementView.getId() + "do not exist!");
}
}
 
if(imageSmall!=null)
{
try
if(a.getSmallImage() != null)
{
// try
// {
DaoFactory.getImageDaoImpl().delete(a.getSmallImage().getId());
// }
// catch(Exception e)
// {
// logger.info("Announcement:" + announcementView.getId() + "do not have smallBig!");
// }
}
catch(Exception e)
{
logger.info("Announcement:" + announcementView.getId() + "do not have smallBig!");
}
DaoFactory.getImageDaoImpl().save(imageSmall);
ImageManager.store((ImageImpl) imageSmall);
announcementView.setSmallImage(imageSmall);
}
else
/impl/src/java/pt/estgp/estgweb/domain/ImageImpl.java
10,9 → 10,22
*/
public class ImageImpl extends Image
{
public Serializable getSerializable()
 
private byte[] image;
 
public Serializable getSerializable()
{
return getId();
}
 
 
public byte[] getImage()
{
return image;
}
 
public void setImage(byte[] image)
{
this.image = image;
}
}
/impl/src/java/pt/estgp/estgweb/domain/dao/impl/AnnouncementDaoImpl.java
131,8 → 131,25
{
coSubTargets = eq("subTargets", subTarget);
}
 
if (type != null)
criteria.add(eq("type", type));
{
String[] types = type.split(",");
if(types.length == 1)
criteria.add(eq("type", type));
else if(types.length > 1)
{
Criterion orCriteron = null;
for(String typeAux: types)
{
if(orCriteron == null)
orCriteron = eq("type", typeAux);
else
orCriteron = or(orCriteron,eq("type",typeAux));
}
criteria.add(orCriteron);
}
}
 
if (!internal)
criteria.add(eq("internal", false));
/impl/src/java/pt/estgp/estgweb/domain/views/AnnouncementView.java
414,4 → 414,12
return ((AnnouncementImpl)announcement).canLoadInOpenTransaction(u);
}
 
public String getOwnerUsername()
{
if (owner instanceof User)
return ((User) owner).getUsername();
else
return null;
}
 
}
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitAssignementView.java
10,6 → 10,8
import java.util.List;
import java.util.Date;
 
import jomm.utils.StringsUtils;
 
/**
* @author Jorge Machado
* @date 2/Mar/2008
165,6 → 167,11
return description;
}
 
public String getFormatedDescription()
{
return StringsUtils.getFormatedText(description);
}
 
public void setDescription(String description)
{
this.description = description;
/impl/src/java/pt/estgp/estgweb/domain/views/UserView.java
358,6 → 358,26
return email;
}
 
public String getSafeEmail()
{
String email = username + "@" + Globals.EMAIL_LOCAL_SUFFIX;
if(email != null)
{
String safe = email.replace("@", " [ AT ] ").replace("."," [ DOT ] ");
StringBuilder result = new StringBuilder();
result.append("<script type=\"text/javascript\" language=\"JavaScript\">\n");
for(int i = 0;i< safe.length();i++)
{
char c = safe.charAt(i);
if(c != '\'')
result.append("document.write('").append(c).append("');\n");
}
result.append("</script>");
return result.toString();
}
return email;
}
 
public void setEmail(String email) {
this.email = email;
}
/impl/src/java/pt/estgp/estgweb/web/utils/ProxyUtils.java
New file
0,0 → 1,96
package pt.estgp.estgweb.web.utils;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
 
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
 
/**
* @author Jorge Machado
* @date 8/Out/2008
* @see pt.estgp.estgweb.web.utils
*/
public class ProxyUtils
{
// proxy/accaoSocialAlunosPortalMenu/estgp
private static final Logger logger = Logger.getLogger(ProxyUtils.class);
 
public static String getTopImageLink(HttpServletRequest request)
{
String pathIfo = request.getPathInfo();
String queryString = request.getQueryString();
 
if(request.getServletPath().equals("/proxy"))
{
String finalFileCandidate1 = pathIfo.substring(0,pathIfo.lastIndexOf("/")) + "/top.jpg";
int lastIndexOfDot = pathIfo.lastIndexOf(".");
String finalFileCandidate2 = null;
if(lastIndexOfDot >= 0)
finalFileCandidate2 = pathIfo.substring(0,lastIndexOfDot) + ".jpg";
 
String protocol = request.getRequestURL().substring(0,request.getRequestURL().indexOf("://"));
String finalFileCandidate1total = protocol + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/proxy" + finalFileCandidate1;
String finalFileCandidate2total = null;
if(finalFileCandidate2 != null)
finalFileCandidate2total = protocol + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/proxy" + finalFileCandidate2;
 
if(finalFileCandidate2 != null)
try
{
URL url = new URL(finalFileCandidate2total);
url.openConnection().getInputStream();
return request.getContextPath() + "/proxy" + finalFileCandidate2;
}
catch (MalformedURLException e)
{
logger.error("BAD TOP IMAGE URL 2: " + finalFileCandidate2total);
}
catch (IOException e)
{
logger.debug("candidate 2 don't exist: " + finalFileCandidate2total);
}
 
try
{
URL url = new URL(finalFileCandidate1total);
url.openConnection().getInputStream();
return request.getContextPath() + "/proxy" + finalFileCandidate1;
}
catch (MalformedURLException e)
{
logger.error("BAD TOP IMAGE URL 1: " + finalFileCandidate1total);
}
catch (IOException e)
{
logger.debug("candidate 1 don't exist: " + finalFileCandidate1total);
}
}
else
{
String link = request.getServletPath();
if(pathIfo!=null)
link+= pathIfo;
if(queryString!=null)
link+= "?" + queryString;
 
 
for(int i = 0; i < Globals.TOP_IMAGE_FILTER_LINKS.size();i++)
{
String url = Globals.TOP_IMAGE_FILTER_LINKS.get(i);
if(link.startsWith(url))
{
String finalUrl = Globals.TOP_IMAGE_FILTER_IMAGES_URL.get(i);
if(finalUrl.startsWith("/"))
return request.getContextPath() + finalUrl;
else
return finalUrl;
}
}
}
return null;
}
}
/impl/src/java/pt/estgp/estgweb/web/utils/DomainUtils.java
2,6 → 2,7
 
import pt.estgp.estgweb.domain.Image;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.ImageImpl;
import org.apache.struts.upload.FormFile;
import org.apache.log4j.Logger;
import jomm.utils.StreamsUtils;
30,7 → 31,7
logger.error(e,e);
return null;
}
Image i = DomainObjectFactory.createImageImpl();
ImageImpl i = DomainObjectFactory.createImageImpl();
i.setImage(bytes);
i.setContentType(image.getContentType());
i.setSize(image.getFileSize());
/impl/src/java/pt/estgp/estgweb/web/filters/TopImageFilter.java
New file
0,0 → 1,79
package pt.estgp.estgweb.web.filters;
 
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.estgp.estgweb.web.utils.ProxyUtils;
 
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.io.IOException;
 
/**
*
* @author Jorge Machado
*/
 
public class TopImageFilter implements Filter
{
 
public static final String TOP_IMAGE = "TOP_IMAGE";
 
public TopImageFilter()
{
}
 
public void init(FilterConfig config)
{
 
}
 
/**
*
* @param request The servlet request we are processing
* @param chain The filter chain we are processing
*
* @exception java.io.IOException if an input/output error occurs
* @exception javax.servlet.ServletException if a servlet error occurs
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
HttpServletRequest hrequest = (HttpServletRequest) request;
String relativePath = hrequest.getServletPath();
if (relativePath == null)
relativePath = "";
 
if (hrequest.getPathInfo() != null && hrequest.getPathInfo().length() > 0)
{
relativePath += hrequest.getPathInfo();
}
 
for (String ignore : Globals.FILTER_IGNORE_EXTENSIONS)
{
if (relativePath.endsWith(ignore))
{
chain.doFilter(request, response);
return;
}
}
for (String ignore : Globals.FILTER_IGNORE_PREFIXES)
{
if (relativePath.startsWith(ignore))
{
chain.doFilter(request, response);
return;
}
}
 
String link = ProxyUtils.getTopImageLink((HttpServletRequest) request);
request.setAttribute(TOP_IMAGE,link);
chain.doFilter(request,response);
}
 
public void destroy()
{
// Nothing
}
}
/impl/src/java/pt/estgp/estgweb/web/ImageStream.java
1,7 → 1,9
package pt.estgp.estgweb.web;
 
import pt.estgp.estgweb.domain.Image;
import pt.estgp.estgweb.domain.ImageImpl;
import pt.estgp.estgweb.domain.dao.impl.ImageDaoImpl;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.data.ImageManager;
 
import java.io.*;
33,7 → 35,7
 
long id = Long.parseLong(imageRequarired.trim());
AbstractDao.getCurrentSession().beginTransaction();
Image image = new ImageDaoImpl().get(id);
ImageImpl image = (ImageImpl) DaoFactory.getImageDaoImpl().get(id);
try
{
response.setContentType(image.getContentType());
/impl/src/java/pt/utl/ist/berserk/storage/hibernate/HibernateTransactionBroker.java
37,28 → 37,36
{
HibernateUtils.getCurrentSession().beginTransaction();
}
public void commitTransaction() throws StorageException
 
public void commitTransaction() throws StorageException
{
HibernateUtils.getCurrentSession().getTransaction().commit();
// HibernateUtils.getCurrentSession().close();
 
}
public void abortTransaction() throws StorageException
 
public void abortTransaction() throws StorageException
{
Session sess = HibernateUtils.getCurrentSession();
Transaction t = sess.getTransaction();
t.rollback();
// sess.close();
}
public void lockRead(List list) throws StorageException
 
public void lockRead(List list) throws StorageException
{
for(Object obj: list)
{
lockRead(obj);
}
}
public void lockRead(Object obj) throws StorageException
public void lockRead(Object obj) throws StorageException
{
HibernateUtils.getCurrentSession().lock(obj, LockMode.READ);
}
public void lockWrite(Object obj) throws StorageException
 
public void lockWrite(Object obj) throws StorageException
{
HibernateUtils.getCurrentSession().lock(obj, LockMode.WRITE);
}
/impl/src/doc/estgweb.eap
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/impl/src/hbm/pt/estgp/estgweb/domain/GenericUser.hbm.xml
16,6 → 16,7
<property name="superuser" type="boolean"/>
<property name="name" type="string" index="nameIndex"/>
<property name="roles" type="string" index="rolesIndex"/>
<many-to-one name="image" column="image" class="pt.estgp.estgweb.domain.Image" lazy="no-proxy" outer-join="false" cascade="all"/>
<subclass name="pt.estgp.estgweb.domain.GenericUserImpl">
<subclass name="pt.estgp.estgweb.domain.Group">
<meta attribute="scope-class">public abstract</meta>
53,15 → 54,15
<key column="user_id"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUserAssociation"/>
</set>
<set name="creatorRecords" lazy="true" order-by="recordId" table="creatorRecords">
<set name="creatorRecords" lazy="true" order-by="recordId" table="creatorrecords">
<key column="creatorId"/>
<many-to-many class="pt.estgp.estgweb.domain.Record" column="recordId"/>
</set>
<set name="contributorRecords" lazy="true" order-by="recordId" table="contributorRecords">
<set name="contributorRecords" lazy="true" order-by="recordId" table="contributorrecords">
<key column="contributorId"/>
<many-to-many class="pt.estgp.estgweb.domain.Record" column="recordId"/>
</set>
<set name="managedIdentifierCollectionsManager" lazy="true" table="managedIdentifierCollectionManagers">
<set name="managedIdentifierCollectionsManager" lazy="true" table="managedidentifiercollectionmanagers">
<key column="managerId"/>
<many-to-many class="pt.estgp.estgweb.domain.ManagedIdentifierCollection" column="collectionId"/>
</set>
97,7 → 98,7
<property name="unitCheck" type="boolean"/>
<property name="academicDegree" type="string"/>
<property name="localRemovedTeachedUnits" type="string"/>
<set name="teachedUnits" lazy="true" order-by="courseUnitId" table="teachedUnits">
<set name="teachedUnits" lazy="true" order-by="courseUnitId" table="teachedunits">
<key column="teacherId"/>
<many-to-many class="pt.estgp.estgweb.domain.CourseUnit" column="courseUnitId"/>
</set>
/impl/src/hbm/pt/estgp/estgweb/domain/Record.hbm.xml
4,7 → 4,7
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
<hibernate-mapping>
<class name="pt.estgp.estgweb.domain.Record" table="profileRecord" abstract="true">
<class name="pt.estgp.estgweb.domain.Record" table="profilerecord" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.OwnedDomainObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
24,11 → 24,11
<property name="identifier" type="string"/>
<property name="repositoryStream" type="string" index="repositoryStreamIndex"/>
<many-to-one name="owner" class="pt.estgp.estgweb.domain.GenericUser" lazy="false" outer-join="true"/>
<set name="creators" lazy="true" table="creatorRecords">
<set name="creators" lazy="true" table="creatorrecords">
<key column="recordId"/>
<many-to-many class="pt.estgp.estgweb.domain.User" column="creatorId"/>
</set>
<set name="contributors" lazy="true" table="contributorRecords">
<set name="contributors" lazy="true" table="contributorrecords">
<key column="recordId"/>
<many-to-many class="pt.estgp.estgweb.domain.User" column="contributorId"/>
</set>
/impl/src/hbm/pt/estgp/estgweb/domain/RepositoryFile.hbm.xml
4,7 → 4,7
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
<hibernate-mapping>
<class name="pt.estgp.estgweb.domain.RepositoryFile" table="repositoryFile" abstract="true">
<class name="pt.estgp.estgweb.domain.RepositoryFile" table="repositoryfile" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.OwnedDomainObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
24,7 → 24,7
<subclass name="pt.estgp.estgweb.domain.RepositoryFileImpl" discriminator-value="RepositoryFileImpl"/>
</class>
 
<class name="pt.estgp.estgweb.domain.RepositoryFileVersion" table="repositoryFileVersion" abstract="true">
<class name="pt.estgp.estgweb.domain.RepositoryFileVersion" table="repositoryfileversion" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.DomainSerializableObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
/impl/src/hbm/pt/estgp/estgweb/domain/Image.hbm.xml
17,7 → 17,6
<property name="contentType" type="string"/>
<property name="size" type="int"/>
<property name="description" type="text"/>
<property name="image" type="binary" length="4194304"/>
<subclass name="pt.estgp.estgweb.domain.ImageImpl" discriminator-value="ImageImpl"/>
</class>
</hibernate-mapping>
/impl/src/hbm/pt/estgp/estgweb/domain/CourseUnit.hbm.xml
4,7 → 4,7
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
<hibernate-mapping>
<class name="pt.estgp.estgweb.domain.CourseUnit" table="courseUnit" abstract="true">
<class name="pt.estgp.estgweb.domain.CourseUnit" table="courseunit" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.DomainSerializableObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
31,7 → 31,7
<key column="courseUnit"/>
<one-to-many class="pt.estgp.estgweb.domain.CourseUnitBlog" />
</set>
<set name="teachers" lazy="true" table="teachedUnits">
<set name="teachers" lazy="true" table="teachedunits">
<key column="courseUnitId"/>
<many-to-many class="pt.estgp.estgweb.domain.TeacherImpl" column="teacherId"/>
</set>
54,7 → 54,7
<subclass name="pt.estgp.estgweb.domain.CourseUnitImpl" discriminator-value="CourseUnitImpl"/>
</class>
 
<class name="pt.estgp.estgweb.domain.CourseUnitQuestion" table="courseUnitQuestion" abstract="true">
<class name="pt.estgp.estgweb.domain.CourseUnitQuestion" table="courseunitquestion" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.OwnedDomainObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
71,7 → 71,7
<subclass name="pt.estgp.estgweb.domain.CourseUnitQuestionImpl" discriminator-value="CourseUnitQuestionImpl"/>
</class>
 
<class name="pt.estgp.estgweb.domain.CourseUnitAssignement" table="courseUnitAssignement" abstract="true">
<class name="pt.estgp.estgweb.domain.CourseUnitAssignement" table="courseunitassignement" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.DomainSerializableObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
95,7 → 95,7
<subclass name="pt.estgp.estgweb.domain.CourseUnitAssignementImpl" discriminator-value="CourseUnitAssignementImpl"/>
</class>
 
<class name="pt.estgp.estgweb.domain.CourseUnitDeliverable" table="courseUnitDeliverable" abstract="true">
<class name="pt.estgp.estgweb.domain.CourseUnitDeliverable" table="courseunitdeliverable" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.DomainSerializableObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
113,7 → 113,7
<subclass name="pt.estgp.estgweb.domain.CourseUnitDeliverableImpl" discriminator-value="CourseUnitDeliverableImpl"/>
</class>
 
<class name="pt.estgp.estgweb.domain.CourseUnitGrade" table="courseUnitGrade" abstract="true">
<class name="pt.estgp.estgweb.domain.CourseUnitGrade" table="courseunitgrade" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.DomainSerializableObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
132,7 → 132,7
<subclass name="pt.estgp.estgweb.domain.CourseUnitGradeImpl" discriminator-value="CourseUnitGradeImpl"/>
</class>
 
<!--<class name="pt.estgp.estgweb.domain.CourseUnit" table="courseUnitAssignement" abstract="true">-->
<!--<class name="pt.estgp.estgweb.domain.CourseUnit" table="courseunitassignement" abstract="true">-->
<!--<meta attribute="extends">pt.estgp.estgweb.domain.DomainSerializableObject</meta>-->
<!--<meta attribute="scope-class">public abstract</meta>-->
<!--<id name="id" type="long">-->
/impl/src/hbm/pt/estgp/estgweb/domain/IdentifiersManagement.hbm.xml
4,7 → 4,7
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
<hibernate-mapping>
<class name="pt.estgp.estgweb.domain.ManagedIdentifier" table="managedIdentifier" abstract="true">
<class name="pt.estgp.estgweb.domain.ManagedIdentifier" table="managedidentifier" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.OwnedDomainObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
20,7 → 20,7
<subclass name="pt.estgp.estgweb.domain.ManagedIdentifierImpl" discriminator-value="ManagedIdentifierImpl"/>
</class>
 
<class name="pt.estgp.estgweb.domain.ManagedIdentifierCollection" table="managedIdentifierCollection" abstract="true">
<class name="pt.estgp.estgweb.domain.ManagedIdentifierCollection" table="managedidentifiercollection" abstract="true">
<meta attribute="extends">pt.estgp.estgweb.domain.OwnedDomainObject</meta>
<meta attribute="scope-class">public abstract</meta>
<id name="id" type="long">
33,7 → 33,7
<property name="sequenceNumber" type="long"/>
<property name="description" type="text"/>
<many-to-one name="owner" class="pt.estgp.estgweb.domain.GenericUser" lazy="false" outer-join="true"/>
<set name="managers" lazy="true" table="managedIdentifierCollectionManagers">
<set name="managers" lazy="true" table="managedIdentifiercollectionmanagers">
<key column="collectionId"/>
<many-to-many class="pt.estgp.estgweb.domain.User" column="managerId"/>
</set>
/impl/src/web/imgs/top.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/impl/src/web/admin/profile/profileCurriculum.jsp
36,6 → 36,7
<html:select property="recordView.type">
<html:option value="RecordThesisImpl" key="profile.RecordThesisImpl"/>
<html:option value="RecordPaperImpl" key="profile.RecordPaperImpl"/>
<%--todo Falta Artigo de Opinião e falta meter artigo cientifico, revista, conferencia, workshop--%>
<html:option value="RecordJobImpl" key="profile.RecordJobImpl"/>
<html:option value="RecordEventOrganizationImpl" key="profile.RecordEventOrganizationImpl"/>
<html:option value="RecordProjectImpl" key="profile.RecordProjectImpl"/>
/impl/src/web/admin/courseunits/courseunit.jsp
84,74 → 84,89
<bean:message key="courseunit.teachers"/>
</th>
<td>
<html:select property="teacherId">
<logic:present name="CourseUnitsForm" property="teachers">
<logic:iterate id="teacher" name="CourseUnitsForm" property="teachers" type="pt.estgp.estgweb.domain.views.UserView">
<jomm:option itemName="teacher" itemProperty="id" comparableObjectName="CourseUnitsForm"
comparableObjectProperty="teacherId">
(${teacher.code}) ${teacher.name}
</jomm:option>
</logic:iterate>
<input type="button" value="<bean:message key="add"/>"
onclick="set(this.form,'addTeacher');this.form.submit();">
</logic:present>
</html:select>
<logic:greaterThan name="CourseUnitView" property="teachersSize" value="0">
<table class="dataTable removeButton">
<logic:iterate id="userView" name="CourseUnitView" property="teachers" type="pt.estgp.estgweb.domain.views.UserView">
<tr>
<th>
${userView.code}
</th>
<th>
${userView.name}
</th>
<td><input type="button" class="removeButton"
onclick="CourseUnitsForm.id.value='${userView.id}';set(this.form,'removeTeacher');this.form.submit();">
</td>
</tr>
</logic:iterate>
</table>
<logic:lessEqual value="0" name="CourseUnitView" property="id">
<i><bean:message key="courseunit.to.add.teachers.save.first"/></i>
</logic:lessEqual>
 
<logic:greaterThan value="0" name="CourseUnitView" property="id">
<html:select property="teacherId">
<logic:present name="CourseUnitsForm" property="teachers">
<logic:iterate id="teacher" name="CourseUnitsForm" property="teachers" type="pt.estgp.estgweb.domain.views.UserView">
<jomm:option itemName="teacher" itemProperty="id" comparableObjectName="CourseUnitsForm"
comparableObjectProperty="teacherId">
(${teacher.code}) ${teacher.name}
</jomm:option>
</logic:iterate>
<input type="button" value="<bean:message key="add"/>"
onclick="set(this.form,'addTeacher');this.form.submit();">
</logic:present>
</html:select>
<logic:greaterThan name="CourseUnitView" property="teachersSize" value="0">
<table class="dataTable removeButton">
<logic:iterate id="userView" name="CourseUnitView" property="teachers" type="pt.estgp.estgweb.domain.views.UserView">
<tr>
<th>
${userView.code}
</th>
<th>
${userView.name}
</th>
<td><input type="button" class="removeButton"
onclick="CourseUnitsForm.id.value='${userView.id}';set(this.form,'removeTeacher');this.form.submit();">
</td>
</tr>
</logic:iterate>
</table>
</logic:greaterThan>
</logic:greaterThan>
</td>
</tr>
 
<tr>
<th>
<bean:message key="courseunit.students"/>
</th>
<td>
<html:text styleClass="text" property="studentCode"/>
<input type="button" value="<bean:message key="add"/>"
onclick="set(this.form,'addStudent');this.form.submit();">
<logic:greaterThan name="CourseUnitView" property="studentsSize" value="0">
<table class="dataTable removeButton">
<logic:iterate id="userView" name="CourseUnitView" property="students" type="pt.estgp.estgweb.domain.views.UserView">
<tr>
<th>
${userView.code}
</th>
<th>
${userView.username}
</th>
<th>
${userView.name}
</th>
<th>
${userView.email}
</th>
<th>
${userView.address}
</th>
<td><input type="button" class="removeButton"
onclick="CourseUnitsForm.id.value='${userView.code}';set(this.form,'removeStudent');this.form.submit();">
</td>
</tr>
</logic:iterate>
</table>
 
<logic:lessEqual value="0" name="CourseUnitView" property="id">
<i><bean:message key="courseunit.to.add.students.save.first"/></i>
</logic:lessEqual>
 
<logic:greaterThan value="0" name="CourseUnitView" property="id">
<html:text styleClass="text" property="studentCode"/>
<input type="button" value="<bean:message key="add"/>"
onclick="set(this.form,'addStudent');this.form.submit();">
<logic:greaterThan name="CourseUnitView" property="studentsSize" value="0">
<table class="dataTable removeButton">
<logic:iterate id="userView" name="CourseUnitView" property="students" type="pt.estgp.estgweb.domain.views.UserView">
<tr>
<th>
${userView.code}
</th>
<th>
${userView.username}
</th>
<th>
${userView.name}
</th>
<th>
${userView.email}
</th>
<th>
${userView.address}
</th>
<td><input type="button" class="removeButton"
onclick="CourseUnitsForm.id.value='${userView.code}';set(this.form,'removeStudent');this.form.submit();">
</td>
</tr>
</logic:iterate>
</table>
</logic:greaterThan>
</logic:greaterThan>
</td>
</tr>
 
 
</table>
<input type="button" onclick="set(form,'createOrUpdateAdmin');form.submit()" value="<bean:message key="confirm"/>">
</html:form>
/impl/src/web/js/functions.js
71,3 → 71,5
{
return confirm(msg);
}
 
 
/impl/src/web/layout/header.jsp
1,3 → 1,5
<%@ page import="pt.estgp.estgweb.web.utils.ProxyUtils" %>
<%@ page import="pt.estgp.estgweb.web.filters.TopImageFilter" %>
<%@ 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-nested.tld" prefix="nested" %>
7,7 → 9,22
<table width="100%">
<tr>
<td>
<img alt="estg" src="<%=request.getContextPath()%>/imgs/top.jpg"/>
 
<%
String link = (String) request.getAttribute(TopImageFilter.TOP_IMAGE);
if (link == null)
{
%>
<img alt="estg" src="<%=request.getContextPath()%>/imgs/top.jpg"/>
<%
}
else
{
%>
<img alt="estg" src="<%=link%>"/>
<%
}
%>
</td>
</tr>
</table>
/impl/src/web/layout/headerIntranet.jsp
7,7 → 7,9
<table width="100%" id="headerIntranet">
<tr>
<td class="title">
INTRANET - ESTG (<bean:write name="UserSession" property="user.name"/> online)
<logic:present name="UserSession">
INTRANET - ESTG (<bean:write name="UserSession" property="user.name"/> online)
</logic:present>
</td>
<td class="links">
<ul>
/impl/src/web/public/profile/profileHome.jsp
81,7 → 81,7
<bean:message key="email.institucion"/>
</th>
<td>
<bean:write name="ProfileForm" property="userView.email"/>
${ProfileForm.userView.safeEmail}
</td>
</tr>
 
/impl/src/web/public/announcements/announcementsPortalLeft.jsp
21,7 → 21,7
IServiceManager sm = ServiceManager.getInstance();
String subTarget = null;
String[] names = new String[]{};
Object[] args = new Object[]{request.getParameter("role"), Globals.ANNOUNCEMENT_TYPE_TOP_FLASH_NEWS, subTarget};
Object[] args = new Object[]{request.getParameter("role"), Globals.ANNOUNCEMENT_TYPE_TOP_FLASH_NEWS + "," +Globals.ANNOUNCEMENT_TYPE_BOTTOM_FLASH_NEWS, subTarget};
List<AnnouncementView> announcementViews = (List<AnnouncementView>) sm.execute(RequestUtils.getRequester(request, response), "LoadRoleTypeMaxAnnouncements", args, names);
request.setAttribute("Announcements", announcementViews);
 
/impl/src/web/public/announcements/loadAnnouncement.jsp
85,9 → 85,13
if (Announcement.getUrl() != null)
{
%>
<html:link href="${Announcement.url}">Ver +</html:link>
&nbsp;&nbsp;&gt;&gt; <html:link href="${Announcement.url}">Ver +</html:link>
<%
}%>
 
<div class="pFooter">
Posted by: ${Announcement.ownerUsername} AT ${Announcement.formatedSaveDate}
</div>
</p>
<%
}
120,6 → 124,14
<tr>
<td>${Announcement.formatedText}</td>
</tr>
<tr>
<td> &nbsp;&nbsp;&gt;&gt; <html:link href="${Announcement.url}">${Announcement.url}</html:link></td>
</tr>
<tr>
<td class="pFooter">
Posted by: ${Announcement.ownerUsername} AT ${Announcement.formatedSaveDate}
</td>
</tr>
</table>
<%
}
150,6 → 162,14
</td>
<td>${Announcement.formatedText}</td>
</tr>
<tr>
<td colspan="2"> &nbsp;&nbsp;&gt;&gt; <html:link href="${Announcement.url}">${Announcement.url}</html:link></td>
</tr>
<tr>
<td colspan="2" class="pFooter">
Posted by: ${Announcement.ownerUsername} AT ${Announcement.formatedSaveDate}
</td>
</tr>
</table>
<%
}
180,6 → 200,14
</div>
</td>
</tr>
<tr>
<td colspan="2"> &nbsp;&nbsp;&gt;&gt; <html:link href="${Announcement.url}">${Announcement.url}</html:link></td>
</tr>
<tr>
<td colspan="2" class="pFooter">
Posted by: ${Announcement.ownerUsername} AT ${Announcement.formatedSaveDate}
</td>
</tr>
</table>
<%
}
/impl/src/web/user/courseunits/courseunitworks.jsp
83,7 → 83,7
<bean:message key="courseunit.description"/>
</th>
<td>
<html:textarea styleClass="textarea" property="courseUnitAssignementView.description"/>
<html:textarea styleClass="textarea" property="courseUnitAssignementView.formatedDescription"/>
</td>
</tr>
<tr>
/impl/src/web/user/courseunits/courseunit.jsp
85,7 → 85,7
<html:link action="${user}/startLoadTeacherCourseUnit${fromAction}?code=${teacher.code}&courseUnitView.id=${CourseUnitView.id}">${teacher.name}</html:link>
</td>
<td>
${teacher.email}
${teacher.safeEmail}
</td>
</tr>
</logic:iterate>
102,7 → 102,7
<logic:iterate id="announcement" name="CourseUnitView" property="announcements" type="pt.estgp.estgweb.domain.views.AnnouncementView">
<li>
<h3><html:link action="/user/startLoadAnnouncementFromCourseUnit?id=${announcement.id}">${announcement.title}</html:link></h3>
<p>${announcement.text}</p>
<p>${announcement.formatedText}</p>
<p class="pFooterSeccao"><bean:message key="from"/>: ${announcement.owner.name} (${announcement.owner.username}) <bean:message key="at"/> ${announcement.formatedSaveDate} </p>
</li>
</logic:iterate>
/impl/src/web/user/courseunits/students.jsp
44,7 → 44,7
${student.username}
</td>
<td>
${student.email}
${student.safeEmail}
</td>
</tr>
</logic:iterate>
/impl/src/web/user/home.jsp
4,6 → 4,7
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<jomm:messages/>
<html:errors/>
 
11,7 → 12,8
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td id="leftPage">
<jsp:include page="/public/announcements/announcementsPortalLeft.jsp?role=student&from=Home"/>
 
<jsp:include page="/public/announcements/announcementsPortalLeft.jsp?role=${UserSession.user.roles}&from=Home"/>
</td>
<td class="contentPortal">
<jsp:include page="/user/home/student.jsp"/>
22,7 → 24,7
<%--</table>--%>
</td>
<td id="rightPagePortal">
<jsp:include page="/public/announcements/announcementsPortalRight.jsp?role=student&from=Home"/>
<jsp:include page="/public/announcements/announcementsPortalRight.jsp?role=${UserSession.user.roles}&from=Home"/>
</td>
</tr>
</table>
31,7 → 33,7
<table>
<tr>
<td id="leftPage">
<jsp:include page="/public/announcements/announcementsPortalLeft.jsp?role=teacher&from=Home"/>
<jsp:include page="/public/announcements/announcementsPortalLeft.jsp?role=${UserSession.user.roles}&from=Home"/>
</td>
<td class="contentPortal">
<jsp:include page="/user/home/teacher.jsp"/>
42,7 → 44,7
<%--</table>--%>
</td>
<td id="rightPagePortal">
<jsp:include page="/public/announcements/announcementsPortalRight.jsp?role=teacher&from=Home"/>
<jsp:include page="/public/announcements/announcementsPortalRight.jsp?role=${UserSession.user.roles}&from=Home"/>
</td>
</tr>
</table>
/impl/src/web/user/home/student.jsp
8,20 → 8,30
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<div class="portal">
<ul>
<li class="WARNING">
<logic:notMatch value="StudentImpl" name="UserSession" property="user.class.name">
<bean:message key="profile.bad.profile.student.iregular.user.class"/>
</logic:notMatch>
</li>
</ul>
<table class="columnTable" width="100%">
<tbody>
<tr>
<baco:isModuleOn module="courseunits">
<td class="column">
 
<div class="block">
<p><bean:message key="intranet.course.units"/></p>
<ul>
<li>
<p><bean:message key="courseunit.semestre"/> 1</p>
<logic:empty name="UserSession" property="user.subscribedUnitsCurrentYearViewS1">
<bean:message key="courseunit.zero.units"/>
</logic:empty>
<logic:present name="UserSession" property="user.subscribedUnitsCurrentYearViewS1">
<logic:empty name="UserSession" property="user.subscribedUnitsCurrentYearViewS1">
<bean:message key="courseunit.zero.units"/>
</logic:empty>
</logic:present>
<logic:present name="UserSession" property="user.subscribedUnitsCurrentYearViewS1">
<logic:notEmpty name="UserSession" property="user.subscribedUnitsCurrentYearViewS1">
<ul>
<logic:iterate id="unit" name="UserSession" property="user.subscribedUnitsCurrentYearViewS1" type="pt.estgp.estgweb.domain.CourseUnit">
35,10 → 45,12
</li>
<li>
<p><bean:message key="courseunit.semestre"/> 2</p>
<logic:empty name="UserSession" property="user.subscribedUnitsCurrentYearViewS2">
<bean:message key="courseunit.zero.units"/>
</logic:empty>
<logic:present name="UserSession" property="user.subscribedUnitsCurrentYearViewS2">
<logic:empty name="UserSession" property="user.subscribedUnitsCurrentYearViewS2">
<bean:message key="courseunit.zero.units"/>
</logic:empty>
</logic:present>
<logic:present name="UserSession" property="user.subscribedUnitsCurrentYearViewS2">
<logic:notEmpty name="UserSession" property="user.subscribedUnitsCurrentYearViewS2">
<ul>
<logic:iterate id="unit" name="UserSession" property="user.subscribedUnitsCurrentYearViewS2" type="pt.estgp.estgweb.domain.CourseUnit">
/impl/src/web/user/home/teacher.jsp
8,6 → 8,13
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<jsp:useBean id="UserSession" type="pt.estgp.estgweb.domain.UserSession" scope="request"/>
<div class="portal">
<ul>
<li class="WARNING">
<logic:notMatch value="TeacherImpl" name="UserSession" property="user.class.name">
<bean:message key="profile.bad.profile.teacher.iregular.user.class"/>
</logic:notMatch>
</li>
</ul>
<table class="columnTable" width="100%">
<tbody>
<tr>
18,10 → 25,12
<ul>
<li>
<p><bean:message key="courseunit.semestre"/> 1</p>
<logic:empty name="UserSession" property="user.teachedUnitsCurrentYearViewS1">
<bean:message key="courseunit.zero.units"/>
</logic:empty>
<logic:present name="UserSession" property="user.teachedUnitsCurrentYearViewS1">
<logic:empty name="UserSession" property="user.teachedUnitsCurrentYearViewS1">
<bean:message key="courseunit.zero.units"/>
</logic:empty>
</logic:present>
<logic:present name="UserSession" property="user.teachedUnitsCurrentYearViewS1">
<logic:notEmpty name="UserSession" property="user.teachedUnitsCurrentYearViewS1">
<ul>
<logic:iterate id="unit" name="UserSession" property="user.teachedUnitsCurrentYearViewS1" type="pt.estgp.estgweb.domain.CourseUnit">
35,10 → 44,12
</li>
<li>
<p><bean:message key="courseunit.semestre"/> 2</p>
<logic:empty name="UserSession" property="user.teachedUnitsCurrentYearViewS2">
<bean:message key="courseunit.zero.units"/>
</logic:empty>
<logic:present name="UserSession" property="user.teachedUnitsCurrentYearViewS2">
<logic:empty name="UserSession" property="user.teachedUnitsCurrentYearViewS2">
<bean:message key="courseunit.zero.units"/>
</logic:empty>
</logic:present>
<logic:present name="UserSession" property="user.teachedUnitsCurrentYearViewS2">
<logic:notEmpty name="UserSession" property="user.teachedUnitsCurrentYearViewS2">
<ul>
<logic:iterate id="unit" name="UserSession" property="user.teachedUnitsCurrentYearViewS2" type="pt.estgp.estgweb.domain.CourseUnit">
/impl/src/web/user/serviceZone/serviceZone.jsp
85,8 → 85,9
</baco:hasRole>
</baco:isModuleOn>
 
<li>
<baco:isAdmin>
 
<baco:isAdmin>
<li>
<bean:message key="users"/>
<ul>
<li>
112,11 → 113,12
</li>
</baco:isModuleOn>
</ul>
</baco:isAdmin>
</li>
</li>
</baco:isAdmin>
 
<baco:isModuleOn module="courseunits">
<li>
<baco:isAdmin>
<baco:isAdmin>
<li>
<bean:message key="courses"/>
<ul>
<li>
139,8 → 141,16
<bean:message key="courseunit.search"/>
</html:link>
</li>
 
<%--<li>--%>
<%--<html:link action="/user/startFindCourseUnitAdminFromServiceZone">--%>
<%--<bean:message key="courseunit.program.archive"/>--%>
<%--</html:link>--%>
<%--</li>--%>
</ul>
</baco:isAdmin>
</li>
</baco:isAdmin>
<li>
<bean:message key="backups"/>
<ul>
<baco:isAdmin>
162,7 → 172,6
</html:link>
</li>
</baco:hasRole>
 
</ul>
</li>
</baco:isModuleOn>
/impl/build.properties
11,7 → 11,7
database.catalog=estgweb
database.username=root
database.password=
database.connection.url=jdbc:mysql://${database.host}:${database.port}/${database.catalog}?useUnicode=true&amp;characterEncoding=UTF-8
database.connection.url=jdbc:mysql://${database.host}:${database.port}/${database.catalog}?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true
hibernate.show.sql=false
 
use.ldap=true
104,7 → 104,8
log4j.properties=${conf.dir}/${log4j.properties.filename}
 
#log file confirguration
log.file=${data.dir}/estgweb.log
log.file=${data.dir}/../estgweb-local.log
log.level=info
 
#email templates
email.templates.dir=/template/email
175,4 → 176,4
 
#Google Service Specific Configuration
 
ws.google.package=com.google.api.ws.clients
ws.google.package=com.google.api.ws.clients
/impl/etc/todo/todo.txt
1,7 → 1,13
Questão da identificacao dos Noturnos
Listagem de Programas
- Ano > Curso >
[CODIGO-NOMEUNI-SEMESTRE.pdf]
No caso de não haver:
[CODIGO-NOMEUNI-SEMESTRE-FALTA.pdf]
 
 
No dia da Instalação:
Pasta de Deliberações CC copy paste
Pasta de Deliberações CC copy paste.
 
 
Configuracoes de Teste
/impl/build.xml
1,4 → 1,4
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project name="estgweb" basedir="." default="help">
 
 
29,6 → 29,8
-->
<!--caso queiramos apagar os pregen hbm delPreGenAppScripts-->
<target name="all" depends="clean,initDirs,createConfigurationFiles,generateHibernateDomainObjects,generateHibernateDaoClasses,build,generateHibernateSql,build.war,dbInit"/>
<target name="allWebNode" depends="clean,initDirs,createConfigurationFiles,generateHibernateDomainObjects,generateHibernateDaoClasses,build.war"/>
<target name="dataNode" depends="clean,initDirs,createConfigurationFiles,generateHibernateDomainObjects,generateHibernateDaoClasses,build,generateHibernateSql"/>
 
 
<!--
98,19 → 100,19
<target name="tomcat.redeployContext" depends="tomcat.undeploy,build.war" >
<echo message="${tomcat.manager}"/>
<tomcat.install url="${tomcat.manager}" path="${tomcat.context.path.install}"
config="file:/${basedir}/${dist.dir}/estgweb.xml"
config="file:${basedir}/${dist.dir}/estgweb.xml"
username="${tomcat.username}" password="${tomcat.password}" />
</target>
<target name="tomcat.deploy" depends="build.war" >
<echo message="${tomcat.manager}"/>
<target name="tomcat.deploy" depends="war" >
<echo message="${tomcat.manager} path:${tomcat.context.path.install} warfile:file:${basedir}/${dist.dir}/${tomcat.war.file}"/>
<tomcat.deploy url="${tomcat.manager}" path="${tomcat.context.path.install}"
war="file:/${basedir}/${dist.dir}/${tomcat.war.file}"
war="file:${basedir}/${dist.dir}/${tomcat.war.file}"
username="${tomcat.username}" password="${tomcat.password}" />
</target>
<target name="tomcat.redeploy" depends="tomcat.undeploy,build.war">
<echo message="${tomcat.manager}"/>
<target name="tomcat.redeploy" depends="tomcat.undeploy,war">
<echo message="${tomcat.manager} path:${tomcat.context.path.install} warfile:file:${basedir}/${dist.dir}/${tomcat.war.file}"/>
<tomcat.deploy url="${tomcat.manager}" path="${tomcat.context.path.install}"
war="file:/${basedir}/${dist.dir}/${tomcat.war.file}"
war="file:${basedir}/${dist.dir}/${tomcat.war.file}"
username="${tomcat.username}" password="${tomcat.password}" />
</target>
<target name="tomcat.undeploy">
195,7 → 197,7
</replace>
</target>
 
<target name="build.war" depends="build,dist" description="Make war distribution">
<target name="build.war" depends="dist" description="Make war distribution">
<mkdir dir="${build.dir.war}"/>
<mkdir dir="${build.dir.war}/WEB-INF"/>
<mkdir dir="${build.dir.war}/WEB-INF/lib"/>
331,8 → 333,8
<copy overwrite="true" todir="${build.dir.intranet.setup.folders.file}" file="${intranet.setup.folders.file.src}"/>
 
<java classname="${scripts.buider.class}" classpath="${build.dir.classes}">
<arg value="${basedir}\..\common"/>
<arg value="${basedir}\build\ant\classes"/>
<arg value="${basedir}${file.separator}..${file.separator}common"/>
<arg value="${basedir}${file.separator}build${file.separator}ant${file.separator}classes"/>
<arg value="${build.dir.scripts}"/>
<arg value="${scripts.target.libs.file}"/>
</java>
374,6 → 376,7
</replace>
<replace file="${build.dir.classes}/${log4j.properties.filename}">
<replacefilter token="@log.file@" value="${log.file}"/>
<replacefilter token="@log.level@" value="${log.level}"/>
</replace>
<replace file="${build.dir.scripts}/${scripts.setenv.file}">
<replacefilter token="@tomcat.home@" value="${tomcat.home}"/>
495,4 → 498,4
<!--<java classname="mitra.oaiharvest.index.IndexEngine" classpath="${build.dir.classes}" classpathref="pathToToolsLib"/>-->
<!--</target>-->
 
</project>
</project>