Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 400 → Rev 408

/impl/conf/language/MessageResourcesFtpClient.properties
28,3 → 28,18
file.date=Data de Modificação
file.up.dir=Anterior
 
 
 
ftp.credentials.save.in.session=Guardar durante esta sessão
ftp.credentials.explain.1=Por omissão esta gestão de pastas usa o Nome de Utilizador e a Palavra Passe da sua conta de correio electrónico
ftp.credentials.explain.2=Se pretende alterar o Nome de Utilizador e a Palavra Passe com que vai administrar as pastas partilhadas introduza as novas credênciais neste formulário mas confirme as operações no botão do formulário de cima
ftp.manager.update=Gerir ficheiros nesta Pasta
ftp.manager.explain.1=Sabia que dentro da pasta onde se encontra pode enviar ou apagar um ficheiro e criar ou apagar uma pasta
ftp.manager.explain.2=Coloque na primeira caixa de texto o nome da nova pasta que deseja criar, ou então escolha um ficheiro do seu disco clicando em "Procurar"
ftp.manager.explain.3=Para executar as operações clique em confirmar
ftp.manager.explain.4=Pode ainda apagar os ficheiros e directórios clicando na cruz que apareceu à esquerda dos mesmos
ftp.manager.explain.5=Estas operações dependem das permissões atribuidas às pastas.
ftp.manager.create.folder=Criar uma pasta com o nome:
ftp.manager.upload.file=Enviar um ficheiro do meu computador:
ftp.credentials.change=Alterar credênciais
ftp.comfirm.delete=Tem a certeza que deseja apagar o ficheiro/directorio {0}
/impl/conf/language/MessageResources.properties
35,8 → 35,8
errors.detail={0}
errors.general=The process did not complete. Details should follow.
errors.token=Request could not be completed. Operation is not in sequence.
 
 
errors.file.too.long=Excedeu a capacidade máxima permitida de {0} Mbytes
errors.ftp.no.permission=O servidor de pastas partilhadas não permite efectuar as operações desejadas.
error.expiredate.expired=Data de expiração escolhida já expirou
error.expiredate.lesser.than.start.date=A data de expiração é menor que a data de inicio
forms.object.already.in.list={0} já está selecionado
64,6 → 64,8
error.401.item.3=Seguiu um link proveniente de um web site exterior cuja informação pode estar desactualizada
error.401.item.4=Seguiu um link interno errado ou desactualizado.
 
ftp.operation.success=A operação foi efectuada com sucesso
error.ftp.dir.not.empty=O directorio que pretende apagar não se encontra vazio. Por favor apague primeiro o seu conteúdo.
 
organization=Organização
areas=Areas
310,7 → 312,7
authentication.first.time=Olá bem-vindo, é a primeira vez que que se esta a ligar
authenticate.already.authenticated=O seu usuário já está autênticado
username=Nome de Utilizador
password=Password
password=Palavra Passe
password.again=Repita a password
submit=Entrar
edit=Editar
428,3 → 430,4
 
 
 
 
/impl/conf/language/MessageResourcesCourseUnits.properties
59,6 → 59,7
courseunit.assignement.deliver.date=Data Limite de Entrega
courseunit.assignement.deliver.type=Tipo de entrega
courseunit.assignement.deliver.type.zipfile=Ficheiro Comprimido (ZIP)
courseunit.assignement.deliver.type.file=Ficheiro Electrónico
courseunit.assignement.deliver.grade=Nota
courseunit.assignement.deliver.show.obs=Adicionar observações
courseunit.assignement.deliver.obs=obs
74,6 → 75,7
errors.courseunit.assignement.deliver.zip=Por favor escolha um ficheiro comprimido em formato ZIP
errors.courseunit.assignement.file.type=Por favor escolha um ficheiro comprimido em formato ZIP
courseunit.students=Estudantes
courseunit.students.count=Total de estudantes inscritos
 
courseunit.assignement.deliver.time=Entregue
courseunit.assignement.deliver.time.ok=Entregue a Horas
/impl/conf/WEB-INF/struts/tiles-courseunits.xml
83,6 → 83,7
<put name="topnav" value="/user/home/topnavCourseUnitStudent.jsp"/>
</definition>
<definition name="page.courseLayoutIOnline.proxy.ftp" extends="page.separators.home">
<put name="admin" value="/user/ftpclient/adminFolder.jsp"/>
<put name="title" value="Conteudos da Unidade Curricular"/>
<put name="left" value="/user/courseunits/menu.jsp"/>
<put name="body" value="/user/courseunits/ftpClient.jsp"/>
/impl/conf/WEB-INF/struts/tiles-intranet.xml
12,6 → 12,7
<put name="navigationTop" value="/layout/topnavempty.jsp"/>
<put name="left" value="/layout/topnavempty.jsp"/>
<put name="right" value="/layout/topnavempty.jsp"/>
<put name="admin" value="/layout/topnavempty.jsp"/>
</definition>
 
<definition name="page.separators.home" extends="base.separators">
41,6 → 42,7
</definition>
 
<definition name="page.layoutIOnline.proxy.ftp" extends="base.separators">
<put name="admin" value="/user/ftpclient/adminFolder.jsp"/>
<put name="separator" value="5" type="string"/>
<put name="body" value="/user/ftpclient/ftpclient.jsp"/>
</definition>
/impl/conf/WEB-INF/web.xml
5,6 → 5,10
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
 
