You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2006/01/18 06:45:45 UTC
svn commit: r370060 - in /incubator/roller/trunk: src/org/roller/business/
src/org/roller/model/ src/org/roller/presentation/website/actions/
src/org/roller/presentation/website/tags/
src/org/roller/presentation/xmlrpc/ web/WEB-INF/ web/website/
Author: snoopdave
Date: Tue Jan 17 21:45:32 2006
New Revision: 370060
URL: http://svn.apache.org/viewcvs?rev=370060&view=rev
Log:
Refactoring in upload file page, removed monlithic JSP tags
Added:
incubator/roller/trunk/web/website/UploadFile.jsp
Removed:
incubator/roller/trunk/src/org/roller/presentation/website/tags/
incubator/roller/trunk/web/website/upload-file.jsp
Modified:
incubator/roller/trunk/src/org/roller/business/FileManagerImpl.java
incubator/roller/trunk/src/org/roller/model/FileManager.java
incubator/roller/trunk/src/org/roller/presentation/website/actions/UploadFileFormAction.java
incubator/roller/trunk/src/org/roller/presentation/xmlrpc/MetaWeblogAPIHandler.java
incubator/roller/trunk/web/WEB-INF/tiles-defs.xml
Modified: incubator/roller/trunk/src/org/roller/business/FileManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/business/FileManagerImpl.java?rev=370060&r1=370059&r2=370060&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/business/FileManagerImpl.java (original)
+++ incubator/roller/trunk/src/org/roller/business/FileManagerImpl.java Tue Jan 17 21:45:32 2006
@@ -12,42 +12,40 @@
import org.apache.commons.logging.LogFactory;
import org.roller.RollerException;
import org.roller.config.RollerConfig;
+import org.roller.config.RollerRuntimeConfig;
import org.roller.model.FileManager;
import org.roller.model.Roller;
import org.roller.model.RollerFactory;
import org.roller.pojos.RollerPropertyData;
-import org.roller.pojos.WebsiteData;
import org.roller.util.RollerMessages;
/**
* Responsible for managing website resources. This base implementation
* writes resources to a filesystem.
- *
+ *
* @author David M Johnson
* @author Allen Gilliland
*/
-public class FileManagerImpl implements FileManager
-{
+public class FileManagerImpl implements FileManager {
private String upload_dir = null;
private String upload_url = null;
- private static Log mLogger =
- LogFactory.getFactory().getInstance(FileManagerImpl.class);
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(FileManagerImpl.class);
/**
* Create file manager.
*/
- public FileManagerImpl()
- {
+ public FileManagerImpl() {
String uploaddir = RollerConfig.getProperty("uploads.dir");
String uploadurl = RollerConfig.getProperty("uploads.url");
-
+
// Note: System property expansion is now handled by RollerConfig.
-
+
if(uploaddir == null || uploaddir.trim().length() < 1)
uploaddir = System.getProperty("user.home") + File.separator+"roller_data"+File.separator+"uploads";
-
+
if( ! uploaddir.endsWith(File.separator))
uploaddir += File.separator;
@@ -78,9 +76,8 @@
* Determine if file can be saved given current RollerConfig settings.
*/
public boolean canSave(
- WebsiteData site, String name, long size, RollerMessages messages)
- throws RollerException
- {
+ String weblogHandle, String name, long size, RollerMessages messages)
+ throws RollerException {
Roller mRoller = RollerFactory.getRoller();
Map config = mRoller.getPropertiesManager().getProperties();
@@ -101,7 +98,7 @@
BigDecimal maxDirMB = new BigDecimal(
((RollerPropertyData)config.get("uploads.dir.maxsize")).getValue());
int maxDirBytes = (int)(1024000 * maxDirMB.doubleValue());
- int userDirSize = getWebsiteDirSize(site.getHandle(), this.upload_dir);
+ int userDirSize = getWebsiteDirSize(weblogHandle, this.upload_dir);
if (userDirSize + size > maxDirBytes) {
messages.addError("error.upload.dirmax", maxDirMB.toString());
return false;
@@ -119,30 +116,53 @@
return true;
}
+
+ public boolean overQuota(String weblogHandle) throws RollerException {
+
+ String maxDir = RollerRuntimeConfig.getProperty("uploads.dir.maxsize");
+ String maxFile = RollerRuntimeConfig.getProperty("uploads.file.maxsize");
+ BigDecimal maxDirSize = new BigDecimal(maxDir); // in megabytes
+ BigDecimal maxFileSize = new BigDecimal(maxFile); // in megabytes
+ // determine the number of bytes in website's directory
+ int maxDirBytes = (int)(1024000 * maxDirSize.doubleValue());
+ int userDirSize = 0;
+ String dir = getUploadDir();
+ File d = new File(dir + weblogHandle);
+ if (d.mkdirs() || d.exists()) {
+ File[] files = d.listFiles();
+ long dirSize = 0l;
+ for (int i=0; i<files.length; i++) {
+ if (!files[i].isDirectory()) {
+ dirSize = dirSize + files[i].length();
+ }
+ }
+ userDirSize = new Long(dirSize).intValue();
+ }
+ return userDirSize > maxDirBytes;
+ }
+
/**
* Get collection files in website's resource directory.
* @param site Website
* @return Collection of files in website's resource directory
*/
- public File[] getFiles(WebsiteData site) throws RollerException
- {
- String dir = this.upload_dir + site.getHandle();
+ public File[] getFiles(String weblogHandle) throws RollerException {
+ String dir = this.upload_dir + weblogHandle;
File uploadDir = new File(dir);
return uploadDir.listFiles();
}
-
+
/**
* Delete named file from website's resource area.
*/
- public void deleteFile(WebsiteData site, String name)
- throws RollerException
- {
- String dir = this.upload_dir + site.getHandle();
+ public void deleteFile(String weblogHandle, String name)
+ throws RollerException {
+ String dir = this.upload_dir + weblogHandle;
File f = new File(dir + File.separator + name);
f.delete();
}
-
+
/**
* Save file to website's resource directory.
* @param site Website to save to
@@ -150,98 +170,54 @@
* @param size Size of file to be saved
* @param is Read file from input stream
*/
- public void saveFile(WebsiteData site, String name, long size, InputStream is)
- throws RollerException
- {
- if (!canSave(site, name, size, new RollerMessages()))
- {
+ public void saveFile(String weblogHandle, String name, long size, InputStream is)
+ throws RollerException {
+ if (!canSave(weblogHandle, name, size, new RollerMessages())) {
throw new RollerException("ERROR: upload denied");
}
byte[] buffer = new byte[8192];
int bytesRead = 0;
String dir = this.upload_dir;
- String handle = site.getHandle();
-
- File dirPath = new File(dir + File.separator + handle);
- if (!dirPath.exists())
- {
+
+ File dirPath = new File(dir + File.separator + weblogHandle);
+ if (!dirPath.exists()) {
dirPath.mkdirs();
}
OutputStream bos = null;
- try
- {
+ try {
bos = new FileOutputStream(
dirPath.getAbsolutePath() + File.separator + name);
- while ((bytesRead = is.read(buffer, 0, 8192)) != -1)
- {
+ while ((bytesRead = is.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);
}
- }
- catch (Exception e)
- {
+ } catch (Exception e) {
throw new RollerException("ERROR uploading file", e);
- }
- finally
- {
- try
- {
+ } finally {
+ try {
bos.flush();
bos.close();
- }
- catch (Exception ignored) {}
+ } catch (Exception ignored) {}
}
- if (mLogger.isDebugEnabled())
- {
- mLogger.debug("The file has been written to \"" + dir + handle + "\"");
- }
- }
-
- /**
- * Get upload directory path.
- * @return Upload directory path.
- * @throws RollerException
- */
- /* old method ... no longer used -- Allen G
- private String getUploadDir() throws RollerException
- {
- if(this.upload_dir != null)
- {
- return this.upload_dir;
- }
- else
- {
- Roller mRoller = RollerFactory.getRoller();
- RollerConfigData config = RollerFactory.getRoller().getConfigManager().getRollerConfig();
- String dir = config.getUploadDir();
- if (dir == null || dir.trim().length()==0)
- {
- dir = mRealPath + File.separator + USER_RESOURCES;
- }
-
- return dir;
+ if (mLogger.isDebugEnabled()) {
+ mLogger.debug("The file has been written to \"" + dir + weblogHandle + "\"");
}
}
- */
/**
- * Returns current size of file uploads owned by specified user.
+ * Returns current size of file uploads owned by specified weblog handle.
* @param username User
* @param dir Upload directory
* @return Size of user's uploaded files in bytes.
*/
- private int getWebsiteDirSize(String username, String dir)
- {
+ private int getWebsiteDirSize(String weblogHandle, String dir) {
int userDirSize = 0;
- File d = new File(dir + File.separator + username);
- if (d.mkdirs() || d.exists())
- {
+ File d = new File(dir + File.separator + weblogHandle);
+ if (d.mkdirs() || d.exists()) {
File[] files = d.listFiles();
long dirSize = 0l;
- for (int i=0; i<files.length; i++)
- {
- if (!files[i].isDirectory())
- {
+ for (int i=0; i<files.length; i++) {
+ if (!files[i].isDirectory()) {
dirSize = dirSize + files[i].length();
}
}
@@ -249,9 +225,9 @@
}
return userDirSize;
}
-
+
/**
- * Return true if file is allowed to be uplaoded given specified allowed and
+ * Return true if file is allowed to be uplaoded given specified allowed and
* forbidden file types.
* @param allowFiles File types (i.e. extensions) that are allowed
* @param forbidFiles File types that are forbidden
@@ -259,8 +235,7 @@
* @return True if file is allowed to be uploaded
*/
private boolean checkFileType(
- String[] allowFiles, String[] forbidFiles, String fileName)
- {
+ String[] allowFiles, String[] forbidFiles, String fileName) {
// default to false
boolean allowFile = false;
@@ -270,13 +245,10 @@
allowFile = true;
// check for allowed types
- if (allowFiles != null && allowFiles.length > 0)
- {
- for (int y=0; y<allowFiles.length; y++)
- {
+ if (allowFiles != null && allowFiles.length > 0) {
+ for (int y=0; y<allowFiles.length; y++) {
if (fileName.toLowerCase().endsWith(
- allowFiles[y].toLowerCase()))
- {
+ allowFiles[y].toLowerCase())) {
allowFile = true;
break;
}
@@ -284,28 +256,19 @@
}
// check for forbidden types ... this overrides any allows
- if (forbidFiles != null && forbidFiles.length > 0)
- {
- for (int x=0; x<forbidFiles.length; x++)
- {
+ if (forbidFiles != null && forbidFiles.length > 0) {
+ for (int x=0; x<forbidFiles.length; x++) {
if (fileName.toLowerCase().endsWith(
- forbidFiles[x].toLowerCase()))
- {
+ forbidFiles[x].toLowerCase())) {
allowFile = false;
break;
}
}
- }
-
+ }
+
return allowFile;
}
-
- /* (non-Javadoc)
- * @see org.roller.model.FileManager#release()
- */
- public void release()
- {
- // TODO Auto-generated method stub
-
+
+ public void release() {
}
}
Modified: incubator/roller/trunk/src/org/roller/model/FileManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/model/FileManager.java?rev=370060&r1=370059&r2=370060&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/model/FileManager.java (original)
+++ incubator/roller/trunk/src/org/roller/model/FileManager.java Tue Jan 17 21:45:32 2006
@@ -22,21 +22,24 @@
{
/** Determine if file can be saved in website's file space. */
public boolean canSave(
- WebsiteData site, String name, long size, RollerMessages msgs)
+ String weblogHandle, String name, long size, RollerMessages msgs)
throws RollerException;
/** Get website's files */
- public File[] getFiles(WebsiteData site)
+ public File[] getFiles(String weblogHandle)
throws RollerException;
/** Delete specified file from website's file space. */
- public void deleteFile(WebsiteData site, String name)
+ public void deleteFile(String weblogHandle, String name)
throws RollerException;
/** Save file in website's file space or throw exception if rules violated. */
- public void saveFile(WebsiteData site, String name, long size, InputStream is)
+ public void saveFile(String weblogHandle, String name, long size, InputStream is)
throws RollerException;
+ /** Return true if weblog is over the file-upload limit */
+ public boolean overQuota(String weblogHandle) throws RollerException;
+
/**
* Get directory in which uploaded files are stored
*/
Modified: incubator/roller/trunk/src/org/roller/presentation/website/actions/UploadFileFormAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/website/actions/UploadFileFormAction.java?rev=370060&r1=370059&r2=370060&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/website/actions/UploadFileFormAction.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/website/actions/UploadFileFormAction.java Tue Jan 17 21:45:32 2006
@@ -1,9 +1,11 @@
package org.roller.presentation.website.actions;
-import java.io.IOException;
+import java.io.File;
import java.io.InputStream;
+import java.util.ArrayList;
import java.util.Iterator;
+import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
@@ -22,6 +24,7 @@
import org.roller.RollerException;
import org.roller.config.RollerRuntimeConfig;
import org.roller.model.FileManager;
+import org.roller.model.PropertiesManager;
import org.roller.model.Roller;
import org.roller.model.RollerFactory;
import org.roller.pojos.WebsiteData;
@@ -36,233 +39,269 @@
/**
* @struts.action name="uploadFiles" path="/editor/uploadFiles"
* parameter="method" scope="request" validate="false"
- *
+ *
* @struts.action-forward name="uploadFiles.page" path=".upload-file"
*/
-public final class UploadFileFormAction extends DispatchAction
-{
+public final class UploadFileFormAction extends DispatchAction {
private static final String HANDLE = "fileupload.website.handle";
- private static Log mLogger =
- LogFactory.getFactory().getInstance(UploadFileFormAction.class);
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(UploadFileFormAction.class);
+
+ /**
+ * Display upload file page.
+ */
+ public ActionForward unspecified(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws Exception {
+
+ ActionForward fwd = mapping.findForward("access-denied");
+ RollerSession rses = RollerSession.getRollerSession(request);
+ WebsiteData website = getWebsite(request);
+
+ if (rses.isUserAuthorizedToAuthor(website)) {
+ UploadFilePageModel pageModel = new UploadFilePageModel(
+ request, response, mapping, website.getHandle());
+ pageModel.setWebsite(website);
+ request.setAttribute("model", pageModel);
+ fwd = mapping.findForward("uploadFiles.page");
+ }
+ return fwd;
+ }
/**
* Request to upload files
*/
public ActionForward upload(
- ActionMapping mapping,
- ActionForm actionForm,
- HttpServletRequest request,
- HttpServletResponse response)
- throws IOException, ServletException
- {
- ActionForward fwd = mapping.findForward("uploadFiles.page");
- WebsiteData website = getWebsite(request);
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws Exception {
- BasePageModel pageModel = new BasePageModel(
- "uploadFiles.title", request, response, mapping);
- request.setAttribute("model", pageModel);
- pageModel.setWebsite(website);
-
+ ActionForward fwd = mapping.findForward("access-denied");
+ WebsiteData website = getWebsite(request);
RollerMessages msgs = new RollerMessages();
- try
- {
- RollerSession rses = RollerSession.getRollerSession(request);
- if ( !rses.isUserAuthorizedToAuthor(website) )
- {
- return mapping.findForward("access-denied");
- }
- }
- catch (Exception e)
- {
- mLogger.warn("Unable to find user.");
- return fwd;
- }
-
- ActionErrors errors = new ActionErrors();
- UploadFileForm theForm = (UploadFileForm)actionForm;
- if ( theForm.getUploadedFile() != null )
- {
- ServletContext app = servlet.getServletConfig().getServletContext();
-
- boolean uploadEnabled =
- RollerRuntimeConfig.getBooleanProperty("uploads.enabled");
+ RollerSession rses = RollerSession.getRollerSession(request);
+
+ if ( rses.isUserAuthorizedToAuthor(website)) {
- if ( !uploadEnabled )
- {
- errors.add(ActionErrors.GLOBAL_ERROR,
- new ActionError("error.upload.disabled", ""));
- saveErrors(request, errors);
- return fwd;
- }
+ fwd = mapping.findForward("uploadFiles.page");
+ ActionErrors errors = new ActionErrors();
+ UploadFileForm theForm = (UploadFileForm)actionForm;
+ if ( theForm.getUploadedFile() != null ) {
+ ServletContext app = servlet.getServletConfig().getServletContext();
+
+ boolean uploadEnabled =
+ RollerRuntimeConfig.getBooleanProperty("uploads.enabled");
+
+ if ( !uploadEnabled ) {
+ errors.add(ActionErrors.GLOBAL_ERROR,
+ new ActionError("error.upload.disabled", ""));
+ saveErrors(request, errors);
+ return fwd;
+ }
- //this line is here for when the input page is upload-utf8.jsp,
- //it sets the correct character encoding for the response
- String encoding = request.getCharacterEncoding();
- if ((encoding != null) && (encoding.equalsIgnoreCase("utf-8")))
- {
- response.setContentType("text/html; charset=utf-8");
- }
+ //this line is here for when the input page is upload-utf8.jsp,
+ //it sets the correct character encoding for the response
+ String encoding = request.getCharacterEncoding();
+ if ((encoding != null) && (encoding.equalsIgnoreCase("utf-8"))) {
+ response.setContentType("text/html; charset=utf-8");
+ }
- //retrieve the file representation
- //FormFile[] files = theForm.getUploadedFiles();
- FormFile[] files = new FormFile[]{theForm.getUploadedFile()};
- int fileSize = 0;
- try
- {
- for (int i=0; i<files.length; i++)
- {
- if (files[i] == null) continue;
-
- // retrieve the file name
- String fileName= files[i].getFileName();
- int terminated = fileName.indexOf("\000");
- if (terminated != -1)
- {
- // disallow sneaky null terminated strings
- fileName = fileName.substring(0, terminated).trim();
- }
-
- fileSize = files[i].getFileSize();
-
- //retrieve the file data
- FileManager fmgr = RollerFactory.getRoller().getFileManager();
- if (fmgr.canSave(website, fileName, fileSize, msgs))
- {
- InputStream stream = files[i].getInputStream();
- fmgr.saveFile(website, fileName, fileSize, stream);
- }
+ //retrieve the file representation
+ //FormFile[] files = theForm.getUploadedFiles();
+ FormFile[] files = new FormFile[]{theForm.getUploadedFile()};
+ int fileSize = 0;
+ try {
+ for (int i=0; i<files.length; i++) {
+ if (files[i] == null) continue;
+
+ // retrieve the file name
+ String fileName= files[i].getFileName();
+ int terminated = fileName.indexOf("\000");
+ if (terminated != -1) {
+ // disallow sneaky null terminated strings
+ fileName = fileName.substring(0, terminated).trim();
+ }
+
+ fileSize = files[i].getFileSize();
+
+ //retrieve the file data
+ FileManager fmgr = RollerFactory.getRoller().getFileManager();
+ if (fmgr.canSave(website.getHandle(), fileName, fileSize, msgs)) {
+ InputStream stream = files[i].getInputStream();
+ fmgr.saveFile(website.getHandle(), fileName, fileSize, stream);
+ }
- //destroy the temporary file created
- files[i].destroy();
+ //destroy the temporary file created
+ files[i].destroy();
+ }
+ } catch (Exception e) {
+ errors.add(ActionErrors.GLOBAL_ERROR,
+ new ActionError("error.upload.file",e.toString()));
}
- }
- catch (Exception e)
- {
+ }
+ UploadFilePageModel pageModel = new UploadFilePageModel(
+ request, response, mapping, website.getHandle());
+ request.setAttribute("model", pageModel);
+ pageModel.setWebsite(website);
+
+ Iterator iter = msgs.getErrors();
+ while (iter.hasNext()) {
+ RollerMessages.RollerMessage error =
+ (RollerMessages.RollerMessage) iter.next();
errors.add(ActionErrors.GLOBAL_ERROR,
- new ActionError("error.upload.file",e.toString()));
+ new ActionError(error.getKey(), error.getArgs()));
}
+ saveErrors(request, errors);
}
- Iterator iter = msgs.getErrors();
- while (iter.hasNext())
- {
- RollerMessages.RollerMessage error =
- (RollerMessages.RollerMessage) iter.next();
- errors.add(ActionErrors.GLOBAL_ERROR,
- new ActionError(error.getKey(), error.getArgs()));
- }
- saveErrors(request, errors);
return fwd;
}
-
+
/**
* Request to delete files
*/
public ActionForward delete(
- ActionMapping mapping,
- ActionForm actionForm,
- HttpServletRequest request,
- HttpServletResponse response)
- throws IOException, ServletException
- {
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws Exception {
+
ActionErrors errors = new ActionErrors();
UploadFileForm theForm = (UploadFileForm)actionForm;
- ActionForward fwd = mapping.findForward("uploadFiles.page");
-
+ ActionForward fwd = mapping.findForward("access-denied");
WebsiteData website = getWebsite(request);
- BasePageModel pageModel =
- new BasePageModel("uploadFiles.title", request, response, mapping);
- pageModel.setWebsite(website);
- request.setAttribute("model", pageModel);
-
- try
- {
- FileManager fmgr = RollerFactory.getRoller().getFileManager();
- String[] deleteFiles = theForm.getDeleteFiles();
- for (int i=0; i<deleteFiles.length; i++)
- {
- if ( deleteFiles[i].trim().startsWith("/")
- || deleteFiles[i].trim().startsWith("\\")
- || deleteFiles[i].indexOf("..") != -1)
- {
- // ignore absolute paths, or paths that contiain '..'
- }
- else
- {
- fmgr.deleteFile(website, deleteFiles[i]);
- }
+
+ RollerSession rses = RollerSession.getRollerSession(request);
+ if (rses.isUserAuthorizedToAuthor(website)) {
+ fwd = mapping.findForward("uploadFiles.page");
+ try {
+ FileManager fmgr = RollerFactory.getRoller().getFileManager();
+ String[] deleteFiles = theForm.getDeleteFiles();
+ for (int i=0; i<deleteFiles.length; i++) {
+ if ( deleteFiles[i].trim().startsWith("/")
+ || deleteFiles[i].trim().startsWith("\\")
+ || deleteFiles[i].indexOf("..") != -1) {
+ // ignore absolute paths, or paths that contiain '..'
+ } else {
+ fmgr.deleteFile(website.getHandle(), deleteFiles[i]);
+ }
+ }
+ } catch (Exception e) {
+ errors.add(ActionErrors.GLOBAL_ERROR,
+ new ActionError("error.upload.file",e.toString()));
+ saveErrors(request,errors);
}
- }
- catch (Exception e)
- {
- errors.add(ActionErrors.GLOBAL_ERROR,
- new ActionError("error.upload.file",e.toString()));
- saveErrors(request,errors);
+ UploadFilePageModel pageModel = new UploadFilePageModel(
+ request, response, mapping, website.getHandle());
+ pageModel.setWebsite(website);
+ request.setAttribute("model", pageModel);
}
return fwd;
}
-
-
+
/**
- * Load file-listings page.
+ * Other actions can get the website handle from request params, but
+ * request params don't come accross in a file-upload post so we have to
+ * stash the website handle in the session.
*/
- public ActionForward unspecified(
- ActionMapping mapping,
- ActionForm actionForm,
- HttpServletRequest request,
- HttpServletResponse response)
- throws IOException, ServletException
- {
- try
- {
- WebsiteData website = getWebsite(request);
+ public static WebsiteData getWebsite(HttpServletRequest request) throws RollerException {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ WebsiteData website = rreq.getWebsite();
+ if (website != null) {
+ request.getSession().setAttribute(HANDLE, website.getHandle());
+ } else {
+ String handle = (String)request.getSession().getAttribute(HANDLE);
+ Roller roller = RollerFactory.getRoller();
+ website = roller.getUserManager().getWebsiteByHandle(handle);
+ }
+ return website;
+ }
+
+ /** All information we'll need on the UploadFile page */
+ public class UploadFilePageModel extends BasePageModel {
+ private String resourcesBaseURL = null;
+ private boolean uploadEnabled = true;
+ private boolean overQuota = false;
+ private String maxDirMB = null; // in megabytes
+ private String maxFileMB = null; // in megabytes
+ private List files = null;
+ private long totalSize = 0;
+
+ public UploadFilePageModel(
+ HttpServletRequest req,
+ HttpServletResponse res,
+ ActionMapping mapping,
+ String weblogHandle) throws RollerException {
- BasePageModel pageModel = new BasePageModel(
- "uploadFiles.title", request, response, mapping);
- pageModel.setWebsite(website);
- request.setAttribute("model", pageModel);
+ super("uploadFiles.title", req, res, mapping);
+
+ Roller roller = RollerFactory.getRoller();
+ PropertiesManager pmgr = roller.getPropertiesManager();
+ FileManager fmgr = roller.getFileManager();
- RollerSession rses = RollerSession.getRollerSession(request);
- if ( !rses.isUserAuthorizedToAuthor(website) )
- {
- return mapping.findForward("access-denied");
+ String dir = fmgr.getUploadDir();
+ resourcesBaseURL = getBaseURL() + fmgr.getUploadUrl() + "/" + weblogHandle;
+
+ RollerRequest rreq = RollerRequest.getRollerRequest(req);
+ WebsiteData website = UploadFileFormAction.getWebsite(req);
+ String maxDirMB = RollerRuntimeConfig.getProperty("uploads.dir.maxsize");
+ String maxFileMB = RollerRuntimeConfig.getProperty("uploads.file.maxsize");
+
+ overQuota = fmgr.overQuota(weblogHandle);
+ uploadEnabled = RollerRuntimeConfig.getBooleanProperty("uploads.enabled");
+
+ files = new ArrayList();
+ File[] rawFiles = fmgr.getFiles(weblogHandle);
+ for (int i=0; i<rawFiles.length; i++) {
+ files.add(new FileBean(rawFiles[i]));
+ totalSize += rawFiles[i].length();
}
}
- catch (RollerException re)
- {
- mLogger.error("Unexpected exception",re.getRootCause());
- throw new ServletException(re);
+ public boolean isUploadEnabled() {
+ return uploadEnabled;
+ }
+ public boolean isOverQuota() {
+ return overQuota;
+ }
+ public String getMaxDirMB() {
+ return maxDirMB;
+ }
+ public String getMaxFileMB() {
+ return maxFileMB;
+ }
+ public String getResourcesBaseURL() {
+ return resourcesBaseURL;
+ }
+ public long getTotalSize() {
+ return totalSize;
+ }
+ public List getFiles() {
+ return files;
}
- return mapping.findForward("uploadFiles.page");
}
-
+
/**
- * Other actions can get the website handle from request params, but
- * request params don't come accross in a file-upload post so we have to
- * stash the website handle in the session.
+ * If java.io.File followed bean conventions we wouldn't need this. (perhaps
+ * we shouldn't be using files directly here in the presentation layer)
*/
- public static WebsiteData getWebsite(HttpServletRequest request)
- throws ServletException
- {
- RollerRequest rreq = RollerRequest.getRollerRequest(request);
- WebsiteData website = rreq.getWebsite();
- if (website != null)
- {
- request.getSession().setAttribute(HANDLE, website.getHandle());
+ public class FileBean {
+ private File file;
+ public FileBean(File file) {
+ this.file = file;
}
- else
- {
- String handle = (String)request.getSession().getAttribute(HANDLE);
- Roller roller = RollerFactory.getRoller();
- try
- {
- website = roller.getUserManager().getWebsiteByHandle(handle);
- }
- catch (RollerException e)
- {
- throw new ServletException(e);
- }
- }
- return website;
+ public String getName() { return file.getName(); }
+ public long getLength() { return file.length(); }
}
}
+
+
+
+
+
+
Modified: incubator/roller/trunk/src/org/roller/presentation/xmlrpc/MetaWeblogAPIHandler.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/xmlrpc/MetaWeblogAPIHandler.java?rev=370060&r1=370059&r2=370060&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/xmlrpc/MetaWeblogAPIHandler.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/xmlrpc/MetaWeblogAPIHandler.java Tue Jan 17 21:45:32 2006
@@ -356,11 +356,11 @@
RollerMessages msgs = new RollerMessages();
// If save is allowed by Roller system-wide policies
- if (fmgr.canSave(website, name, bits.length, msgs))
+ if (fmgr.canSave(website.getHandle(), name, bits.length, msgs))
{
// Then save the file
fmgr.saveFile(
- website, name, bits.length, new ByteArrayInputStream(bits));
+ website.getHandle(), name, bits.length, new ByteArrayInputStream(bits));
RollerRequest rreq = RollerRequest.getRollerRequest();
HttpServletRequest request = rreq.getRequest();
Modified: incubator/roller/trunk/web/WEB-INF/tiles-defs.xml
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/tiles-defs.xml?rev=370060&r1=370059&r2=370060&view=diff
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/tiles-defs.xml (original)
+++ incubator/roller/trunk/web/WEB-INF/tiles-defs.xml Tue Jan 17 21:45:32 2006
@@ -125,7 +125,7 @@
<put name="styles" value="/theme/css-sidebar.jsp" />
</definition>
<definition name=".upload-file" extends=".tiles-editorpage" >
- <put name="content" value="/website/upload-file.jsp" />
+ <put name="content" value="/website/UploadFile.jsp" />
</definition>
<definition name=".WeblogEntryRemove" extends=".tiles-simplepage" >
Added: incubator/roller/trunk/web/website/UploadFile.jsp
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/website/UploadFile.jsp?rev=370060&view=auto
==============================================================================
--- incubator/roller/trunk/web/website/UploadFile.jsp (added)
+++ incubator/roller/trunk/web/website/UploadFile.jsp Tue Jan 17 21:45:32 2006
@@ -0,0 +1,113 @@
+<%@ include file="/taglibs.jsp" %>
+<%@ page import="org.apache.struts.util.RequestUtils" %>
+<%@ page import="java.util.Hashtable" %>
+<%@ page import="java.util.ResourceBundle" %>
+
+<%
+BasePageModel model = (BasePageModel)request.getAttribute("model");
+ResourceBundle bundle = ResourceBundle.getBundle("ApplicationResources");
+%>
+
+<p class="subtitle">
+ <fmt:message key="uploadFiles.subtitle" >
+ <fmt:param value="${model.website.handle}" />
+ </fmt:message>
+</p>
+<p class="pagetip">
+ <fmt:message key="uploadFiles.tip" />
+</p>
+
+<%-- --------------------------
+File upload form, but only if it's enabled and weblog is under quota
+--%>
+
+<c:choose>
+ <c:when test="${!model.uploadEnabled}">
+ <span class="error"><fmt:message key="uploadFiles.uploadDisabled" /></span>
+ </c:when>
+ <c:when test="${model.overQuota}">
+ <span class="error"><fmt:message key="uploadFiles.exceededQuota" /></span>
+ <br />
+ </c:when>
+ <c:otherwise>
+ <% String edit = RequestUtils.computeURL( pageContext,
+ "uploadFiles", null, null, null, new Hashtable(), null, false); %>
+ <form name="uploadFiles" method="post" action="<%= edit %>" enctype="multipart/form-data">
+ <br />
+ <input type="file" name="uploadedFile" size="30" />
+
+ <input type="submit" value='<%= bundle.getString("uploadFiles.upload") %>' />
+ <input type="hidden" name="method" value="upload" />
+ <input type="hidden" name="weblog" value='<%= model.getWebsite().getHandle() %>'>
+ <br />
+ <fmt:message key="uploadFiles.quotaNote">
+ <fmt:param value="${model.maxFileMB}" />
+ <fmt:param value="${model.maxDirMB}" />
+ </fmt:message>
+ </form>
+ </c:otherwise>
+</c:choose>
+
+<%-- --------------------------
+Table of files, each with link, size and checkbox
+--%>
+
+<h1><fmt:message key="uploadFiles.manageFiles" /></h1>
+<html:form action="/editor/uploadFiles" method="post">
+
+ <table class="rollertable">
+
+ <tr class="rHeaderTr">
+ <th class="rollertable" width="95%">Filename</th>
+ <th class="rollertable">Size</td>
+ <th class="rollertable">Delete</td>
+ </tr>
+
+ <c:forEach var="loopfile" items="${model.files}" >
+ <roller:row oddStyleClass="rollertable_odd" evenStyleClass="rollertable_even">
+ <td class="rollertable">
+ <a href='<c:out value="${model.resourcesBaseURL}" />/<c:out value="${loopfile.name}" />'><c:out value="${loopfile.name}" /></a>
+ </td>
+ <td class="rollertable" align="right">
+ <fmt:formatNumber value="${loopfile.length / 1024}" type="number" maxFractionDigits="2" /> KB
+ </td>
+ <td class="rollertable" align="center">
+ <input type="checkbox" name="deleteFiles" value='<c:out value="${loopfile.name}" />' />
+ </td>
+ </roller:row>
+
+ </c:forEach>
+
+ <tr>
+ <td></td>
+ <td></td>
+ <td><fmt:formatNumber value="${model.totalSize / 1024}" type="number" maxFractionDigits="2" /> KB</td>
+ </tr>
+ </table>
+
+ <table>
+ <tr>
+ <td align="left">
+ <input type="submit" value='<fmt:message key="uploadFiles.button.delete" />' /></input>
+ </td>
+ </tr>
+ </table>
+
+ <input type=hidden name="weblog" value='<c:out value="${model.website.handle}" />' />
+ <input type="hidden" name="method" value="delete"></input>
+
+</html:form>
+
+<%--
+Added by Matt Raible since the focus javascript generated by Struts uses
+a name reference and IE seems to only focus on file inputs via elements[0]?
+--%>
+<script type="text/javascript">
+<!--
+ document.forms[0].elements[0].focus();
+// -->
+</script>
+
+
+
+