second round of public beta bugfixes:

- fixed a bug in navigation between conferences via post links
- fixed the "your post is 'new'" bug (this was actually another bug, in
  postNewMessage())
- some other stuff
This commit is contained in:
Eric J. Bowersox 2001-04-07 05:30:33 +00:00
parent 8f31704563
commit 3d32fe95c5
6 changed files with 75 additions and 17 deletions

View File

@ -12,6 +12,7 @@ can't
cartman cartman
cdt cdt
checkouts checkouts
communityware
couldn't couldn't
crewmember crewmember
crewmembers crewmembers

View File

@ -475,14 +475,29 @@ class TopicUserContextImpl implements TopicContext
public void setUnreadMessages(int count) throws DataException public void setUnreadMessages(int count) throws DataException
{ {
if (logger.isDebugEnabled())
logger.debug("[raw] setUnreadMessages(" + count + ") entry");
if (conf.userIsAnonymous()) if (conf.userIsAnonymous())
return; // no-op { // this is effectively a no-op, but log it
logger.debug("reject 1: anonymous user");
return;
} // end if
if (count>(top_message+1)) // constrain count to [0, top_message+1] if (count>(top_message+1)) // constrain count to [0, top_message+1]
count = top_message + 1; count = top_message + 1;
else if (count<0) else if (count<0)
count = 0; count = 0;
if ((count==unread) || deleted) if ((count==unread) || deleted)
return; // no-op { // this is effectively a no-op, but log it
if (logger.isDebugEnabled())
logger.debug("reject 2: count=" + count + ", unread=" + unread + ", deleted=" + deleted);
return;
} // end if
if (logger.isInfoEnabled())
logger.info("[cooked] setUnreadMessages(" + count + ") entry");
int last_msg = top_message - count; int last_msg = top_message - count;
Connection conn = null; // pooled database connection Connection conn = null; // pooled database connection
@ -498,8 +513,11 @@ class TopicUserContextImpl implements TopicContext
StringBuffer sql = new StringBuffer("UPDATE topicsettings SET last_message = "); StringBuffer sql = new StringBuffer("UPDATE topicsettings SET last_message = ");
sql.append(last_msg).append(" WHERE topicid = ").append(topicid).append(" AND uid = "); sql.append(last_msg).append(" WHERE topicid = ").append(topicid).append(" AND uid = ");
sql.append(conf.realUID()).append(';'); sql.append(conf.realUID()).append(';');
if (logger.isDebugEnabled())
logger.debug("SQL: " + sql.toString());
if (stmt.executeUpdate(sql.toString())>0) if (stmt.executeUpdate(sql.toString())>0)
{ // that was all we needed - just save the flag and exit { // that was all we needed - just save the flag and exit
logger.debug("--> bailed out after update - done with setUnreadMessages{");
conf.touchRead(conn); conf.touchRead(conn);
unread = count; unread = count;
return; return;
@ -509,9 +527,12 @@ class TopicUserContextImpl implements TopicContext
// OK, check: Is the topic still there?!? // OK, check: Is the topic still there?!?
sql.setLength(0); sql.setLength(0);
sql.append("SELECT topicid from topics WHERE topicid = ").append(topicid).append(';'); sql.append("SELECT topicid from topics WHERE topicid = ").append(topicid).append(';');
if (logger.isDebugEnabled())
logger.debug("SQL: " + sql.toString());
ResultSet rs = stmt.executeQuery(sql.toString()); ResultSet rs = stmt.executeQuery(sql.toString());
if (!(rs.next())) if (!(rs.next()))
{ // the topic's been deleted - bail out { // the topic's been deleted - bail out
logger.debug("--> bailed out because topic is deleted - done with setUnreadMessages{");
makeDeleted(); makeDeleted();
return; return;
@ -521,6 +542,8 @@ class TopicUserContextImpl implements TopicContext
sql.setLength(0); sql.setLength(0);
sql.append("INSERT INTO topicsettings (topicid, uid, last_message) VALUES (").append(topicid); sql.append("INSERT INTO topicsettings (topicid, uid, last_message) VALUES (").append(topicid);
sql.append(", ").append(conf.realUID()).append(", ").append(last_msg).append(");"); sql.append(", ").append(conf.realUID()).append(", ").append(last_msg).append(");");
if (logger.isDebugEnabled())
logger.debug("SQL: " + sql.toString());
stmt.executeUpdate(sql.toString()); stmt.executeUpdate(sql.toString());
conf.touchRead(conn); conf.touchRead(conn);
unread = count; // successful completion unread = count; // successful completion
@ -589,6 +612,9 @@ class TopicUserContextImpl implements TopicContext
public TopicMessageContext postNewMessage(long parent, String pseud, String text) public TopicMessageContext postNewMessage(long parent, String pseud, String text)
throws DataException, AccessError throws DataException, AccessError
{ {
if (logger.isInfoEnabled())
logger.info("postNewMessage(" + parent + ", '" + pseud + "',<text>) entry");
if (!(conf.userCanPost())) if (!(conf.userCanPost()))
{ // they can't post in this topic! { // they can't post in this topic!
logger.error("trying to post w/o permission!"); logger.error("trying to post w/o permission!");
@ -642,6 +668,8 @@ class TopicUserContextImpl implements TopicContext
real_pseud = pseud_ch.getValue(); real_pseud = pseud_ch.getValue();
real_text = text_ch.getValue(); real_text = text_ch.getValue();
text_linecount = text_ch.getLines(); text_linecount = text_ch.getLines();
if (logger.isDebugEnabled())
logger.debug("new post has " + text_linecount + " lines");
} // end try } // end try
catch (NotYetFinishedException e) catch (NotYetFinishedException e)
@ -691,6 +719,8 @@ class TopicUserContextImpl implements TopicContext
// Determine what the new post number is. // Determine what the new post number is.
new_post_num = top_message + 1; new_post_num = top_message + 1;
if (logger.isDebugEnabled())
logger.debug("New post number: " + new_post_num);
// Add the post "header" to the posts table. // Add the post "header" to the posts table.
StringBuffer sql = new StringBuffer("INSERT INTO posts (parent, topicid, num, linecount, creator_uid, " StringBuffer sql = new StringBuffer("INSERT INTO posts (parent, topicid, num, linecount, creator_uid, "
@ -708,6 +738,8 @@ class TopicUserContextImpl implements TopicContext
if (!(rs.next())) if (!(rs.next()))
throw new InternalStateError("postMessage(): Unable to get new post ID!"); throw new InternalStateError("postMessage(): Unable to get new post ID!");
new_post_id = rs.getLong(1); new_post_id = rs.getLong(1);
if (logger.isDebugEnabled())
logger.debug("New post ID: " + new_post_id);
// Touch the topic values to reflect the added post. // Touch the topic values to reflect the added post.
sql.setLength(0); sql.setLength(0);
@ -727,9 +759,14 @@ class TopicUserContextImpl implements TopicContext
conf.touchUpdate(conn,posted_date); conf.touchUpdate(conn,posted_date);
conf.touchPost(conn,posted_date); conf.touchPost(conn,posted_date);
// fill in our own local variables to reflect the update // Fill in our own local variables to reflect the update. This includes the recalculation
// of "unread" based on the new value of "top_message".
int tmp_last_msg = top_message - unread;
top_message = new_post_num; top_message = new_post_num;
lastupdate = posted_date; lastupdate = posted_date;
unread = top_message - tmp_last_msg;
logger.debug("message post completed successfully");
} // end try } // end try
finally finally

View File

@ -75,7 +75,7 @@ public class ConfDisplay extends VeniceServlet
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
*/ */
private static Category logger = Category.getInstance(ConfDisplay.class.getName()); private static Category logger = Category.getInstance(ConfDisplay.class);
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Internal functions * Internal functions

View File

@ -80,12 +80,12 @@ public class ConfOperations extends VeniceServlet
private static boolean validateNewTopic(ServletRequest request, String on_error) throws ErrorBox private static boolean validateNewTopic(ServletRequest request, String on_error) throws ErrorBox
{ {
boolean is_title_null, is_zp_null; //boolean is_title_null, is_zp_null;
String foo = request.getParameter("title"); String foo = request.getParameter("title");
if (foo==null) if (foo==null)
throw new ErrorBox(null,"Title parameter was not specified.",on_error); throw new ErrorBox(null,"Title parameter was not specified.",on_error);
is_title_null = (foo.length()==0); //is_title_null = (foo.length()==0);
foo = request.getParameter("pseud"); foo = request.getParameter("pseud");
if (foo==null) if (foo==null)
@ -94,9 +94,13 @@ public class ConfOperations extends VeniceServlet
foo = request.getParameter("pb"); foo = request.getParameter("pb");
if (foo==null) if (foo==null)
throw new ErrorBox(null,"Body text was not specified.",on_error); throw new ErrorBox(null,"Body text was not specified.",on_error);
is_zp_null = (foo.length()==0); //is_zp_null = (foo.length()==0);
/* EJB 4/5/2001 - remove this for consistency. FUTURE: bring it back under a global option?
return is_title_null || is_zp_null; return is_title_null || is_zp_null;
-- end removed code */
return false;
} // end validateNewTopic } // end validateNewTopic
@ -709,8 +713,11 @@ public class ConfOperations extends VeniceServlet
} // end catch } // end catch
/* EJB 4/5/2001 - code removed for consistency - FUTURE: bring it back controlled by
a global option?
if (ntf.isNullRequest()) if (ntf.isNullRequest())
return null; // no title or text specified - "204 No Content" return null; // no title or text specified - "204 No Content"
-- end removed code */
setMyLocation(request,"confops?sig=" + sig.getSIGID() + "&conf=" + conf.getConfID() + "&cmd=T"); setMyLocation(request,"confops?sig=" + sig.getSIGID() + "&conf=" + conf.getConfID() + "&cmd=T");
return ntf; return ntf;

View File

@ -20,6 +20,7 @@ package com.silverwrist.venice.servlets.format;
import java.util.*; import java.util.*;
import javax.servlet.*; import javax.servlet.*;
import javax.servlet.http.*; import javax.servlet.http.*;
import org.apache.log4j.*;
import com.silverwrist.util.StringUtil; import com.silverwrist.util.StringUtil;
import com.silverwrist.venice.core.*; import com.silverwrist.venice.core.*;
@ -30,6 +31,8 @@ public class TopicPosts implements JSPRender
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
*/ */
private static Category logger = Category.getInstance(TopicPosts.class);
// Attribute name for request attribute // Attribute name for request attribute
protected static final String ATTR_NAME = "com.silverwrist.venice.content.TopicPosts"; protected static final String ATTR_NAME = "com.silverwrist.venice.content.TopicPosts";
@ -60,6 +63,10 @@ public class TopicPosts implements JSPRender
TopicContext topic, int first, int last, boolean read_new, boolean show_advanced) TopicContext topic, int first, int last, boolean read_new, boolean show_advanced)
throws DataException, AccessError throws DataException, AccessError
{ {
if (logger.isDebugEnabled())
logger.debug("TopicPosts: sig=" + sig.getSIGID() + ", conf=" + conf.getConfID() + ", topic="
+ topic.getTopicNumber() + ", range=[" + first + ", " + last + "], rnm=" + read_new
+ ", shac=" + show_advanced);
this.engine = engine; this.engine = engine;
this.sig = sig; this.sig = sig;
this.conf = conf; this.conf = conf;
@ -70,8 +77,11 @@ public class TopicPosts implements JSPRender
this.unread = topic.getUnreadMessages(); this.unread = topic.getUnreadMessages();
if (read_new) if (read_new)
topic.setUnreadMessages(0); topic.setUnreadMessages(0);
if (logger.isDebugEnabled())
logger.debug(this.unread + " unread messages");
this.messages = topic.getMessages(first,last); this.messages = topic.getMessages(first,last);
this.visit_order = TopicVisitOrder.retrieve(request.getSession(true),conf.getConfID()); this.visit_order = TopicVisitOrder.retrieve(request.getSession(true),conf.getConfID());
if (visit_order!=null)
visit_order.visit(topic.getTopicNumber()); visit_order.visit(topic.getTopicNumber());
List aliases = conf.getAliases(); List aliases = conf.getAliases();
topic_stem = (String)(aliases.get(0)) + "." + String.valueOf(topic.getTopicNumber()) + "."; topic_stem = (String)(aliases.get(0)) + "." + String.valueOf(topic.getTopicNumber()) + ".";
@ -173,7 +183,10 @@ public class TopicPosts implements JSPRender
public int getNextTopicNumber() public int getNextTopicNumber()
{ {
if (visit_order!=null)
return visit_order.getNext(); return visit_order.getNext();
else
return -1;
} // end getNextTopicNumber } // end getNextTopicNumber
@ -203,8 +216,9 @@ public class TopicPosts implements JSPRender
public String getNextLocator() public String getNextLocator()
{ {
StringBuffer buf = new StringBuffer("sig="); StringBuffer buf = new StringBuffer("sig=");
buf.append(sig.getSIGID()).append("&conf=").append(conf.getConfID()).append("&top="); buf.append(sig.getSIGID()).append("&conf=").append(conf.getConfID());
buf.append(visit_order.getNext()); if (visit_order!=null)
buf.append("&top=").append(visit_order.getNext());
return buf.toString(); return buf.toString();
} // end getNextLocator } // end getNextLocator
@ -257,7 +271,10 @@ public class TopicPosts implements JSPRender
public boolean canDoNextTopic() public boolean canDoNextTopic()
{ {
if (visit_order!=null)
return visit_order.isNext(); return visit_order.isNext();
else
return false;
} // end canDoNextTopic } // end canDoNextTopic

View File

@ -99,15 +99,11 @@ public class TopicVisitOrder
TopicVisitOrder tvo = (TopicVisitOrder)(session.getAttribute(ATTRIBUTE)); TopicVisitOrder tvo = (TopicVisitOrder)(session.getAttribute(ATTRIBUTE));
if (tvo!=null) if (tvo!=null)
{ // make sure the conference is OK { // make sure the conference is OK
if (tvo.confid!=confid) if (tvo.confid!=confid) // wrong conference - remove this
{ // wrong conference - remove this
session.removeAttribute(ATTRIBUTE);
tvo = null; tvo = null;
} // end if } // end if
} // end if
return tvo; return tvo;
} // end retrieve } // end retrieve