<filter>
<filter-name>RequestedUrlFilter</filter-name>
<filter-class>pt.estgp.estgweb.web.filters.RequestURLFilter</filter-class>
</filter>
<filter>
<filter-name>CookieFilter</filter-name>
<filter-class>pt.estgp.estgweb.web.filters.CookieFilter</filter-class>
</filter>
50,6 → 54,10
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>RequestedUrlFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>TopImageFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
/impl/conf/app.properties
379,9 → 379,13
top.image.url.9=/proxy/contactosAlunosPortalMenu/estgp/public/portal/imagens/topTeacher.jpg
 
 
############################################################################
# UPLOAD MAX SIZE
#
#
max.file.size.upload.mbytes=20
 
 
 
###########################################################################
#
# AREAS CIENTIFICAS
/impl/conf/directories/utilsIntranet.xml
2,10 → 2,8
<directory place="intranetUtils" label="Utilitários" layout="layoutIntranetUtils" layoutRoot="layoutIntranetUtils" targetRole="student" id="utilsIntranet" menuKey="intranet.separator.utils" style="styleIntranet.xsl" xmlns="http://www.estgp.pt/baco/directory/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.estgp.pt/baco/directory/ directory.xsd">
<leaf absolute="false" label="Home Utilitários" layout="true" proxy="estgp" id="utils" url="/intranet/escola/utils.html"/>
<leaf absolute="false" label="Secretaria" layout="true" proxy="estgp" id="secretaria" url="/intranet/escola/secretaria.html">
<leaf label="Calendário Escolar" id="calEscolar" absolute="false" remoteExtensionRoot="true" style="true" proxy="ionline" layout="true" url="/Intranet/Escola/Secretaria/CalEscolar"/>
<leaf label="Calendário de Exames" id="calExames" absolute="false" remoteExtensionRoot="true" style="true" proxy="ionline" layout="true" url="/Intranet/Escola/Secretaria/CalExames"/>
<leaf absolute="false" label="Documentos de Apoio" layout="true" proxy="estgp" id="documentosApoio" url="/intranet/escola/secretaria/documentosApoio.html"/>
<leaf label="Formulários [alunos]" id="Forms.Alunos" absolute="false" remoteExtensionRoot="true" style="true" proxy="ionline" layout="true" url="/Intranet/Escola/Secretaria/Forms.Alunos"/>
<leaf absolute="false" label="Formulários [alunos]" layout="true" proxy="estgp" id="Forms.Alunos" url="/intranet/escola/secretaria/formulariosAlunos.html"/>
<leaf absolute="false" label="Legislação" layout="true" proxy="estgp" id="legislacao" url="/intranet/escola/secretaria/legislacao.html"/>
<leaf label="Folhas de Presenças" id="Folhas.Presencas" absolute="false" remoteExtensionRoot="true" style="true" proxy="ionline" layout="true" url="/Intranet/Escola/Secretaria/Folhas.Presencas"/>
<leaf label="Projectos-AA,CA,GE,MKT" id="Projectos.Finais" absolute="false" remoteExtensionRoot="true" style="true" proxy="ionline" layout="true" url="/Intranet/Escola/Secretaria/Projectos.Finais"/>
16,5 → 14,6
<leaf absolute="false" label="Horários de Docentes" layout="true" proxy="estgp" id="horariosDocentes" url="/intranet/escola/horarios_Docentes.html"/>
<leaf absolute="false" label="Horários de Salas" layout="true" proxy="estgp" id="horariosSalas" url="/intranet/escola/horarios_salas.html"/>
</leaf>
<leaf absolute="false" label="Calendário de Exames" layout="true" proxy="estgp" id="exames" url="/intranet/escola/Exames.html"/>
<leaf label="Calendário Escolar" id="calEscolar" absolute="true" url="ftp://www.global.estgp.pt/Intranet/Escola/Secretaria/CalEscolar/CL20082009.pdf"/>
<leaf absolute="false" label="Calendário de Exames" layout="true" proxy="estgp" id="exames" url="/intranet/escola/Exames.html"/>
</directory>
/impl/conf/directories/styleIntranet.xsl
2,9 → 2,17
<xsl:stylesheet xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:cmPort="http://www.cm-portalegre.pt/projectos/" version="1.0" xmlns:saxon="http://saxon.sf.net/" extension-element-prefixes="saxon" xmlns:d="http://www.estgp.pt/baco/directory/" xmlns:foo="foo" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<xsl:import href="style1.xsl"/>
 
<xsl:template match="d:leaf" mode="topNav">
 
<xsl:template name="homeLink">
<a>
<xsl:attribute name="href"><xsl:value-of select="$contextPath"/>/dir/<xsl:value-of select="/d:directory/@id"/>/<xsl:value-of select="/d:directory/*[1]/@id"/><xsl:value-of select="/d:directory/*[1]/@url"/></xsl:attribute>
<xsl:value-of select="/d:directory/@label"/>
</a>
</xsl:template>
 
 
<xsl:template match="d:leaf" mode="topNav">
<xsl:if test="not(local-name(..) = 'directory')">
<div id="topnav">
<ul>
78,9 → 86,10
</xsl:if>
<li class="navPlace">
<xsl:if test="not(local-name(..) = 'directory')">
<xsl:if test="local-name(..) = 'directory'">
<xsl:call-template name="homeLink"/>
</xsl:if>
&gt;
</xsl:if>
<xsl:apply-templates select="." mode="link"/>
</li>
</xsl:template>
91,10 → 100,10
</xsl:if>
<li class="navPlace">
<xsl:if test="not(local-name(..) = 'directory')">
&gt;
</xsl:if>
<xsl:apply-templates select="." mode="link"/>
<xsl:if test="local-name(..) = 'directory'">
<xsl:call-template name="homeLink"/>
</xsl:if>
&gt; <xsl:apply-templates select="." mode="link"/>
</li>
</xsl:template>
180,6 → 189,6
</xsl:template>
 
 
 
