added topic links at the bottom of "published" posts, fixed the log in or
create problem when going through PostShortcut
This commit is contained in:
parent
a0a78059bc
commit
b86ef1c3b0
|
@ -190,4 +190,6 @@ public interface ConferenceContext
|
|||
|
||||
public abstract int getSearchPostCount(String search_terms) throws AccessError, DataException;
|
||||
|
||||
public abstract String getPostLink() throws DataException;
|
||||
|
||||
} // end interface ConferenceContext
|
||||
|
|
|
@ -120,4 +120,8 @@ public interface TopicContext
|
|||
|
||||
public abstract int getSearchPostCount(String search_terms) throws AccessError, DataException;
|
||||
|
||||
public abstract ConferenceContext getEnclosingConference();
|
||||
|
||||
public abstract String getPostLink() throws DataException;
|
||||
|
||||
} // end interface TopicContext
|
||||
|
|
|
@ -79,4 +79,8 @@ public interface TopicMessageContext
|
|||
|
||||
public abstract void publish() throws DataException, AccessError;
|
||||
|
||||
public abstract TopicContext getEnclosingTopic() throws DataException;
|
||||
|
||||
public abstract String getPostLink() throws DataException;
|
||||
|
||||
} // end interface TopicMessageContext
|
||||
|
|
|
@ -1736,11 +1736,27 @@ class ConferenceUserContextImpl implements ConferenceContext, ConferenceBackend
|
|||
|
||||
} // end getSearchPostCount
|
||||
|
||||
public String getPostLink() throws DataException
|
||||
{
|
||||
if (deleted)
|
||||
return null;
|
||||
|
||||
String v = getConferenceData().getAnAlias();
|
||||
return env.getCommunityAlias() + "!" + v;
|
||||
|
||||
} // end getPostLink
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface ConferenceBackend
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public ConferenceContext selfConference()
|
||||
{
|
||||
return this;
|
||||
|
||||
} // end selfConference
|
||||
|
||||
public int realConfID()
|
||||
{
|
||||
return confid;
|
||||
|
|
|
@ -42,8 +42,10 @@ class PublishedMessageImpl implements TopicMessageContext
|
|||
*/
|
||||
|
||||
private EnvEngine env; // the execution environment
|
||||
private int cid;
|
||||
private long postid;
|
||||
private long parent;
|
||||
private int topicid;
|
||||
private int num;
|
||||
private int linecount;
|
||||
private int creator_uid;
|
||||
|
@ -51,18 +53,22 @@ class PublishedMessageImpl implements TopicMessageContext
|
|||
private String pseud;
|
||||
private String creator_cache = null;
|
||||
private String text_cache = null;
|
||||
private PublishedMessageTopicImpl topic = null;
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Constructors
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
PublishedMessageImpl(EnvEngine env, long postid, long parent, int num, int linecount, int creator_uid,
|
||||
java.util.Date posted, String pseud, String creator_cache, String text_cache)
|
||||
PublishedMessageImpl(EnvEngine env, int cid, long postid, long parent, int topicid, int num, int linecount,
|
||||
int creator_uid, java.util.Date posted, String pseud, String creator_cache,
|
||||
String text_cache)
|
||||
{
|
||||
this.env = env;
|
||||
this.cid = cid;
|
||||
this.postid = postid;
|
||||
this.parent = parent;
|
||||
this.topicid = topicid;
|
||||
this.num = num;
|
||||
this.linecount = linecount;
|
||||
this.creator_uid = creator_uid;
|
||||
|
@ -73,12 +79,14 @@ class PublishedMessageImpl implements TopicMessageContext
|
|||
|
||||
} // end constructor
|
||||
|
||||
protected PublishedMessageImpl(EnvEngine env, long postid, long parent, int num, int linecount,
|
||||
int creator_uid, java.util.Date posted, String pseud)
|
||||
protected PublishedMessageImpl(EnvEngine env, int cid, long postid, long parent, int topicid, int num,
|
||||
int linecount, int creator_uid, java.util.Date posted, String pseud)
|
||||
{
|
||||
this.env = env;
|
||||
this.cid = cid;
|
||||
this.postid = postid;
|
||||
this.parent = parent;
|
||||
this.topicid = topicid;
|
||||
this.num = num;
|
||||
this.linecount = linecount;
|
||||
this.creator_uid = creator_uid;
|
||||
|
@ -327,6 +335,20 @@ class PublishedMessageImpl implements TopicMessageContext
|
|||
|
||||
} // end publish
|
||||
|
||||
public TopicContext getEnclosingTopic() throws DataException
|
||||
{
|
||||
if (topic==null)
|
||||
topic = new PublishedMessageTopicImpl(env,cid,topicid);
|
||||
return topic;
|
||||
|
||||
} // end getEnclosingTopic
|
||||
|
||||
public String getPostLink() throws DataException
|
||||
{
|
||||
return getEnclosingTopic().getPostLink() + "." + num;
|
||||
|
||||
} // end getPostLink
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Static operations usable only within package
|
||||
*--------------------------------------------------------------------------------
|
||||
|
@ -343,8 +365,8 @@ class PublishedMessageImpl implements TopicMessageContext
|
|||
|
||||
// create the statement to retrieve the post information
|
||||
StringBuffer sql =
|
||||
new StringBuffer("SELECT p.postid, q.parent, q.num, q.linecount, q.creator_uid, q.posted, "
|
||||
+ "q.pseud FROM postpublish p, posts q WHERE p.postid = q.postid "
|
||||
new StringBuffer("SELECT p.sigid, p.postid, q.parent, q.topicid, q.num, q.linecount, q.creator_uid, "
|
||||
+ "q.posted, q.pseud FROM postpublish p, posts q WHERE p.postid = q.postid "
|
||||
+ "ORDER BY p.on_date DESC, p.postid ASC LIMIT ");
|
||||
sql.append(cache_list.size()).append(", ").append(desired_size-cache_list.size()).append(';');
|
||||
|
||||
|
@ -352,9 +374,9 @@ class PublishedMessageImpl implements TopicMessageContext
|
|||
ResultSet rs = stmt.executeQuery(sql.toString());
|
||||
while (rs.next())
|
||||
{ // create PublishedMessageImpl objects to backfill the cache
|
||||
TopicMessageContext tmc = new PublishedMessageImpl(env,rs.getLong(1),rs.getLong(2),rs.getInt(3),
|
||||
rs.getInt(4),rs.getInt(5),
|
||||
SQLUtil.getFullDateTime(rs,6),rs.getString(7));
|
||||
TopicMessageContext tmc = new PublishedMessageImpl(env,rs.getInt(1),rs.getLong(2),rs.getLong(3),
|
||||
rs.getInt(4),rs.getInt(5),rs.getInt(6),rs.getInt(7),
|
||||
SQLUtil.getFullDateTime(rs,8),rs.getString(9));
|
||||
cache_list.add(tmc);
|
||||
|
||||
} // end while
|
||||
|
@ -391,9 +413,9 @@ class PublishedMessageImpl implements TopicMessageContext
|
|||
return; // nothing to do here!
|
||||
|
||||
// execute the statement to retrieve the post information
|
||||
final String sql = "SELECT p.postid, q.parent, q.num, q.linecount, q.creator_uid, q.posted, q.pseud "
|
||||
+ "FROM postpublish p, posts q WHERE p.postid = q.postid ORDER BY p.on_date DESC, "
|
||||
+ "p.postid ASC;";
|
||||
final String sql = "SELECT p.sigid, p.postid, q.parent, q.topicid, q.num, q.linecount, q.creator_uid, "
|
||||
+ "q.posted, q.pseud FROM postpublish p, posts q WHERE p.postid = q.postid "
|
||||
+ "ORDER BY p.on_date DESC, p.postid ASC;";
|
||||
rs = stmt.executeQuery(sql);
|
||||
|
||||
// append to the output list
|
||||
|
@ -403,8 +425,9 @@ class PublishedMessageImpl implements TopicMessageContext
|
|||
if ((ctr--)<=0)
|
||||
{ // append context, please
|
||||
TopicMessageContext ctxt =
|
||||
new PublishedMessageImpl(env,rs.getLong(1),rs.getLong(2),rs.getInt(3),rs.getInt(4),
|
||||
rs.getInt(5),SQLUtil.getFullDateTime(rs,6),rs.getString(7));
|
||||
new PublishedMessageImpl(env,rs.getInt(1),rs.getLong(2),rs.getLong(3),rs.getInt(4),rs.getInt(5),
|
||||
rs.getInt(6),rs.getInt(7),SQLUtil.getFullDateTime(rs,8),
|
||||
rs.getString(9));
|
||||
return_list.add(ctxt);
|
||||
|
||||
} // end if
|
||||
|
|
|
@ -0,0 +1,396 @@
|
|||
/*
|
||||
* 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.core.impl;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.*;
|
||||
import org.apache.log4j.*;
|
||||
import com.silverwrist.venice.core.*;
|
||||
import com.silverwrist.venice.core.internals.EnvEngine;
|
||||
import com.silverwrist.venice.db.*;
|
||||
import com.silverwrist.venice.except.*;
|
||||
import com.silverwrist.venice.htmlcheck.HTMLChecker;
|
||||
|
||||
class PublishedMessageTopicImpl implements TopicContext
|
||||
{
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Static data members
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private static Category logger = Category.getInstance(PublishedMessageTopicImpl.class);
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Attributes
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private EnvEngine env;
|
||||
private int cid;
|
||||
private int topicid;
|
||||
private short topicnum;
|
||||
private int creator_uid;
|
||||
private int total_msgs;
|
||||
private boolean frozen;
|
||||
private boolean archived;
|
||||
private java.util.Date createdate;
|
||||
private java.util.Date lastupdate;
|
||||
private String name;
|
||||
private String postlink;
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Constructor
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
PublishedMessageTopicImpl(EnvEngine env, int cid, int topicid) throws DataException
|
||||
{
|
||||
Connection conn = null;
|
||||
try
|
||||
{ // get a database connection
|
||||
conn = env.getConnection();
|
||||
Statement stmt = conn.createStatement();
|
||||
|
||||
// query the topics table for information
|
||||
StringBuffer sql =
|
||||
new StringBuffer("SELECT confid, num, creator_uid, top_message, frozen, archived, createdate, "
|
||||
+ "lastupdate, name FROM topics WHERE topicid = ");
|
||||
sql.append(topicid).append(";");
|
||||
ResultSet rs = stmt.executeQuery(sql.toString());
|
||||
if (!(rs.next()))
|
||||
throw new DataException("Topic with ID " + topicid + " not found");
|
||||
|
||||
// fill internal attributes with data
|
||||
this.env = env;
|
||||
this.cid = cid;
|
||||
this.topicid = topicid;
|
||||
int confid = rs.getInt(1);
|
||||
this.topicnum = rs.getShort(2);
|
||||
this.creator_uid = rs.getInt(3);
|
||||
this.total_msgs = rs.getInt(4) + 1;
|
||||
this.frozen = rs.getBoolean(5);
|
||||
this.archived = rs.getBoolean(6);
|
||||
this.createdate = SQLUtil.getFullDateTime(rs,7);
|
||||
this.lastupdate = SQLUtil.getFullDateTime(rs,8);
|
||||
this.name = rs.getString(9);
|
||||
|
||||
// retrieve the community alias
|
||||
rs = stmt.executeQuery("SELECT alias FROM sigs WHERE sigid = " + cid + ";");
|
||||
if (!(rs.next()))
|
||||
throw new DataException("Community with ID " + cid + " not found");
|
||||
postlink = rs.getString(1) + "!";
|
||||
|
||||
// retrieve a conference alias
|
||||
rs = stmt.executeQuery("SELECT alias FROM confalias WHERE confid = " + confid + " LIMIT 1;");
|
||||
if (!(rs.next()))
|
||||
throw new DataException("Conference with ID " + confid + " not found");
|
||||
postlink += (rs.getString(1) + "." + topicnum);
|
||||
|
||||
} // end try
|
||||
catch (SQLException e)
|
||||
{ // turn this into a data exception
|
||||
logger.error("unable to get topic data",e);
|
||||
throw new DataException("Error getting topic data: " + e.getMessage(),e);
|
||||
|
||||
} // end catch
|
||||
finally
|
||||
{ // release the connection
|
||||
env.releaseConnection(conn);
|
||||
|
||||
} // end finally
|
||||
|
||||
} // end constructor
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* Implementations from interface TopicContext
|
||||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
public void refresh()
|
||||
{ // do nothing
|
||||
} // end refresh
|
||||
|
||||
public int getTopicID()
|
||||
{
|
||||
return topicid;
|
||||
|
||||
} // end getTopicID
|
||||
|
||||
public short getTopicNumber()
|
||||
{
|
||||
return topicnum;
|
||||
|
||||
} // end getTopicNumber
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return name;
|
||||
|
||||
} // end getName
|
||||
|
||||
public int getUnreadMessages()
|
||||
{
|
||||
return 0;
|
||||
|
||||
} // end getUnreadMessages
|
||||
|
||||
public int getTotalMessages()
|
||||
{
|
||||
return total_msgs;
|
||||
|
||||
} // end getTotalMessages
|
||||
|
||||
public java.util.Date getLastUpdateDate()
|
||||
{
|
||||
return lastupdate;
|
||||
|
||||
} // end getLastUpdateDate
|
||||
|
||||
public int getCreatorUID()
|
||||
{
|
||||
return creator_uid;
|
||||
|
||||
} // end getCreatorUID
|
||||
|
||||
public boolean isFrozen()
|
||||
{
|
||||
return frozen;
|
||||
|
||||
} // end isFrozen
|
||||
|
||||
public boolean isArchived()
|
||||
{
|
||||
return archived;
|
||||
|
||||
} // end isArchived
|
||||
|
||||
public java.util.Date getCreatedDate()
|
||||
{
|
||||
return createdate;
|
||||
|
||||
} // end egtCreatedDate
|
||||
|
||||
public boolean isHidden()
|
||||
{
|
||||
return false;
|
||||
|
||||
} // end isHidden
|
||||
|
||||
public boolean isDeleted()
|
||||
{
|
||||
return false;
|
||||
|
||||
} // end isDeleted
|
||||
|
||||
public boolean canFreeze()
|
||||
{
|
||||
return false;
|
||||
|
||||
} // end canFreeze
|
||||
|
||||
public boolean canArchive()
|
||||
{
|
||||
return false;
|
||||
|
||||
} // end canArchive
|
||||
|
||||
public void setFrozen(boolean flag) throws AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end setFrozen
|
||||
|
||||
public void setArchived(boolean flag) throws AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end setArchived
|
||||
|
||||
public void setHidden(boolean flag)
|
||||
{ // do nothing
|
||||
} // end setHidden
|
||||
|
||||
public int getFirstUnreadMessage()
|
||||
{
|
||||
return -1;
|
||||
|
||||
} // end getFirstUnreadMessage
|
||||
|
||||
public void setUnreadMessages(int count)
|
||||
{ // do nothing
|
||||
} // end setUnreadMessages
|
||||
|
||||
public void fixSeen()
|
||||
{ // do nothing
|
||||
} // end fixSeen
|
||||
|
||||
public List getMessages(int low, int high) throws AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end getMessages
|
||||
|
||||
public TopicMessageContext getMessage(int number) throws AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end getMessage
|
||||
|
||||
public TopicMessageContext postNewMessage(long parent, String pseud, String text) throws AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end postNewMessage
|
||||
|
||||
public HTMLChecker getPreviewChecker()
|
||||
{
|
||||
return null;
|
||||
|
||||
} // end getPreviewChecker
|
||||
|
||||
public boolean canDelete()
|
||||
{
|
||||
return false;
|
||||
|
||||
} // end canDelete
|
||||
|
||||
public void delete() throws AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end delete
|
||||
|
||||
public void deleteTopic() throws AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end deleteTopic
|
||||
|
||||
public List getActivePosters(int skip, int limit) throws AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end getActivePosters
|
||||
|
||||
public List getActivePosters(int limit) throws AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end getActivePosters
|
||||
|
||||
public List getActivePosters() throws DataException, AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end getActivePosters
|
||||
|
||||
public List getActiveReaders(int skip, int limit) throws AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end getActiveReaders
|
||||
|
||||
public List getActiveReaders(int limit) throws AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end getActiveReaders
|
||||
|
||||
public List getActiveReaders() throws AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end getActiveReaders
|
||||
|
||||
public boolean isBozo(int other_uid)
|
||||
{
|
||||
return false;
|
||||
|
||||
} // end isBozo
|
||||
|
||||
public void setBozo(int other_uid, boolean bozo)
|
||||
{ // do nothing
|
||||
} // end setBozo
|
||||
|
||||
public boolean canSetBozo(int other_uid)
|
||||
{
|
||||
return false;
|
||||
|
||||
} // end canSetBozo
|
||||
|
||||
public List getBozos()
|
||||
{
|
||||
return Collections.EMPTY_LIST;
|
||||
|
||||
} // end getBozos
|
||||
|
||||
public boolean isSubscribed()
|
||||
{
|
||||
return false;
|
||||
|
||||
} // end isSubscribed
|
||||
|
||||
public void setSubscribed(boolean flag)
|
||||
{ // do nothing
|
||||
} // end setSubscribed
|
||||
|
||||
public void sendInvitation(String address, String personal_message) throws AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end sendInvitation
|
||||
|
||||
public boolean canSendInvitation()
|
||||
{
|
||||
return false;
|
||||
|
||||
} // end canSendInvitation
|
||||
|
||||
public void sendMailToParticipants(boolean posters, int day_limit, String subject, String text)
|
||||
throws AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end sendMailToParticipants
|
||||
|
||||
public List searchPosts(String search_terms, int offset, int count)
|
||||
throws AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end searchPosts
|
||||
|
||||
public int getSearchPostCount(String search_terms) throws AccessError
|
||||
{
|
||||
throw new AccessError("cannot perform this function from a read-only topic view");
|
||||
|
||||
} // end getSearchPostCount
|
||||
|
||||
public ConferenceContext getEnclosingConference()
|
||||
{
|
||||
throw new InternalStateError("function not implemented");
|
||||
|
||||
} // end getEnclosingConference
|
||||
|
||||
public String getPostLink()
|
||||
{
|
||||
return postlink;
|
||||
|
||||
} // end getPostLink
|
||||
|
||||
} // end PublishedMessageTopicImpl
|
|
@ -49,6 +49,7 @@ class TopicMessageUserContextImpl implements TopicMessageContext
|
|||
private EnvConference env; // the conference environment
|
||||
private long postid; // the ID of this post
|
||||
private long parent; // the parent post ID (not really used)
|
||||
private int topicid; // the topic ID we live within
|
||||
private int num; // the post number within the topic
|
||||
private int linecount; // number of lines in message
|
||||
private int creator_uid; // the UID of the poster
|
||||
|
@ -70,14 +71,15 @@ class TopicMessageUserContextImpl implements TopicMessageContext
|
|||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
protected TopicMessageUserContextImpl(EnvConference env, long postid, long parent, int num, int linecount,
|
||||
int creator_uid, java.util.Date posted, boolean hidden,
|
||||
protected TopicMessageUserContextImpl(EnvConference env, long postid, long parent, int topicid, int num,
|
||||
int linecount, int creator_uid, java.util.Date posted, boolean hidden,
|
||||
int scribble_uid, java.util.Date scribble_date, String pseud,
|
||||
int datalen, String filename, String mimetype, int stgmethod)
|
||||
{
|
||||
this.env = env;
|
||||
this.postid = postid;
|
||||
this.parent = parent;
|
||||
this.topicid = topicid;
|
||||
this.num = num;
|
||||
this.linecount = linecount;
|
||||
this.creator_uid = creator_uid;
|
||||
|
@ -93,12 +95,13 @@ class TopicMessageUserContextImpl implements TopicMessageContext
|
|||
|
||||
} // end constructor
|
||||
|
||||
TopicMessageUserContextImpl(EnvConference env, long postid, long parent, int num, int linecount,
|
||||
TopicMessageUserContextImpl(EnvConference env, long postid, long parent, int topicid, int num, int linecount,
|
||||
int creator_uid, java.util.Date posted, String pseud)
|
||||
{
|
||||
this.env = env;
|
||||
this.postid = postid;
|
||||
this.parent = parent;
|
||||
this.topicid = topicid;
|
||||
this.num = num;
|
||||
this.linecount = linecount;
|
||||
this.creator_uid = creator_uid;
|
||||
|
@ -1007,8 +1010,9 @@ class TopicMessageUserContextImpl implements TopicMessageContext
|
|||
ar = env.newAudit(AuditRecord.PUBLISH_POST,"conf=" + env.getConfID() + ",post=" + postid);
|
||||
|
||||
// establish cached data object for front page
|
||||
env.getEngine().publishNew(new PublishedMessageImpl(env,postid,parent,num,linecount,creator_uid,
|
||||
posted,pseud,creator_cache,text_cache));
|
||||
env.getEngine().publishNew(new PublishedMessageImpl(env,env.getCommunityID(),postid,parent,topicid,
|
||||
num,linecount,creator_uid,posted,pseud,
|
||||
creator_cache,text_cache));
|
||||
done = true;
|
||||
|
||||
} // end try
|
||||
|
@ -1035,6 +1039,48 @@ class TopicMessageUserContextImpl implements TopicMessageContext
|
|||
|
||||
} // end publish
|
||||
|
||||
public TopicContext getEnclosingTopic() throws DataException
|
||||
{
|
||||
return TopicUserContextImpl.getTopicByID(env,topicid);
|
||||
|
||||
} // end getEnclosingTopic
|
||||
|
||||
public String getPostLink() throws DataException
|
||||
{
|
||||
if (nuked)
|
||||
return null;
|
||||
String prefix = env.getConference().selfConference().getPostLink();
|
||||
short topicnum = -1;
|
||||
Connection conn = null;
|
||||
|
||||
try
|
||||
{ // get a database connection
|
||||
conn = env.getConnection();
|
||||
Statement stmt = conn.createStatement();
|
||||
|
||||
ResultSet rs = stmt.executeQuery("SELECT num FROM topics WHERE topicid = " + topicid + ";");
|
||||
if (!(rs.next()))
|
||||
throw new DataException("unable to locate topic number for topic ID " + topicid);
|
||||
topicnum = rs.getShort(1);
|
||||
|
||||
} // end try
|
||||
catch (SQLException e)
|
||||
{ // just trap SQL exceptions and log them
|
||||
logger.error("unable to get topic number: " + e.getMessage(),e);
|
||||
throw new DataException("unable to get topic number: " + e.getMessage(),e);
|
||||
|
||||
} // end catch
|
||||
finally
|
||||
{ // make sure we release the connection before we go
|
||||
env.releaseConnection(conn);
|
||||
|
||||
} // end finally
|
||||
|
||||
// composite together the post link value
|
||||
return prefix + "." + topicnum + "." + num;
|
||||
|
||||
} // end getPostLink
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* External static operations
|
||||
*--------------------------------------------------------------------------------
|
||||
|
@ -1070,7 +1116,7 @@ class TopicMessageUserContextImpl implements TopicMessageContext
|
|||
while (rs.next())
|
||||
{ // create implementation objects and shove them into the return vector
|
||||
TopicMessageContext val =
|
||||
new TopicMessageUserContextImpl(env,rs.getLong(1),rs.getLong(2),rs.getInt(3),rs.getInt(4),
|
||||
new TopicMessageUserContextImpl(env,rs.getLong(1),rs.getLong(2),topicid,rs.getInt(3),rs.getInt(4),
|
||||
rs.getInt(5),SQLUtil.getFullDateTime(rs,6),rs.getBoolean(7),
|
||||
rs.getInt(8),SQLUtil.getFullDateTime(rs,9),rs.getString(10),
|
||||
rs.getInt(11),rs.getString(12),rs.getString(13),rs.getInt(14));
|
||||
|
@ -1120,10 +1166,11 @@ class TopicMessageUserContextImpl implements TopicMessageContext
|
|||
ResultSet rs = stmt.executeQuery(sql.toString());
|
||||
|
||||
if (rs.next()) // create an object reference and return it
|
||||
return new TopicMessageUserContextImpl(env,rs.getLong(1),rs.getLong(2),rs.getInt(3),rs.getInt(4),
|
||||
rs.getInt(5),SQLUtil.getFullDateTime(rs,6),rs.getBoolean(7),
|
||||
rs.getInt(8),SQLUtil.getFullDateTime(rs,9),rs.getString(10),
|
||||
rs.getInt(11),rs.getString(12),rs.getString(13),rs.getInt(14));
|
||||
return new TopicMessageUserContextImpl(env,rs.getLong(1),rs.getLong(2),topicid,rs.getInt(3),
|
||||
rs.getInt(4),rs.getInt(5),SQLUtil.getFullDateTime(rs,6),
|
||||
rs.getBoolean(7),rs.getInt(8),SQLUtil.getFullDateTime(rs,9),
|
||||
rs.getString(10),rs.getInt(11),rs.getString(12),
|
||||
rs.getString(13),rs.getInt(14));
|
||||
|
||||
// indicates an error...
|
||||
throw new DataException("Message not found.");
|
||||
|
@ -1156,10 +1203,11 @@ class TopicMessageUserContextImpl implements TopicMessageContext
|
|||
Statement stmt = conn.createStatement();
|
||||
|
||||
StringBuffer sql =
|
||||
new StringBuffer("SELECT p.postid, p.parent, p.num, p.linecount, p.creator_uid, p.posted, "
|
||||
+ "p.hidden, p.scribble_uid, p.scribble_date, p.pseud, a.datalen, a.filename, "
|
||||
+ "a.mimetype, a.stgmethod FROM topics t, posts p LEFT JOIN postattach a "
|
||||
+ "ON p.postid = a.postid WHERE t.topicid = p.topicid AND t.confid = ");
|
||||
new StringBuffer("SELECT p.postid, p.parent, p.topicid, p.num, p.linecount, p.creator_uid, "
|
||||
+ "p.posted, p.hidden, p.scribble_uid, p.scribble_date, p.pseud, a.datalen, "
|
||||
+ "a.filename, a.mimetype, a.stgmethod FROM topics t, posts p LEFT JOIN "
|
||||
+ "postattach a ON p.postid = a.postid WHERE t.topicid = p.topicid AND "
|
||||
+ "t.confid = ");
|
||||
sql.append(env.getConfID()).append(" AND p.postid = ").append(postid).append(';');
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("SQL: " + sql.toString());
|
||||
|
@ -1167,9 +1215,10 @@ class TopicMessageUserContextImpl implements TopicMessageContext
|
|||
|
||||
if (rs.next()) // create an object reference and return it
|
||||
return new TopicMessageUserContextImpl(env,rs.getLong(1),rs.getLong(2),rs.getInt(3),rs.getInt(4),
|
||||
rs.getInt(5),SQLUtil.getFullDateTime(rs,6),rs.getBoolean(7),
|
||||
rs.getInt(8),SQLUtil.getFullDateTime(rs,9),rs.getString(10),
|
||||
rs.getInt(11),rs.getString(12),rs.getString(13),rs.getInt(14));
|
||||
rs.getInt(5),rs.getInt(6),SQLUtil.getFullDateTime(rs,7),
|
||||
rs.getBoolean(8),rs.getInt(9),SQLUtil.getFullDateTime(rs,10),
|
||||
rs.getString(11),rs.getInt(12),rs.getString(13),
|
||||
rs.getString(14),rs.getInt(15));
|
||||
|
||||
// indicates an error...
|
||||
throw new DataException("Message not found.");
|
||||
|
|
|
@ -850,8 +850,8 @@ class TopicUserContextImpl implements TopicContext
|
|||
// else don't bother - it would be a waste of time
|
||||
|
||||
// return the new message context
|
||||
return new TopicMessageUserContextImpl(env,new_post_id,parent,new_post_num,text_linecount,env.getUserID(),
|
||||
posted_date,real_pseud);
|
||||
return new TopicMessageUserContextImpl(env,new_post_id,parent,topicid,new_post_num,text_linecount,
|
||||
env.getUserID(),posted_date,real_pseud);
|
||||
|
||||
} // end postMessage
|
||||
|
||||
|
@ -1516,6 +1516,20 @@ class TopicUserContextImpl implements TopicContext
|
|||
|
||||
} // end getSearchPostCount
|
||||
|
||||
public ConferenceContext getEnclosingConference()
|
||||
{
|
||||
return env.getConference().selfConference();
|
||||
|
||||
} // end getEnclosingConference
|
||||
|
||||
public String getPostLink() throws DataException
|
||||
{
|
||||
if (deleted)
|
||||
return null;
|
||||
return env.getConference().selfConference().getPostLink() + "." + topicnum;
|
||||
|
||||
} // end getPostLink
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
* External operations usable only from within the package
|
||||
*--------------------------------------------------------------------------------
|
||||
|
|
|
@ -20,11 +20,14 @@ package com.silverwrist.venice.core.internals;
|
|||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Date;
|
||||
import com.silverwrist.venice.core.ConferenceContext;
|
||||
import com.silverwrist.venice.db.PostLinkDecoderContext;
|
||||
import com.silverwrist.venice.except.DataException;
|
||||
|
||||
public interface ConferenceBackend
|
||||
{
|
||||
public abstract ConferenceContext selfConference();
|
||||
|
||||
public abstract int realConfID();
|
||||
|
||||
public abstract boolean userCanHide();
|
||||
|
|
|
@ -98,7 +98,10 @@ public class PostShortcut extends VeniceServlet
|
|||
} // end catch
|
||||
catch (AccessError ae)
|
||||
{ // we can't get to the conference...
|
||||
return new ErrorBox("Access Error",ae.getMessage(),null);
|
||||
if (user.isLoggedIn())
|
||||
return new ErrorBox("Access Error",ae.getMessage(),null);
|
||||
else
|
||||
return new LogInOrCreate("go/" + raw_link);
|
||||
|
||||
} // end catch
|
||||
|
||||
|
@ -122,7 +125,10 @@ public class PostShortcut extends VeniceServlet
|
|||
} // end catch
|
||||
catch (AccessError ae)
|
||||
{ // we can't get to the topic...
|
||||
return new ErrorBox("Access Error",ae.getMessage(),null);
|
||||
if (user.isLoggedIn())
|
||||
return new ErrorBox("Access Error",ae.getMessage(),null);
|
||||
else
|
||||
return new LogInOrCreate("go/" + raw_link);
|
||||
|
||||
} // end catch
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ import java.io.IOException;
|
|||
import java.util.*;
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.http.*;
|
||||
import org.apache.log4j.*;
|
||||
import com.silverwrist.util.StringUtil;
|
||||
import com.silverwrist.venice.core.*;
|
||||
import com.silverwrist.venice.except.*;
|
||||
|
@ -33,6 +34,8 @@ public class TopDisplay implements ContentRender, ColorSelectors
|
|||
*--------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
private static Category logger = Category.getInstance(TopDisplay.class);
|
||||
|
||||
private static final String ATTR_NAME = "com.silverwrist.venice.TopDisplay";
|
||||
|
||||
/*--------------------------------------------------------------------------------
|
||||
|
@ -125,6 +128,7 @@ public class TopDisplay implements ContentRender, ColorSelectors
|
|||
} // end try
|
||||
catch (ServletException se)
|
||||
{ // since we can't throw ServletException, we throw IOException
|
||||
logger.error("top_content.jsp failure",se);
|
||||
throw new IOException("Failure including top_content.jsp");
|
||||
|
||||
} // end catch
|
||||
|
@ -162,7 +166,8 @@ public class TopDisplay implements ContentRender, ColorSelectors
|
|||
|
||||
} // end try
|
||||
catch (ServletException se)
|
||||
{ // since we can't throw ServletException, we throw IOException
|
||||
{ // since we can't throw ServletException, we write an error message
|
||||
logger.error("sidebox #" + i + " failure",se);
|
||||
out.write(rdat.getStdFontTag(SIDEBOX_CONTENT_FOREGROUND,2) + "<EM>failure rendering class "
|
||||
+ sideboxes[i].getClass().getName() + ": " + StringUtil.encodeHTML(se.getMessage())
|
||||
+ "</EM></FONT>\n");
|
||||
|
@ -173,9 +178,13 @@ public class TopDisplay implements ContentRender, ColorSelectors
|
|||
rdat.flushOutput(); // now make sure the included page is properly flushed
|
||||
|
||||
} // end else if
|
||||
else // this is bogus - just display a little error here
|
||||
else
|
||||
{ // this is bogus - just display a little error here
|
||||
logger.error("sidebox #" + i + " class " + sideboxes[i].getClass().getName() + " cannot be rendered");
|
||||
out.write(rdat.getStdFontTag(SIDEBOX_CONTENT_FOREGROUND,2) + "<EM>cannot display sidebox of class: "
|
||||
+ sideboxes[i].getClass().getName() + "</EM></FONT>\n");
|
||||
|
||||
} // end else
|
||||
|
||||
// close up the framework of this sidebox
|
||||
out.write("</TD></TR></TABLE><P>\n");
|
||||
|
@ -215,6 +224,29 @@ public class TopDisplay implements ContentRender, ColorSelectors
|
|||
|
||||
} // end getPosterName
|
||||
|
||||
public static String getTopicPostLink(RenderData rdat, TopicMessageContext msg)
|
||||
{
|
||||
try
|
||||
{ // retrieve the topic post link and name, and combine them
|
||||
TopicContext topic = msg.getEnclosingTopic();
|
||||
String plink = topic.getPostLink();
|
||||
return "<A HREF=\"" + rdat.getEncodedServletPath("go/" + plink) + "\">" + topic.getName() + "</A>";
|
||||
|
||||
} // end try
|
||||
catch (DataException de)
|
||||
{ // just return null on failure
|
||||
return null;
|
||||
|
||||
} // end catch
|
||||
catch (Exception e)
|
||||
{ // temporary guard point here
|
||||
logger.error("Caught in getTopicPostLink:",e);
|
||||
return null;
|
||||
|
||||
} // end catch
|
||||
|
||||
} // end getTopicPostLink
|
||||
|
||||
public static String getMessageBodyText(TopicMessageContext msg)
|
||||
{
|
||||
try
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
for (int i=0; i<ntp; i++) {
|
||||
TopicMessageContext msg = data.getTopPost(i);
|
||||
String poster = data.getPosterName(msg);
|
||||
String topic_link = data.getTopicPostLink(rdat,msg);
|
||||
%>
|
||||
<% if (i>0) { %><HR WIDTH="70%"><% } %>
|
||||
<%= rdat.getStdFontTag(ColorSelectors.CONTENT_FOREGROUND,2) %>
|
||||
|
@ -47,6 +48,9 @@
|
|||
</EM>)
|
||||
<P>
|
||||
<PRE><%= rdat.rewritePostData(data.getMessageBodyText(msg)) %></PRE>
|
||||
<% if (topic_link!=null) { %>
|
||||
<P><FONT SIZE=-1><EM>(From the topic: <%= topic_link %>)</EM></FONT><BR>
|
||||
<% } // end if %>
|
||||
</FONT>
|
||||
<%
|
||||
} // end for
|
||||
|
|
Loading…
Reference in New Issue
Block a user