f19aab70fe
- New words in the dictionary - Bugs fixed in HTML Checker tag stack which rejected <IMG> and <LI> and had a potential infinite loop - Multipart handling now handles Windows-uploaded filenames correctly - Bug fixed in PostOperations that was causing nuke to fail and scribble and hide to succeed but throw an internal servlet error - Enhanced conference listing now gives a better activity report in conferences - Top Content font enlarged - Null posts now work (they used to in WebbMe) - Slippage display corrected - Probably a couple of other things I can't think of just now.
206 lines
6.9 KiB
Java
206 lines
6.9 KiB
Java
/*
|
|
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
|
* (the "License"); you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
|
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
|
* language governing rights and limitations under the License.
|
|
*
|
|
* The Original Code is the Venice Web Communities System.
|
|
*
|
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
|
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*/
|
|
package com.silverwrist.venice.servlets;
|
|
|
|
import java.io.*;
|
|
import java.util.*;
|
|
import javax.servlet.*;
|
|
import javax.servlet.http.*;
|
|
import org.apache.log4j.*;
|
|
import com.silverwrist.util.StringUtil;
|
|
import com.silverwrist.venice.ValidationException;
|
|
import com.silverwrist.venice.core.*;
|
|
import com.silverwrist.venice.servlets.format.*;
|
|
|
|
public class PostOperations extends VeniceServlet
|
|
{
|
|
/*--------------------------------------------------------------------------------
|
|
* Static data members
|
|
*--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
private static final String NUKE_CONFIRM_ATTR = "servlets.PostOperations.nuke.confirm";
|
|
private static final String NUKE_CONFIRM_PARAM = "confirm";
|
|
|
|
private static Category logger = Category.getInstance(TopicOperations.class.getName());
|
|
|
|
/*--------------------------------------------------------------------------------
|
|
* Overrides from class HttpServlet
|
|
*--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
public String getServletInfo()
|
|
{
|
|
String rc = "PostOperations servlet - General post operations (hide, scribble, etc.)\n"
|
|
+ "Part of the Venice Web Communities System\n";
|
|
return rc;
|
|
|
|
} // end getServletInfo
|
|
|
|
/*--------------------------------------------------------------------------------
|
|
* Overrides from class VeniceServlet
|
|
*--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
protected VeniceContent doVeniceGet(HttpServletRequest request, VeniceEngine engine,
|
|
UserContext user, RenderData rdat)
|
|
throws ServletException, IOException, VeniceServletResult
|
|
{
|
|
// get the SIG
|
|
SIGContext sig = getSIGParameter(request,user,true,"top");
|
|
changeMenuSIG(request,sig);
|
|
String locator = "sig=" + sig.getSIGID();
|
|
String location = "sigprofile?" + locator;
|
|
|
|
// get the conference
|
|
ConferenceContext conf = getConferenceParameter(request,sig,true,location);
|
|
locator += "&conf=" + conf.getConfID();
|
|
location = "confdisp?" + locator;
|
|
|
|
// get the topic
|
|
TopicContext topic = getTopicParameter(request,conf,true,location);
|
|
locator += "&top=" + topic.getTopicNumber();
|
|
location = "confdisp?" + locator;
|
|
|
|
// get the message
|
|
TopicMessageContext msg = getMessageParameter(request,topic,true,location);
|
|
location = "confdisp?" + locator + "&p1=" + msg.getPostNumber() + "&shac=1";
|
|
setMyLocation(request,location);
|
|
|
|
// figure out what command we want to perform
|
|
String cmd = getStandardCommandParam(request);
|
|
|
|
if (cmd.equals("HY") || cmd.equals("HN"))
|
|
{ // we want to hide or show the message
|
|
try
|
|
{ // attempt to hide or show the message
|
|
msg.setHidden(cmd.equals("HY"));
|
|
|
|
// go back and display stuff
|
|
throw new RedirectResult(location);
|
|
|
|
} // end if
|
|
catch (DataException de)
|
|
{ // there was a database error
|
|
return new ErrorBox("Database Error","Database error setting hidden status: " + de.getMessage(),
|
|
location);
|
|
|
|
} // end catch
|
|
catch (AccessError ae)
|
|
{ // naughty naughty = you can't do this!
|
|
return new ErrorBox("Access Error",ae.getMessage(),location);
|
|
|
|
} // end catch
|
|
|
|
} // end if ("hide" or "show")
|
|
|
|
if (cmd.equals("SCR"))
|
|
{ // we want to scribble the message
|
|
try
|
|
{ // attempt to scribble the message
|
|
msg.scribble();
|
|
|
|
// go back and display stuff
|
|
throw new RedirectResult(location);
|
|
|
|
} // end try
|
|
catch (DataException de)
|
|
{ // there was a database error
|
|
return new ErrorBox("Database Error","Database error scribbling message: " + de.getMessage(),
|
|
location);
|
|
|
|
} // end catch
|
|
catch (AccessError ae)
|
|
{ // naughty naughty = you can't do this!
|
|
return new ErrorBox("Access Error",ae.getMessage(),location);
|
|
|
|
} // end catch
|
|
|
|
} // end if ("scribble")
|
|
|
|
if (cmd.equals("NUKE"))
|
|
{ // nuking requires confirmation
|
|
try
|
|
{ // we need confirmation on this operation
|
|
if (ConfirmBox.isConfirmed(request,NUKE_CONFIRM_ATTR,NUKE_CONFIRM_PARAM))
|
|
{ // OK, go ahead, nuke the message!
|
|
msg.nuke();
|
|
|
|
// after which, redirect to topic view
|
|
throw new RedirectResult("confdisp?" + locator);
|
|
|
|
} // end if (confirmed)
|
|
else
|
|
{ // not a proper confirmation - better display one
|
|
List aliases = conf.getAliases();
|
|
String message = "You are about to nuke message <" + (String)(aliases.get(0)) + "."
|
|
+ topic.getTopicNumber() + "." + msg.getPostNumber() + ">, originally composed by <"
|
|
+ msg.getCreatorName() + ">! Are you sure you want to do this?";
|
|
String confirm_url = "postops?" + locator + "&msg=" + msg.getPostNumber() + "&cmd=NUKE";
|
|
return new ConfirmBox(request,NUKE_CONFIRM_ATTR,NUKE_CONFIRM_PARAM,"Nuke Message",
|
|
message,confirm_url,location);
|
|
|
|
} // end else (not yet confirmed)
|
|
|
|
} // end try
|
|
catch (DataException de)
|
|
{ // there was a database error
|
|
return new ErrorBox("Database Error","Database error nuking message: " + de.getMessage(),
|
|
location);
|
|
|
|
} // end catch
|
|
catch (AccessError ae)
|
|
{ // naughty naughty = you can't do this!
|
|
return new ErrorBox("Access Error",ae.getMessage(),location);
|
|
|
|
} // end catch
|
|
|
|
} // end if ("nuke")
|
|
|
|
if (cmd.equals("PU"))
|
|
{ // we want to publish the message to the front page
|
|
try
|
|
{ // attempt to publish the message
|
|
msg.publish();
|
|
|
|
// go back and display stuff
|
|
throw new RedirectResult(location);
|
|
|
|
} // end try
|
|
catch (DataException de)
|
|
{ // there was a database error
|
|
return new ErrorBox("Database Error","Database error publishing message: " + de.getMessage(),
|
|
location);
|
|
|
|
} // end catch
|
|
catch (AccessError ae)
|
|
{ // naughty naughty = you can't do this!
|
|
return new ErrorBox("Access Error",ae.getMessage(),location);
|
|
|
|
} // end catch
|
|
|
|
} // end if
|
|
|
|
// unrecognized command!
|
|
logger.error("invalid command to PostOperations.doGet: " + cmd);
|
|
return new ErrorBox("Internal Error","Invalid command to PostOperations.doGet",location);
|
|
|
|
} // end doVeniceGet
|
|
|
|
} // end class PostOperations
|