</xsl:stylesheet>
/impl/conf/berserk/sd.xml
609,6 → 609,19
</filterChains>
</service>
 
<!--FTP Service-->
<service>
<name>FtpService</name>
<implementationClass>pt.estgp.estgweb.services.ftpservices.FtpService</implementationClass>
<description>Manage FTP Files and Folders</description>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
</filterChains>
</service>
 
<!--Pop Email Services-->
<service>
<name>ReadEmailService</name>
/impl/src/java/pt/estgp/estgweb/Globals.java
141,6 → 141,7
 
public static final int REMINDER_TEXT_SUMMARY_SIZE = ConfigProperties.getIntProperty("reminders.text.summary.size");
 
public static final int MAX_FILE_UPOLOAD_SIZE_MBYTES = ConfigProperties.getIntProperty("max.file.size.upload.mbytes");
public static final long MAX_BIGMAGE_FILE_SIZE_KBYTES = 500;
public static final long MAX_SMALLIMAGE_FILE_SIZE_KBYTES = 500;
public static final long MAX_BIGMAGE_FILE_SIZE_BYTES = MAX_BIGMAGE_FILE_SIZE_KBYTES * 1024;
/impl/src/java/pt/estgp/estgweb/services/ftpservices/FtpRequestForm.java
New file
0,0 → 1,119
package pt.estgp.estgweb.services.ftpservices;
 
import org.apache.commons.fileupload.FileItem;
 
import java.io.InputStream;
import java.util.List;
 
/**
* @author Jorge
* @date 26/Fev/2009
* @time 23:27:41
*/
public class FtpRequestForm
{
 
boolean savePassword = false;
String startPath;
String serverUrl;
 
String username;
String password;
 
String newFolderName;
List<FileItem> filesToImport;
String fileToDelete;
String folderToDelete;
 
 
public boolean isSavePassword()
{
return savePassword;
}
 
public void setSavePassword(boolean savePassword)
{
this.savePassword = savePassword;
}
 
public String getStartPath()
{
return startPath;
}
 
public void setStartPath(String startPath)
{
this.startPath = startPath;
}
 
public String getServerUrl()
{
return serverUrl;
}
 
public void setServerUrl(String serverUrl)
{
this.serverUrl = serverUrl;
}
 
public String getUsername()
{
return username;
}
 
public void setUsername(String username)
{
this.username = username;
}
 
public String getPassword()
{
return password;
}
 
public void setPassword(String password)
{
this.password = password;
}
 
public String getNewFolderName()
{
return newFolderName;
}
 
public void setNewFolderName(String newFolderName)
{
this.newFolderName = newFolderName;
}
 
public List<FileItem> getFilesToImport()
{
return filesToImport;
}
 
public void setFilesToImport(List<FileItem> filesToImport)
{
this.filesToImport = filesToImport;
}
 
public String getFileToDelete()
{
return fileToDelete;
}
 
public void setFileToDelete(String fileToDelete)
{
this.fileToDelete = fileToDelete;
}
 
 
public String getFolderToDelete()
{
return folderToDelete;
}
 
public void setFolderToDelete(String folderToDelete)
{
this.folderToDelete = folderToDelete;
}
}
/impl/src/java/pt/estgp/estgweb/services/ftpservices/FtpService.java
New file
0,0 → 1,105
package pt.estgp.estgweb.services.ftpservices;
 
import pt.utl.ist.berserk.logic.serviceManager.IService;
import pt.estgp.estgweb.services.email.ReadEmailService;
import pt.estgp.estgweb.services.email.IPopEmail;
import pt.estgp.estgweb.services.email.IAddress;
import pt.estgp.estgweb.services.email.impl.DefaultPopEmail;
import pt.estgp.estgweb.services.email.impl.DefaultAddress;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.UserImpl;
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.web.utils.DatesUtils;
import pt.estgp.estgweb.web.FtpServer;
import org.apache.log4j.Logger;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.fileupload.FileItem;
 
import java.util.List;
import java.util.Properties;
import java.util.Date;
import java.util.ArrayList;
import java.io.*;
 
import jomm.utils.DesUtils;
import jomm.utils.StringsUtils;
 
import javax.mail.*;
import javax.mail.internet.InternetAddress;
 
/**
* @author Jorge Machado
* @date 20/Mar/2008
* @time 18:31:00
* @see pt.estgp.estgweb.services.email
*/
public class FtpService implements IService
{
 
private static final Logger logger = Logger.getLogger(FtpService.class);
 
private static final String FTP_PASSWORD = "pt.estgp.estgweb.services.ftpservices.FtpService.FTP_PASSWORD";
 
public String run(FtpRequestForm ftpRequestForm, UserSession userSession) throws IOException
{
if(ftpRequestForm.isSavePassword() && ftpRequestForm.getPassword() != null && ftpRequestForm.getPassword().trim().length() > 0)
{
((UserSessionImpl)userSession).put(FTP_PASSWORD,DesUtils.getInstance().encrypt(ftpRequestForm.getPassword()));
}
String passwordCode = (String) ((UserSessionImpl)userSession).get(FTP_PASSWORD);
String password;
if(passwordCode != null)
{
logger.info("using saved password");
password = DesUtils.getInstance().decrypt(passwordCode);
}
else
{
logger.info("trying pop 3 password");
password = DesUtils.getInstance().decrypt(userSession.getUser().getPop3password());
}
String username = ftpRequestForm.getUsername();
if(username == null || username.trim().length() == 0)
username = userSession.getUsername();
FtpServer server = FtpServer.getNewServer(ftpRequestForm.getServerUrl(),username,password);
FTPClient client = server.getClient();
String result = "ftp.operation.success";
client.setFileType(FTP.BINARY_FILE_TYPE);
client.changeWorkingDirectory(ftpRequestForm.getStartPath());
if(ftpRequestForm.getFilesToImport() != null)
{
for(FileItem item: ftpRequestForm.getFilesToImport())
{
if(!client.storeFile(item.getName(),item.getInputStream()))
result = "errors.ftp.no.permission";
}
}
if(ftpRequestForm.getNewFolderName() != null && ftpRequestForm.getNewFolderName().trim().length() > 0)
{
if(!client.makeDirectory(ftpRequestForm.getNewFolderName()))
result = "errors.ftp.no.permission";
}
if(ftpRequestForm.getFileToDelete() != null && ftpRequestForm.getFileToDelete().trim().length() > 0)
{
if(!client.deleteFile(ftpRequestForm.getFileToDelete()))
result = "errors.ftp.no.permission";
}
if(ftpRequestForm.getFolderToDelete() != null && ftpRequestForm.getFolderToDelete().trim().length() > 0)
{
int code = client.rmd(ftpRequestForm.getFolderToDelete());
if(code != 250)
{
if(code == 550)
return "error.ftp.dir.not.empty";
else if(code == 530)
return "errors.ftp.no.permission";
}
 
}
client.quit();
client.disconnect();
return result;
}
}
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitView.java
7,10 → 7,7
import pt.estgp.estgweb.services.expceptions.ServiceException;
 
import java.io.Serializable;
import java.util.Set;
import java.util.List;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.*;
 
/**
* @author Jorge Machado
42,6 → 39,8
private CourseUnit courseUnit;
private Set<UserView> teachers;
private Set<UserView> students;
private List<UserView> studentsOrderedByName;
private List<UserView> studentsOrderedByNumber;
 
private String objectives;
private String programStreamId;
490,4 → 489,54
}
return strBuilder.toString();
}
 
 
public List<UserView> getStudentsOrderedByNumber()
{
if(studentsOrderedByNumber == null && students != null)
{
studentsOrderedByNumber = new ArrayList(students);
Collections.sort(studentsOrderedByNumber,new Comparator<UserView>()
{
 
public int compare(UserView o1, UserView o2)
{
if(o1 == null)
return 1;
if(o2 == null)
return -1;
if(o1.getCode() > o2.getCode())
return 1;
else if(o1.getCode() < o2.getCode())
return -1;
else
return 0;
}
}
);
}
return studentsOrderedByNumber;
}
 
public List<UserView> getStudentsOrderedByName()
{
if(studentsOrderedByName == null && students != null)
{
studentsOrderedByName = new ArrayList(students);
Collections.sort(studentsOrderedByName,new Comparator<UserView>()
{
 
public int compare(UserView o1, UserView o2)
{
if(o1 == null || o1.getName() == null)
return 1;
if(o2 == null || o2.getName() == null)
return -1;
return o1.getName().compareTo(o2.getName());
}
}
);
}
return studentsOrderedByName;
}
}
/impl/src/java/pt/estgp/estgweb/web/DirWebProxy.java
4,6 → 4,7
import org.apache.commons.httpclient.util.URIUtil;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTP;
import org.dom4j.*;
import org.dom4j.io.OutputFormat;
 
38,6 → 39,8
public class DirWebProxy extends HttpServlet
{
 
public static final String FTP_ACTUAL_PATH_KEY = "pt.estgp.estgweb.web.DirWebProxy.FTP_ACTUAL_PATH_KEY";
 
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
*
195,6 → 198,7
protected static void extendDiretoryDocument(HttpServletRequest request, String path, String serverStr, String server, String startPath, Document directoryDocument)
throws ServletException, IOException
{
 
try
{
String user = ConfigProperties.getProperty(serverStr + ".user");
205,11 → 209,12
 
FtpServer ftpServer = FtpServer.getServer(server, user, pass);
FTPClient client = ftpServer.getClient();
 
Element actualNode = (Element) request.getAttribute("actualNode");
 
if(startPath.equals("/"))
startPath = "";
request.setAttribute(FTP_ACTUAL_PATH_KEY,startPath);
if (path.equals(startPath))
{
client.changeWorkingDirectory(path);
250,7 → 255,7
pathFragments = pathAux.split("/");
 
 
client.changeWorkingDirectory(startPath);
client.changeWorkingDirectory(startPath);
FTPFile[] files = client.listFiles();
List<IFile> iFiles = FtpFile.init(files, server, path);
Element goDeepElement = null;
614,5 → 619,18
{
return "Proxy Servlet to forward to HTTP or FTP Proxy";
}
 
public static void main(String[]args) throws IOException
{
FtpServer server = FtpServer.getServer("ftp://www.global.estgp.pt","jmachado","linux5631");
FTPClient client = server.getClient();
client.setFileType(FTP.BINARY_FILE_TYPE);
FileInputStream teste = new FileInputStream("D:\\resources.properties");
client.changeWorkingDirectory("/Engenharia.Informatica.9119/AnoLectivo.2008-2009/Semestre1/Engenharia.Do.Software");
client.makeDirectory("ttt");
System.out.println(client.storeFile("resources.properties",teste));
client.quit();
client.disconnect();
}
// </editor-fold>
}
/impl/src/java/pt/estgp/estgweb/web/DirLayoutController.java
25,6 → 25,7
import pt.estgp.estgweb.utils.Dom4jUtil;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException;
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController;
import pt.estgp.estgweb.services.directories.DirectoryNodeType;
import jomm.web.ftp.IFile;
import jomm.web.ftp.impl.FtpFile;
36,7 → 37,7
* @time 18:01:54
* @see pt.estgp.estgweb.web
*/
public class DirLayoutController extends Action
public class DirLayoutController extends ApplicationDispatchController
{
 
private static final Logger logger = Logger.getLogger(DirLayoutController.class);
213,6 → 214,7
if (layout != null && layout.length() > 0) layoutDo = Boolean.parseBoolean(layout);
if (!layoutDo) layoutChoosed = "layoutEmpty";
putProxyAttributes(request, proxy, externalFile,xml,url);
FtpManager.checkOperations(this,request,response);
request.setAttribute("label", label);
request.setAttribute("style", style);
request.setAttribute("xml", xml);
266,6 → 268,7
request.setAttribute("path", externalFile);
request.setAttribute("startPath", confStartPath);
 
 
if(confStartPath == null)
confStartPath = "";
if(externalFile == null)
/impl/src/java/pt/estgp/estgweb/web/FtpServer.java
21,8 → 21,6
private static HashMap<String, FtpServer> servers = new HashMap<String, FtpServer>();
 
 
 
 
String host = null;
int port = 21;
String username = null;
103,7 → 101,32
return ftpServer;
}
 
/**
public static FtpServer getNewServer(String urlStr, String user, String pass)
{
 
try
{
URL url = new URL(urlStr);
String host = url.getHost();
int port = url.getPort();
if (port <= 0)
port = 21;
logger.info("Connecting to " + host + "in port:" + port);
return new FtpServer(host, port, user, pass);
}
catch (MalformedURLException e)
{
logger.error(e, e);
}
catch (IOException e)
{
logger.error(e, e);
}
return null;
 
}
 
/**
* Add a ftpServer to Cache
*
* @param urlStr to parse
135,4 → 158,6
}
return null;
}
 
 
}
/impl/src/java/pt/estgp/estgweb/web/LayoutController.java
7,21 → 7,18
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
 
/**
30,9 → 27,11
* @time 18:01:54
* @see pt.estgp.estgweb.web
*/
public class LayoutController extends Action
public class LayoutController extends ApplicationDispatchController
{
 
public static final String FTP_ACTUAL_PATH_KEY = "pt.estgp.estgweb.web.LayoutController.FTP_ACTUAL_PATH_KEY";
 
private static final Logger logger = Logger.getLogger(LayoutController.class);
 
public ActionForward execute(ActionMapping mapping,
80,7 → 79,7
// if(con.getContentType() != null && con.getContentType().toLowerCase().indexOf("html") >= 0)
if (server.startsWith("ftp://"))
{
processRequestFtp(request, path, serverParameter, server,startPath);
processRequestFtp(request, response, path, serverParameter, server,startPath);
return mapping.findForward(layout + ".ftp");
}
else
111,11 → 110,16
 
 
 
protected void processRequestFtp(HttpServletRequest request, String path, String serverStr, String server, String startPath)
protected void processRequestFtp(HttpServletRequest request, HttpServletResponse response, String path, String serverStr, String server, String startPath)
throws ServletException, IOException
{
try
{
request.setAttribute(FTP_ACTUAL_PATH_KEY,path);
 
//Check if user wants to create folders or upload files
FtpManager.checkOperations(this,request,response);
 
String user = ConfigProperties.getProperty(serverStr + ".user");
String pass = ConfigProperties.getProperty(serverStr + ".pass");
 
/impl/src/java/pt/estgp/estgweb/web/form/courseunits/CourseUnitsForm.java
226,10 → 226,10
{
addMessageWithKeys(errors,httpServletRequest,"errors.required","courseunit.title");
}
if(uploadFile != null && uploadFile.getFileSize() > 0 && !uploadFile.getFileName().endsWith(".zip"))
{
addMessage(errors,httpServletRequest,"errors.courseunit.assignement.file.type");
}
// if(uploadFile != null && uploadFile.getFileSize() > 0 && !uploadFile.getFileName().endsWith(".zip"))
// {
// addMessage(errors,httpServletRequest,"errors.courseunit.assignement.file.type");
// }
return errors;
}
 
240,10 → 240,10
{
addMessage(errors,httpServletRequest,"errors.courseunit.assignement.deliver.file");
}
if(uploadFile != null && uploadFile.getFileName() !=null && !uploadFile.getFileName().endsWith(".zip"))
{
addMessage(errors,httpServletRequest,"errors.courseunit.assignement.deliver.zip");
}
// if(uploadFile != null && uploadFile.getFileName() !=null && !uploadFile.getFileName().endsWith(".zip"))
// {
// addMessage(errors,httpServletRequest,"errors.courseunit.assignement.deliver.zip");
// }
return errors;
}
 
/impl/src/java/pt/estgp/estgweb/web/FtpManager.java
New file
0,0 → 1,133
package pt.estgp.estgweb.web;
 
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.services.ftpservices.FtpRequestForm;
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
 
/**
* @author Jorge
* @date 27/Fev/2009
* @time 1:19:57
*/
public class FtpManager
{
 
private static final Logger logger = Logger.getLogger(FtpManager.class);
 
public static void checkOperations(ApplicationDispatchController messageBack, HttpServletRequest request, HttpServletResponse response)
{
String formUploadStyle = "display:none;";
int maxMegas = pt.estgp.estgweb.Globals.MAX_FILE_UPOLOAD_SIZE_MBYTES;
try
{
 
// Check that we have a file upload request
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart)
{
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Set factory constraints
factory.setSizeThreshold(maxMegas * 1024 * 1024);
factory.setRepository(new File(pt.estgp.estgweb.Globals.TMP_DIR));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Set overall request size constraint
upload.setSizeMax((maxMegas + 1) * 1024 * 1024);
// Parse the request
List<FileItem> items = upload.parseRequest(request);
List<FileItem> items2import = new ArrayList<FileItem>();
for (FileItem item : items)
{
InputStream stream = item.getInputStream();
if (item.isFormField())
{
request.setAttribute(item.getFieldName(), item.getString());
}
if (stream != null && item.getSize() > 0 && item.getName() != null)
{
items2import.add(item);
}
}
String username = (String) request.getAttribute("username");
String password = (String) request.getAttribute("password");
String server = (String) request.getAttribute("server");
String startPath = (String) request.getAttribute(DirWebProxy.FTP_ACTUAL_PATH_KEY);
if (startPath == null)
startPath = (String) request.getAttribute(LayoutController.FTP_ACTUAL_PATH_KEY);
String savePassword = (String) request.getAttribute("savePassword");
String newFolder = (String) request.getAttribute("newFolder");
String deleteFile = (String) request.getAttribute("deleteFile");
String deleteFolder = (String) request.getAttribute("deleteFolder");
if (items2import.size() > 0
||
(newFolder != null && newFolder.trim().length() > 0)
||
(deleteFile != null && deleteFile.trim().length() > 0)
||
(deleteFolder != null && deleteFolder.trim().length() > 0))
{
 
FtpRequestForm ftpRequestForm = new FtpRequestForm();
ftpRequestForm.setUsername(username);
ftpRequestForm.setPassword(password);
if (savePassword != null && savePassword.trim().length() > 0)
ftpRequestForm.setSavePassword(true);
ftpRequestForm.setNewFolderName(newFolder);
ftpRequestForm.setFileToDelete(deleteFile);
ftpRequestForm.setFolderToDelete(deleteFolder);
ftpRequestForm.setServerUrl(server);
ftpRequestForm.setStartPath(startPath);
ftpRequestForm.setFilesToImport(items2import);
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{ftpRequestForm};
try
{
String result = (String) sm.execute(RequestUtils.getRequester(request, response), "FtpService", args, names);
if(result.indexOf("error") >= 0)
messageBack.addError(request, result);
else
messageBack.addMessage(request, result);
 
}
catch (Exception e)
{
response.sendError(500,e.toString());
return;
}
catch (Throwable throwable)
{
logger.error(throwable,throwable);
}
}
}
}
catch (FileUploadException e)
{
formUploadStyle = "";
messageBack.addError(request,"errors.file.too.long",""+maxMegas);
 
}
catch (Throwable e)
{
logger.error(e,e);
}
request.setAttribute("formUploadStyle",formUploadStyle);
}
}
/impl/src/java/pt/estgp/estgweb/web/controllers/courseunits/CourseUnitsController.java
210,7 → 210,7
CourseUnitsForm cUF = (CourseUnitsForm) form;
int id;
 
if(request.getParameter("code")!=null)
if(request.getParameter("code") != null)
{
id = Integer.parseInt(request.getParameter("code"));
UserView userView = new ProfileController().loadUserWithRecordsCode(id,request,response);
/impl/src/java/pt/estgp/estgweb/web/filters/RequestURLFilter.java
New file
0,0 → 1,66
package pt.estgp.estgweb.web.filters;
 
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.web.utils.RequestUtils;
 
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 RequestURLFilter implements Filter
{
 
public static final String REQUESTED_URL = "pt.estgp.estgweb.web.filters.RequestURLFilter.REQUESTED_URL";
 
public RequestURLFilter()
{
}
 
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();
}
if(hrequest.getQueryString() != null && hrequest.getQueryString().length()>0)
relativePath += "?" + hrequest.getQueryString();
 
 
String url = relativePath;
 
hrequest.setAttribute(REQUESTED_URL,url);
 
chain.doFilter(request,response);
}
 
public void destroy()
{
// Nothing
}
}
/impl/src/web/css/style.css
1378,6 → 1378,25
}
 
 
table.quadro
{
width:650px;
border: 1px solid black;
padding: 10px;
}
.quadro td
{
text-align:center;
}
table.quadro th
{
padding-bottom:5px;
}
table.quadro th.side
{
padding:0px;
text-align:left;
}
/*.messages td*/
.dataTable
{
/impl/src/web/js/ajax.js
102,6 → 102,42
}
}
 
 
function getObjectByStartId(objectId)
{
// cross-browser function to get an object's style object given its id
try
{
for(var element in document.elements)
{
alert(element.value);
}
// if(document.getElementById && document.getElementById(objectId))
// {
// // W3C DOM
// return document.getElementById(objectId);
// }
// else if (document.all(objectId))
// {
// // MSIE 4 DOM
// return document.all(objectId);
// }
// else if (document.layers && document.layers[objectId])
// {
// // NN 4 DOM.. note: this won't find nested layers
// return document.layers[objectId];
// }
// else
// {
// return false;
// }
}
catch(e)
{
return false;
}
}
 
function hide(id,showId)
{
hideOne(id);
134,6 → 170,14
hideOne(id);
}
 
function showOrHideOneWithStartId(id)
{
for(var i = 1; getObjectById(id + i) != '' && getObjectById(id + i) != null && getObjectById(id + i) != 'undefined'; i++)
{
showOrHideOne(id + i);
}
}
 
function showOrHide(id,hideValue,showValue)
{
if(getObjectById(id).style.display == 'none')
/impl/src/web/layout/layoutintranet.jsp
31,6 → 31,7
<tiles:insert attribute="left"/>
</td>
<td width="100%" valign="top">
<tiles:insert attribute="admin"/>
<tiles:insert attribute="body"/>
</td>
<td id="rightPage" valign="top">
/impl/src/web/public/courses/courseList.jsp
15,19 → 15,17
<logic:notEmpty name="courseView" property="studiesPlanStreamId">
<li>
<p><a href="javascript:showOrHideOne(${courseView.id})">${courseView.name}</a> - <%=Globals.NATIONAL_INSTITUTION_CODE%>/${courseView.code} - (<a href="<%=request.getContextPath() + "/startLoadCourse.do?type=" + request.getAttribute("type") + "&courseView.id=" + courseView.getId()%>"><bean:message key="course.studies.plan.users"/> </a>)</p>
<logic:notEmpty name="courseView" property="description">
<div style="padding-left:20px;">
<div class="seccao borderLeft" style="display:none;" id="${courseView.id}">
<div style="padding-left:20px;">
<div class="seccao borderLeft" style="display:none;" id="${courseView.id}">
 
<logic:notEmpty name="courseView" property="formatedDescription"><p>${courseView.formatedDescription}</p></logic:notEmpty>
<logic:notEmpty name="courseView" property="externalSitePath">
<%
WebProxy.processHttpRequestService(out, courseView.getExternalSiteServer(), courseView.getExternalSitePath());
%>
</logic:notEmpty>
</div>
<logic:notEmpty name="courseView" property="formatedDescription"><p>${courseView.formatedDescription}</p></logic:notEmpty>
<logic:notEmpty name="courseView" property="externalSitePath">
<%
WebProxy.processHttpRequestService(out, courseView.getExternalSiteServer(), courseView.getExternalSitePath());
%>
</logic:notEmpty>
</div>
</logic:notEmpty>
</div>
</li>
</logic:notEmpty>
</logic:iterate>
/impl/src/web/public/courses/course.jsp
12,11 → 12,6
<div class="seccao">
<h2>${CourseView.name} (<%=Globals.NATIONAL_INSTITUTION_CODE%> / ${CourseView.code})</h2>
 
<logic:notEmpty name="CourseView" property="externalSitePath">
<%
WebProxy.processHttpRequestService(out,CourseView.getExternalSiteServer(),CourseView.getExternalSitePath());
%>
</logic:notEmpty>
<logic:empty name="CourseView" property="cacheWebDocument">
<div class="seccao">
<h2>Unidades Curriculares</h2>
/impl/src/web/public/portals/alunos/informacaoAcademicaLinks.jsp
13,6 → 13,4
topNav.addNavPlace(startLink + "/informacaoAcademicaCets.html"+Globals.PORTAL_ROLE_VIEW_STUDENT, "portal.informacao.academica.cets");
topNav.addNavPlace(startLink + "/informacaoAcademicaMaiores23.html"+Globals.PORTAL_ROLE_VIEW_STUDENT, "portal.informacao.academica.maiores.23");
topNav.addNavPlace(startLink + "/informacaoAcademicaOutrasFormacoes.html"+Globals.PORTAL_ROLE_VIEW_STUDENT, "portal.informacao.academica.outras.formacoes");
Outras Formações
%>
/impl/src/web/user/courseunits/courseunitworks.jsp
61,7 → 61,7
</th>
<td>
<html:select property="courseUnitAssignementView.deliverType">
<html:option value="zipfile" key="courseunit.assignement.deliver.type.zipfile"/>
<html:option value="file" key="courseunit.assignement.deliver.type.file"/>
<html:option value="nofile" key="courseunit.assignement.deliver.type.nofile"/>
</html:select>
</td>
/impl/src/web/user/courseunits/students.jsp
22,17 → 22,25
}
request.setAttribute("user", user);
request.setAttribute("fromAction", fromAction);
 
String orderBy = request.getParameter("order");
if(orderBy != null && orderBy.equals("byNumber"))
request.setAttribute("students",CourseUnitView.getStudentsOrderedByNumber());
else
request.setAttribute("students",CourseUnitView.getStudentsOrderedByName());
%>
<div id="contentIntranet">
<div id="contentPane">
<p><bean:message key="courseunit.students.count"/>: ${CourseUnitView.studentsSize}</p>
<table class="dataTable">
<tr>
<th><bean:message key="number"/></th>
<th><bean:message key="name"/></th>
<th><html:link action="${user}/startLoadCourseUnitStudents${fromAction}?courseUnitView.id=${CourseUnitView.id}&order=byNumber"><bean:message key="number"/></html:link></th>
<th><html:link action="${user}/startLoadCourseUnitStudents${fromAction}?courseUnitView.id=${CourseUnitView.id}&order=byName"><bean:message key="name"/></html:link></th>
<th><bean:message key="user"/></th>
<th><bean:message key="email"/></th>
</tr>
<logic:iterate id="student" name="CourseUnitView" property="students" type="pt.estgp.estgweb.domain.views.UserView">
<logic:iterate id="student" name="students" type="pt.estgp.estgweb.domain.views.UserView">
<tr>
<td>
${student.code}
/impl/src/web/user/ftpclient/adminFolder.jsp
New file
0,0 → 1,71
<%@ page import="pt.estgp.estgweb.web.filters.RequestURLFilter" %>
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
<%@ 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-tiles.tld" prefix="tiles" %>
 
<div class="contentPane">
<div class="seccao">
 
<html:errors/>
<jomm:messages/>
 
<p><a href="javascript:showOrHideOne('adminZone');showOrHideOneWithStartId('FTP_NODE_')"><bean:message key="ftp.manager.update"/></a></p>
 
<div id="adminZone" style="${formUploadStyle}">
<div class="contentPane">
<div class="seccao form blockForm">
<form name="FormFtpManager" action="<%=request.getContextPath() + request.getAttribute(RequestURLFilter.REQUESTED_URL)%>" method="post" enctype="multipart/form-data">
<input type="hidden" name="deleteFile"/>
<input type="hidden" name="deleteFolder"/>
<h3><bean:message key="ftp.manager.explain.1"/></h3>
<p>(<bean:message key="ftp.manager.explain.5"/>)</p>
<ul>
<li><bean:message key="ftp.manager.explain.2"/></li>
<li><bean:message key="ftp.manager.explain.3"/></li>
<li><bean:message key="ftp.manager.explain.4"/></li>
</ul>
<table>
<tr>
<th><bean:message key="ftp.manager.create.folder"/></th>
<td><input type="text" name="newFolder"></td>
</tr>
<tr>
<th><bean:message key="ftp.manager.upload.file"/></th>
<td><input type="file" name="newFile"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Confirmar"></td>
</tr>
</table>
<div class="seccao">
<p><a href="javascript:showOrHideOne('adminPasswordZone')"><bean:message key="ftp.credentials.change"/></a></p>
<div id="adminPasswordZone" style="display:none;">
<ul>
<li><bean:message key="ftp.credentials.explain.1"/></li>
<li><bean:message key="ftp.credentials.explain.2"/></li>
</ul>
<table>
<tr>
<th><bean:message key="username"/></th>
<td><input type="text" name="username"></td>
</tr>
<tr>
<th><bean:message key="password"/></th>
<td><input type="password" name="password"></td>
</tr>
<tr>
<th><bean:message key="ftp.credentials.save.in.session"/></th>
<td><input type="checkbox" name="savePassword"></td>
</tr>
</table>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
/impl/src/web/user/ftpclient/ftpclient.jsp
111,6 → 111,7
</th>
</tr>
<%
int counter = 0;
if (iFiles.size() > 0)
{
%>
119,9 → 120,13
{
if (i.isDirectory())
{
request.setAttribute("i",i);
%>
<tr class="dir">
<td colspan="3">
 
<a id="FTP_NODE_<%=++counter%>" style="display:none" href="javascript:if(confirmLink('<bean:message key="ftp.comfirm.delete" arg0="${i.name}"/>')){document.FormFtpManager.deleteFolder.value='<%=i.getName()%>';document.FormFtpManager.submit();}"><img border="0" src="<%=request.getContextPath()%>/imgs/delete.gif" alt="apagar"></a>
&nbsp;
<img alt="<%=i.getCompleteUrl()%>" src="<%=request.getContextPath()%>/imgs/folder.gif">&nbsp;<a
href="<%=i.getName(request)%>"><%=i.getName()%>
</a>
137,10 → 142,14
{
if (!i.isDirectory())
{
request.setAttribute("i",i);
%>
<tr class="file">
<td>
 
<a id="FTP_NODE_<%=++counter%>" style="display:none" href="javascript:if(confirmLink('<bean:message key="ftp.comfirm.delete" arg0="${i.name}"/>')){document.FormFtpManager.deleteFile.value='<%=i.getName()%>';document.FormFtpManager.submit();}"><img border="0" src="<%=request.getContextPath()%>/imgs/delete.gif" alt="apagar"></a>
&nbsp;
 
<%
if (i.getName().endsWith("doc") || i.getName().endsWith("rtf"))
{
/common/commons/commons-fileupload-1.2.1.jar
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream