added "sticky" topic facility to cause topics to always float at the top of

the topic list when it's set
This commit is contained in:
Eric J. Bowersox 2004-07-11 08:08:27 +00:00
parent f0bf5e31ee
commit 477aac51f0
26 changed files with 1061 additions and 809 deletions

View File

@ -215,11 +215,13 @@
<button id="set" caption="Set" fixup="true">classic/set.jpg</button> <button id="set" caption="Set" fixup="true">classic/set.jpg</button>
<button id="show" caption="Show" fixup="true">classic/show.jpg</button> <button id="show" caption="Show" fixup="true">classic/show.jpg</button>
<button id="show_topic" caption="Show Topic" fixup="true">classic/show_topic.jpg</button> <button id="show_topic" caption="Show Topic" fixup="true">classic/show_topic.jpg</button>
<button id="stick_topic" caption="Stick Topic" fixup="true">classic/stick_topic.jpg</button>
<button id="topic_list" caption="Topic List" fixup="true">classic/topic_list.jpg</button> <button id="topic_list" caption="Topic List" fixup="true">classic/topic_list.jpg</button>
<button id="ua_accept" caption="I Accept" fixup="true">classic/user_accept.jpg</button> <button id="ua_accept" caption="I Accept" fixup="true">classic/user_accept.jpg</button>
<button id="ua_decline" caption="I Decline" fixup="true">classic/user_decline.jpg</button> <button id="ua_decline" caption="I Decline" fixup="true">classic/user_decline.jpg</button>
<button id="unarchive_topic" caption="Unarchive Topic" fixup="true">classic/unarchive_topic.jpg</button> <button id="unarchive_topic" caption="Unarchive Topic" fixup="true">classic/unarchive_topic.jpg</button>
<button id="unfreeze_topic" caption="Unfreeze Topic" fixup="true">classic/unfreeze_topic.jpg</button> <button id="unfreeze_topic" caption="Unfreeze Topic" fixup="true">classic/unfreeze_topic.jpg</button>
<button id="unstick_topic" caption="Unstick Topic" fixup="true">classic/unstick_topic.jpg</button>
<button id="update" caption="Update" fixup="true">classic/update.jpg</button> <button id="update" caption="Update" fixup="true">classic/update.jpg</button>
<button id="upload" caption="Upload" fixup="true">classic/upload.jpg</button> <button id="upload" caption="Upload" fixup="true">classic/upload.jpg</button>
<button id="yes" caption="Yes" fixup="true">classic/yes.jpg</button> <button id="yes" caption="Yes" fixup="true">classic/yes.jpg</button>
@ -274,11 +276,13 @@
<button id="set" caption="Set" fixup="true">gelcap/set.jpg</button> <button id="set" caption="Set" fixup="true">gelcap/set.jpg</button>
<button id="show" caption="Show" fixup="true">gelcap/show.jpg</button> <button id="show" caption="Show" fixup="true">gelcap/show.jpg</button>
<button id="show_topic" caption="Show Topic" fixup="true">gelcap/show_topic.jpg</button> <button id="show_topic" caption="Show Topic" fixup="true">gelcap/show_topic.jpg</button>
<button id="stick_topic" caption="Stick Topic" fixup="true">gelcap/stick_topic.jpg</button>
<button id="topic_list" caption="Topic List" fixup="true">gelcap/topic_list.jpg</button> <button id="topic_list" caption="Topic List" fixup="true">gelcap/topic_list.jpg</button>
<button id="ua_accept" caption="I Accept" fixup="true">gelcap/user_accept.jpg</button> <button id="ua_accept" caption="I Accept" fixup="true">gelcap/user_accept.jpg</button>
<button id="ua_decline" caption="I Decline" fixup="true">gelcap/user_decline.jpg</button> <button id="ua_decline" caption="I Decline" fixup="true">gelcap/user_decline.jpg</button>
<button id="unarchive_topic" caption="Unarchive Topic" fixup="true">gelcap/unarchive_topic.jpg</button> <button id="unarchive_topic" caption="Unarchive Topic" fixup="true">gelcap/unarchive_topic.jpg</button>
<button id="unfreeze_topic" caption="Unfreeze Topic" fixup="true">gelcap/unfreeze_topic.jpg</button> <button id="unfreeze_topic" caption="Unfreeze Topic" fixup="true">gelcap/unfreeze_topic.jpg</button>
<button id="unstick_topic" caption="Unstick Topic" fixup="true">gelcap/unstick_topic.jpg</button>
<button id="update" caption="Update" fixup="true">gelcap/update.jpg</button> <button id="update" caption="Update" fixup="true">gelcap/update.jpg</button>
<button id="upload" caption="Upload" fixup="true">gelcap/upload.jpg</button> <button id="upload" caption="Upload" fixup="true">gelcap/upload.jpg</button>
<button id="yes" caption="Yes" fixup="true">gelcap/yes.jpg</button> <button id="yes" caption="Yes" fixup="true">gelcap/yes.jpg</button>

View File

@ -321,8 +321,6 @@
<config name="post-body"> <config name="post-body">
<options wordwrap="55" angles="true" parens="true" discardHTML="false"/> <options wordwrap="55" angles="true" parens="true" discardHTML="false"/>
<output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/> <output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/>
<output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.SQLEncodingFilter"/>
<output-filter type="raw" class="com.silverwrist.venice.htmlcheck.filters.SQLEncodingFilter"/>
<rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/> <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
<rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.URLRewriter"/> <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.URLRewriter"/>
<rewriter type="tag" class="com.silverwrist.venice.db.PostLinkRewriter"/> <rewriter type="tag" class="com.silverwrist.venice.db.PostLinkRewriter"/>
@ -335,8 +333,6 @@
<config name="post-pseud"> <config name="post-pseud">
<options wordwrap="0" angles="true" parens="false" discardHTML="false"/> <options wordwrap="0" angles="true" parens="false" discardHTML="false"/>
<output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/> <output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/>
<output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.SQLEncodingFilter"/>
<output-filter type="raw" class="com.silverwrist.venice.htmlcheck.filters.SQLEncodingFilter"/>
<tag-set id="restricted"/> <tag-set id="restricted"/>
</config> </config>
<config name="preview"> <config name="preview">
@ -364,8 +360,6 @@
<options wordwrap="55" rewrap="true" angles="true" parens="true" discardHTML="false" <options wordwrap="55" rewrap="true" angles="true" parens="true" discardHTML="false"
discardRejected="true" discardComments="true" discardXML="true"/> discardRejected="true" discardComments="true" discardXML="true"/>
<output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/> <output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/>
<output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.SQLEncodingFilter"/>
<output-filter type="raw" class="com.silverwrist.venice.htmlcheck.filters.SQLEncodingFilter"/>
<rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/> <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
<rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.URLRewriter"/> <rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.URLRewriter"/>
<rewriter type="tag" class="com.silverwrist.venice.db.PostLinkRewriter"/> <rewriter type="tag" class="com.silverwrist.venice.db.PostLinkRewriter"/>

View File

@ -8,9 +8,9 @@
// //
// The Original Code is the Venice Web Communities System. // The Original Code is the Venice Web Communities System.
// //
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>, // The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
// for Silverwrist Design Studios. Portions created by Eric J. Bowersox are // for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
// Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. // Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
// //
// Contributor(s): // Contributor(s):
@ -34,7 +34,7 @@ on_error = "conf/manage_conf.js.vs?cc=" + comm.communityID + "&conf=" + conf.con
rc = null; rc = null;
try try
{ // get a topic list from the conference { // get a topic list from the conference
topics = conf.getTopicList(ConferenceContext.GET_ALL,ConferenceContext.SORT_NUMBER); topics = conf.getTopicList(ConferenceContext.GET_ALL,ConferenceContext.SORT_NUMBER,true);
rinput.setRequestAttribute("conference.reports.topiclist",topics); rinput.setRequestAttribute("conference.reports.topiclist",topics);
// create the result view // create the result view

View File

@ -8,9 +8,9 @@
// //
// The Original Code is the Venice Web Communities System. // The Original Code is the Venice Web Communities System.
// //
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>, // The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
// for Silverwrist Design Studios. Portions created by Eric J. Bowersox are // for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
// Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. // Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
// //
// Contributor(s): // Contributor(s):
@ -35,7 +35,7 @@ if ("GET"==rinput.verb)
{ // display the dialog { // display the dialog
try try
{ // we need the topic list { // we need the topic list
tlist = conf.getTopicList(ConferenceContext.DISPLAY_ALL,ConferenceContext.SORT_NAME); tlist = conf.getTopicList(ConferenceContext.DISPLAY_ALL,ConferenceContext.SORT_NAME,true);
rinput.setRequestAttribute("topic.email.list",tlist); rinput.setRequestAttribute("topic.email.list",tlist);
// create the dialog // create the dialog

View File

@ -45,7 +45,7 @@ try
{ // figure out what to do here { // figure out what to do here
if ("GET"==rinput.verb) if ("GET"==rinput.verb)
{ // load and display the JSP page for the form { // load and display the JSP page for the form
l = conf.getTopicList(ConferenceContext.GET_ALL,ConferenceContext.SORT_NUMBER); l = conf.getTopicList(ConferenceContext.GET_ALL,ConferenceContext.SORT_NUMBER,true);
rinput.setRequestAttribute("topic.list",l); rinput.setRequestAttribute("topic.list",l);
rc = new JSPView("Export Messages: " + conf.name,"conf/export.jsp"); rc = new JSPView("Export Messages: " + conf.name,"conf/export.jsp");

View File

@ -8,9 +8,9 @@
// //
// The Original Code is the Venice Web Communities System. // The Original Code is the Venice Web Communities System.
// //
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>, // The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
// for Silverwrist Design Studios. Portions created by Eric J. Bowersox are // for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
// Copyright (C) 2002 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. // Copyright (C) 2002-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
// //
// Contributor(s): // Contributor(s):
@ -58,7 +58,7 @@ if ("GET"==rinput.verb)
rc = null; rc = null;
try try
{ // get the list of topics in the conference { // get the list of topics in the conference
in_list = vlib.castList(conf.getTopicList(ConferenceContext.GET_ALL,ConferenceContext.SORT_NAME)); in_list = vlib.castList(conf.getTopicList(ConferenceContext.GET_ALL,ConferenceContext.SORT_NAME,true));
out_list = vlib.createList(); out_list = vlib.createList();
it = in_list.iterator(); it = in_list.iterator();
while (it.hasNext()) while (it.hasNext())

View File

@ -8,9 +8,9 @@
// //
// The Original Code is the Venice Web Communities System. // The Original Code is the Venice Web Communities System.
// //
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>, // The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
// for Silverwrist Design Studios. Portions created by Eric J. Bowersox are // for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
// Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. // Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
// //
// Contributor(s): // Contributor(s):
@ -113,7 +113,7 @@ try
rc.pageQID = "go/" + comm.alias + "!" + tmp; rc.pageQID = "go/" + comm.alias + "!" + tmp;
if (conf.displayPostPictures() && rinput.user.displayPostPictures()) if (conf.displayPostPictures() && rinput.user.displayPostPictures())
{ // set up the user p[hoto dimensions { // set up the user photo dimensions
old_psz = rinput.engine.getUserPhotoSize(); old_psz = rinput.engine.getUserPhotoSize();
rc.photoDims = new Dimension((old_psz.width * SCALING_NUM) / SCALING_DENOM, rc.photoDims = new Dimension((old_psz.width * SCALING_NUM) / SCALING_DENOM,
(old_psz.height * SCALING_NUM) / SCALING_DENOM); (old_psz.height * SCALING_NUM) / SCALING_DENOM);

View File

@ -8,9 +8,9 @@
// //
// The Original Code is the Venice Web Communities System. // The Original Code is the Venice Web Communities System.
// //
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>, // The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
// for Silverwrist Design Studios. Portions created by Eric J. Bowersox are // for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
// Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. // Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
// //
// Contributor(s): // Contributor(s):
@ -32,7 +32,7 @@ conf = currc.getConference(true,"conf/conferences.js.vs?cc=" + comm.communityID)
rc = null; rc = null;
try try
{ // get the topic list, using the current view and sort options { // get the topic list, using the current view and sort options
topic_list = conf.getTopicList(currc.viewOption,currc.sortOption); topic_list = conf.getTopicList(currc.viewOption,currc.sortOption,false);
// initialize and return the topic visit order // initialize and return the topic visit order
ord = currc.newTopicVisitOrder(topic_list); ord = currc.newTopicVisitOrder(topic_list);

View File

@ -0,0 +1,56 @@
// 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@ricochet.com>,
// for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
// Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
//
// Contributor(s):
importPackage(java.util);
importPackage(Packages.com.silverwrist.venice.core);
importPackage(Packages.com.silverwrist.venice.except);
importPackage(Packages.com.silverwrist.venice.ui);
importPackage(Packages.com.silverwrist.venice.ui.conf);
importPackage(Packages.com.silverwrist.venice.ui.helpers);
// get the request object and the community
rinput = bsf.lookupBean("request");
comm = rinput.getCommunity(true,"top.js.vs");
// get the current conference
currc = new CurrentConference(rinput);
conf = currc.getConference(true,"conf/conferences.js.vs?cc=" + comm.communityID);
// get the current topic
topic = currc.getTopic(true,"conf/topics.js.vs?cc=" + comm.communityID + "&conf=" + conf.confID);
on_error = "conf/posts.js.vs?cc=" + comm.communityID + "&conf=" + conf.confID + "&top=" + topic.topicNumber;
rc = null;
try
{ // get the flag and set the sticky status
flag = rinput.getParameterInt("flag",0);
topic.setSticky(flag==1);
rc = new Redirect(on_error,LinkTypes.SERVLET);
} // end try
catch (e)
{ // error setting the hide topic
etype = vlib.exceptionType(e) + "";
if (etype.match("DataException"))
rc = new ErrorBox("Database Error","Database error setting sticky status: " + e.message,on_error);
else if (etype.match("AccessError"))
rc = new ErrorBox("Access Error",e.message,on_error);
else
rc = e;
} // end catch
vlib.output(rc); // all done!

View File

@ -8,9 +8,9 @@
// //
// The Original Code is the Venice Web Communities System. // The Original Code is the Venice Web Communities System.
// //
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>, // The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
// for Silverwrist Design Studios. Portions created by Eric J. Bowersox are // for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
// Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. // Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
// //
// Contributor(s): // Contributor(s):
@ -70,7 +70,7 @@ if (rinput.hasParameter("sort"))
rc = null; rc = null;
try try
{ // get the topic list { // get the topic list
topic_list = conf.getTopicList(view_opt,sort_opt); topic_list = conf.getTopicList(view_opt,sort_opt,false);
// initialize the visit order // initialize the visit order
ord = currc.newTopicVisitOrder(topic_list); ord = currc.newTopicVisitOrder(topic_list);

View File

@ -328,6 +328,7 @@ CREATE TABLE topics (
top_message INT DEFAULT 0, top_message INT DEFAULT 0,
frozen TINYINT DEFAULT 0, frozen TINYINT DEFAULT 0,
archived TINYINT DEFAULT 0, archived TINYINT DEFAULT 0,
sticky TINYINT DEFAULT 0,
createdate DATETIME NOT NULL, createdate DATETIME NOT NULL,
lastupdate DATETIME NOT NULL, lastupdate DATETIME NOT NULL,
name VARCHAR(128) NOT NULL, name VARCHAR(128) NOT NULL,
@ -508,6 +509,7 @@ INSERT INTO refaudit (type, descr) VALUES
(314, 'Upload Message Attachment'), (314, 'Upload Message Attachment'),
(315, 'Delete Conference'), (315, 'Delete Conference'),
(316, 'Move Message'), (316, 'Move Message'),
(317, 'Set Topic Sticky'),
(9999999, 'DUMMY'); (9999999, 'DUMMY');
# Populate the Category table. # Populate the Category table.

View File

@ -49,158 +49,158 @@ public interface ConferenceContext
public static final int IMPORT_MATCH_NUM = 0; public static final int IMPORT_MATCH_NUM = 0;
public static final int IMPORT_MATCH_NAME = 1; public static final int IMPORT_MATCH_NAME = 1;
public abstract int getConfID(); public int getConfID();
public abstract String getName(); public String getName();
public abstract String getDescription(); public String getDescription();
public abstract Date getCreationDate(); public Date getCreationDate();
public abstract Date getLastUpdateDate(); public Date getLastUpdateDate();
public abstract List getAliases() throws DataException; public List getAliases() throws DataException;
public abstract List getHosts() throws DataException; public List getHosts() throws DataException;
public abstract boolean canReadConference(); public boolean canReadConference();
public abstract boolean canPostToConference(); public boolean canPostToConference();
public abstract boolean canCreateTopic(); public boolean canCreateTopic();
public abstract boolean canChangeConference(); public boolean canChangeConference();
public abstract int getReadLevel() throws DataException, AccessError; public int getReadLevel() throws DataException, AccessError;
public abstract int getPostLevel() throws DataException, AccessError; public int getPostLevel() throws DataException, AccessError;
public abstract int getCreateLevel() throws DataException, AccessError; public int getCreateLevel() throws DataException, AccessError;
public abstract int getHideLevel() throws DataException, AccessError; public int getHideLevel() throws DataException, AccessError;
public abstract int getNukeLevel() throws DataException, AccessError; public int getNukeLevel() throws DataException, AccessError;
public abstract int getChangeLevel() throws DataException, AccessError; public int getChangeLevel() throws DataException, AccessError;
public abstract int getDeleteLevel() throws DataException, AccessError; public int getDeleteLevel() throws DataException, AccessError;
public abstract void setSecurityLevels(int read, int post, int create, int hide, int nuke, public void setSecurityLevels(int read, int post, int create, int hide, int nuke, int change, int delete)
int change, int delete) throws DataException, AccessError;
public abstract void setName(String val) throws DataException, AccessError;
public abstract void setDescription(String val) throws DataException, AccessError;
public abstract void addAlias(String alias) throws DataException, AccessError;
public abstract void removeAlias(String alias) throws DataException, AccessError;
public abstract void setMembership(int uid, int grant_level) throws DataException, AccessError;
public abstract void addMember(int uid, boolean as_host) throws DataException, AccessError;
public abstract void removeMember(int uid) throws DataException, AccessError;
public abstract int getCommunityGrantedLevel() throws DataException, AccessError;
public abstract void setCommunityGrantedLevel(int new_level) throws DataException, AccessError;
public abstract short getSequence() throws DataException, AccessError;
public abstract void setSequence(short seq) throws DataException, AccessError;
public abstract boolean getHideList() throws DataException, AccessError;
public abstract void setHideList(boolean flag) throws DataException, AccessError;
public abstract boolean canSetHideList();
public abstract String getDefaultPseud();
public abstract void setDefaultPseud(String val) throws DataException;
public abstract boolean anyUnread();
public abstract List getTopicList(int get_option, int sort_option) throws DataException, AccessError;
public abstract TopicContext getTopic(short number) throws DataException, AccessError;
public abstract TopicContext addTopic(String title, String zp_pseud, String zp_text)
throws DataException, AccessError; throws DataException, AccessError;
public abstract TopicMessageContext getMessageByPostID(long postid) throws DataException, AccessError; public void setName(String val) throws DataException, AccessError;
public abstract HTMLChecker getNewTopicPreviewChecker(); public void setDescription(String val) throws DataException, AccessError;
public abstract void fixSeen() throws DataException, AccessError; public void addAlias(String alias) throws DataException, AccessError;
public abstract List getActivePosters(int skip, int limit) throws DataException, AccessError; public void removeAlias(String alias) throws DataException, AccessError;
public abstract List getActivePosters(int limit) throws DataException, AccessError; public void setMembership(int uid, int grant_level) throws DataException, AccessError;
public abstract List getActivePosters() throws DataException, AccessError; public void addMember(int uid, boolean as_host) throws DataException, AccessError;
public abstract List getActiveReaders(int skip, int limit) throws DataException, AccessError; public void removeMember(int uid) throws DataException, AccessError;
public abstract List getActiveReaders(int limit) throws DataException, AccessError; public int getCommunityGrantedLevel() throws DataException, AccessError;
public abstract List getActiveReaders() throws DataException, AccessError; public void setCommunityGrantedLevel(int new_level) throws DataException, AccessError;
public abstract List getMemberList() throws DataException, AccessError; public short getSequence() throws DataException, AccessError;
public abstract int getMemberLevel(int uid) throws DataException, AccessError; public void setSequence(short seq) throws DataException, AccessError;
public abstract void delete() throws DataException, AccessError; public boolean getHideList() throws DataException, AccessError;
public abstract void deleteConference() throws DataException, AccessError; public void setHideList(boolean flag) throws DataException, AccessError;
public abstract boolean canDeleteConference(); public boolean canSetHideList();
public abstract boolean isInHotlist(); public String getDefaultPseud();
public abstract void addToHotlist() throws DataException; public void setDefaultPseud(String val) throws DataException;
public abstract boolean canAddToHotlist(); public boolean anyUnread();
public abstract CommunityContext getEnclosingCommunity(); public List getTopicList(int get_option, int sort_option, boolean ignore_sticky) throws DataException, AccessError;
public abstract void removeFromHotlist() throws DataException; public List getTopicList(int get_option, int sort_option) throws DataException, AccessError;
public abstract void setHotlistSequence(int seq) throws DataException; public TopicContext getTopic(short number) throws DataException, AccessError;
public abstract boolean displayPostPictures(); public TopicContext addTopic(String title, String zp_pseud, String zp_text) throws DataException, AccessError;
public abstract ConferenceProperties getProperties() throws DataException, AccessError; public TopicMessageContext getMessageByPostID(long postid) throws DataException, AccessError;
public abstract void setProperties(ConferenceProperties props) throws DataException, AccessError; public HTMLChecker getNewTopicPreviewChecker();
public abstract SecurityInfo getSecurityInfo(); public void fixSeen() throws DataException, AccessError;
public abstract void sendInvitation(String address, String personal_message) public List getActivePosters(int skip, int limit) throws DataException, AccessError;
public List getActivePosters(int limit) throws DataException, AccessError;
public List getActivePosters() throws DataException, AccessError;
public List getActiveReaders(int skip, int limit) throws DataException, AccessError;
public List getActiveReaders(int limit) throws DataException, AccessError;
public List getActiveReaders() throws DataException, AccessError;
public List getMemberList() throws DataException, AccessError;
public int getMemberLevel(int uid) throws DataException, AccessError;
public void delete() throws DataException, AccessError;
public void deleteConference() throws DataException, AccessError;
public boolean canDeleteConference();
public boolean isInHotlist();
public void addToHotlist() throws DataException;
public boolean canAddToHotlist();
public CommunityContext getEnclosingCommunity();
public void removeFromHotlist() throws DataException;
public void setHotlistSequence(int seq) throws DataException;
public boolean displayPostPictures();
public ConferenceProperties getProperties() throws DataException, AccessError;
public void setProperties(ConferenceProperties props) throws DataException, AccessError;
public SecurityInfo getSecurityInfo();
public void sendInvitation(String address, String personal_message)
throws AccessError, DataException, EmailException; throws AccessError, DataException, EmailException;
public abstract boolean canSendInvitation(); public boolean canSendInvitation();
public abstract void sendMailToParticipants(boolean posters, int day_limit, String subject, String text) public void sendMailToParticipants(boolean posters, int day_limit, String subject, String text)
throws AccessError, DataException; throws AccessError, DataException;
public abstract String getCustomBlock(int selector) throws DataException; public String getCustomBlock(int selector) throws DataException;
public abstract void setCustomBlock(int selector, String data) throws AccessError, DataException; public void setCustomBlock(int selector, String data) throws AccessError, DataException;
public abstract void removeCustomBlocks() throws AccessError, DataException; public void removeCustomBlocks() throws AccessError, DataException;
public abstract List searchPosts(String search_terms, int offset, int count) public List searchPosts(String search_terms, int offset, int count) throws AccessError, DataException;
throws AccessError, DataException;
public abstract int getSearchPostCount(String search_terms) throws AccessError, DataException; public int getSearchPostCount(String search_terms) throws AccessError, DataException;
public abstract String getPostLink() throws DataException; public String getPostLink() throws DataException;
public abstract String exportTopics(Set select_topics) throws AccessError, DataException, IOException; public String exportTopics(Set select_topics) throws AccessError, DataException, IOException;
public abstract List importMessages(InputStream xmlstream, int match_method, boolean create_new) public List importMessages(InputStream xmlstream, int match_method, boolean create_new)
throws AccessError, DataException; throws AccessError, DataException;
} // end interface ConferenceContext } // end interface ConferenceContext

View File

@ -9,9 +9,9 @@
* *
* The Original Code is the Venice Web Communities System. * The Original Code is the Venice Web Communities System.
* *
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>, * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
*/ */
@ -30,105 +30,111 @@ public interface TopicContext
public static final int POST_MODE_NORMAL = 0; public static final int POST_MODE_NORMAL = 0;
public static final int POST_MODE_EMAIL = 1; public static final int POST_MODE_EMAIL = 1;
public abstract void refresh() throws DataException; public void refresh() throws DataException;
public abstract int getTopicID(); public int getTopicID();
public abstract short getTopicNumber(); public short getTopicNumber();
public abstract String getName(); public String getName();
public abstract int getUnreadMessages(); public int getUnreadMessages();
public abstract int getTotalMessages(); public int getTotalMessages();
public abstract Date getLastUpdateDate(); public Date getLastUpdateDate();
public abstract int getCreatorUID(); public int getCreatorUID();
public abstract boolean isFrozen(); public boolean isFrozen();
public abstract boolean isArchived(); public boolean isArchived();
public abstract Date getCreatedDate(); public boolean isSticky();
public abstract boolean isHidden(); public Date getCreatedDate();
public abstract boolean isDeleted(); public boolean isHidden();
public abstract boolean canFreeze(); public boolean isDeleted();
public abstract boolean canArchive(); public boolean canFreeze();
public abstract void setFrozen(boolean flag) throws DataException, AccessError; public boolean canArchive();
public abstract void setArchived(boolean flag) throws DataException, AccessError; public boolean canStick();
public abstract void setHidden(boolean flag) throws DataException; public void setFrozen(boolean flag) throws DataException, AccessError;
public abstract int getFirstUnreadMessage(); public void setArchived(boolean flag) throws DataException, AccessError;
public abstract void setUnreadMessages(int count) throws DataException; public void setSticky(boolean flag) throws DataException, AccessError;
public abstract void fixSeen() throws DataException; public void setHidden(boolean flag) throws DataException;
public abstract List getMessages(int low, int high) throws DataException, AccessError; public int getFirstUnreadMessage();
public abstract TopicMessageContext getMessage(int number) throws DataException, AccessError; public void setUnreadMessages(int count) throws DataException;
public abstract TopicMessageContext postNewMessage(long parent, String pseud, String text, int mode) public void fixSeen() throws DataException;
public List getMessages(int low, int high) throws DataException, AccessError;
public TopicMessageContext getMessage(int number) throws DataException, AccessError;
public TopicMessageContext postNewMessage(long parent, String pseud, String text, int mode)
throws DataException, AccessError; throws DataException, AccessError;
public abstract TopicMessageContext postNewMessage(long parent, String pseud, String text) public TopicMessageContext postNewMessage(long parent, String pseud, String text)
throws DataException, AccessError; throws DataException, AccessError;
public abstract HTMLChecker getPreviewChecker(); public HTMLChecker getPreviewChecker();
public abstract boolean canDelete(); public boolean canDelete();
public abstract void delete() throws DataException, AccessError; public void delete() throws DataException, AccessError;
public abstract void deleteTopic() throws DataException, AccessError; public void deleteTopic() throws DataException, AccessError;
public abstract List getActivePosters(int skip, int limit) throws DataException, AccessError; public List getActivePosters(int skip, int limit) throws DataException, AccessError;
public abstract List getActivePosters(int limit) throws DataException, AccessError; public List getActivePosters(int limit) throws DataException, AccessError;
public abstract List getActivePosters() throws DataException, AccessError; public List getActivePosters() throws DataException, AccessError;
public abstract List getActiveReaders(int skip, int limit) throws DataException, AccessError; public List getActiveReaders(int skip, int limit) throws DataException, AccessError;
public abstract List getActiveReaders(int limit) throws DataException, AccessError; public List getActiveReaders(int limit) throws DataException, AccessError;
public abstract List getActiveReaders() throws DataException, AccessError; public List getActiveReaders() throws DataException, AccessError;
public abstract boolean isBozo(int other_uid) throws DataException; public boolean isBozo(int other_uid) throws DataException;
public abstract void setBozo(int other_uid, boolean bozo) throws DataException; public void setBozo(int other_uid, boolean bozo) throws DataException;
public abstract boolean canSetBozo(int other_uid); public boolean canSetBozo(int other_uid);
public abstract List getBozos() throws DataException; public List getBozos() throws DataException;
public abstract boolean isSubscribed(); public boolean isSubscribed();
public abstract void setSubscribed(boolean flag) throws DataException; public void setSubscribed(boolean flag) throws DataException;
public abstract void sendInvitation(String address, String personal_message) public void sendInvitation(String address, String personal_message)
throws AccessError, DataException, EmailException; throws AccessError, DataException, EmailException;
public abstract boolean canSendInvitation(); public boolean canSendInvitation();
public abstract void sendMailToParticipants(boolean posters, int day_limit, String subject, String text) public void sendMailToParticipants(boolean posters, int day_limit, String subject, String text)
throws AccessError, DataException; throws AccessError, DataException;
public abstract List searchPosts(String search_terms, int offset, int count) public List searchPosts(String search_terms, int offset, int count)
throws AccessError, DataException; throws AccessError, DataException;
public abstract int getSearchPostCount(String search_terms) throws AccessError, DataException; public int getSearchPostCount(String search_terms) throws AccessError, DataException;
public abstract ConferenceContext getEnclosingConference(); public ConferenceContext getEnclosingConference();
public abstract String getPostLink() throws DataException; public String getPostLink() throws DataException;
} // end interface TopicContext } // end interface TopicContext

View File

@ -9,9 +9,9 @@
* *
* The Original Code is the Venice Web Communities System. * The Original Code is the Venice Web Communities System.
* *
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>, * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
*/ */

View File

@ -9,9 +9,9 @@
* *
* The Original Code is the Venice Web Communities System. * The Original Code is the Venice Web Communities System.
* *
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>, * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
*/ */
@ -986,7 +986,9 @@ class ConferenceCoreData implements ConferenceData
throw new DataException("This conference has been deleted."); throw new DataException("This conference has been deleted.");
Connection conn = null; // database connection Connection conn = null; // database connection
Statement stmt = null; PreparedStatement stmt = null;
Statement stmt2 = null;
ResultSet rs = null;
AuditRecord ar = null; // audit record AuditRecord ar = null; // audit record
short new_topic_num; // sequential number of the new topic short new_topic_num; // sequential number of the new topic
int new_topic_id; // ID of the new topic int new_topic_id; // ID of the new topic
@ -995,63 +997,65 @@ class ConferenceCoreData implements ConferenceData
try try
{ // get a database connection { // get a database connection
conn = globalsite.getConnection(null); conn = globalsite.getConnection(null);
stmt = conn.createStatement(); stmt2 = conn.createStatement();
// lock the tables we need to use so we can update them // lock the tables we need to use so we can update them
stmt.executeUpdate("LOCK TABLES confs WRITE, topics WRITE, posts WRITE, postdata WRITE;"); stmt2.executeUpdate("LOCK TABLES confs WRITE, topics WRITE, posts WRITE, postdata WRITE;");
try try
{ // determine the data for the initial topic { // determine the data for the initial topic
new_topic_num = (short)(top_topic + 1); new_topic_num = (short)(top_topic + 1);
// add the topic row to the database // add the topic row to the database
StringBuffer sql = new StringBuffer("INSERT INTO topics (confid, num, creator_uid, createdate, " stmt = conn.prepareStatement("INSERT INTO topics (confid, num, creator_uid, createdate, lastupdate, name) "
+ "lastupdate, name) VALUES ("); + "VALUES (?, ?, ?, ?, ?, ?);");
sql.append(confid).append(", ").append(new_topic_num).append(", ").append(outer.getUserID()); stmt.setInt(1,confid);
stmt.setShort(2,new_topic_num);
stmt.setInt(3,outer.getUserID());
creation = new java.util.Date(); creation = new java.util.Date();
String now_str = SQLUtil.encodeDate(creation); SQLUtil.setFullDateTime(stmt,4,creation);
sql.append(", '").append(now_str).append("', '").append(now_str).append("', '").append(title); SQLUtil.setFullDateTime(stmt,5,creation);
sql.append("');"); stmt.setString(6,title);
if (logger.isDebugEnabled()) stmt.executeUpdate();
logger.debug("SQL: " + sql.toString());
stmt.executeUpdate(sql.toString());
// get the topic ID we just inserted // get the topic ID we just inserted
ResultSet rs = stmt.executeQuery("SELECT LAST_INSERT_ID();"); rs = stmt2.executeQuery("SELECT LAST_INSERT_ID();");
if (!(rs.next())) if (!(rs.next()))
throw new InternalStateError("createNewTopic() could not get back inserted Topic ID"); throw new InternalStateError("createNewTopic() could not get back inserted Topic ID");
new_topic_id = rs.getInt(1); new_topic_id = rs.getInt(1);
SQLUtil.shutdown(rs);
// insert the "header" for the "zero post" in the topic // insert the "header" for the "zero post" in the topic
sql.setLength(0); stmt.close();
sql.append("INSERT INTO posts (topicid, num, linecount, creator_uid, posted, pseud) VALUES ("); stmt = conn.prepareStatement("INSERT INTO posts (topicid, num, linecount, creator_uid, posted, pseud) "
sql.append(new_topic_id).append(", 0, ").append(body_lines).append(", ").append(outer.getUserID()); + "VALUES (?, 0, ?, ?, ?, ?);");
sql.append(", '").append(now_str).append("', '").append(pseud).append("');"); stmt.setInt(1,new_topic_id);
if (logger.isDebugEnabled()) stmt.setInt(2,body_lines);
logger.debug("SQL: " + sql.toString()); stmt.setInt(3,outer.getUserID());
stmt.executeUpdate(sql.toString()); SQLUtil.setFullDateTime(stmt,4,creation);
stmt.setString(5,pseud);
stmt.executeUpdate();
// get the ID of the zero post // get the ID of the zero post
rs = stmt.executeQuery("SELECT LAST_INSERT_ID();"); rs.close();
rs = stmt2.executeQuery("SELECT LAST_INSERT_ID();");
if (!(rs.next())) if (!(rs.next()))
throw new InternalStateError("createNewTopic() could not get back inserted zero post ID"); throw new InternalStateError("createNewTopic() could not get back inserted zero post ID");
long zero_post_id = rs.getLong(1); long zero_post_id = rs.getLong(1);
SQLUtil.shutdown(rs);
// insert the post data // insert the post data
sql.setLength(0); stmt.close();
sql.append("INSERT INTO postdata (postid, data) VALUES (").append(zero_post_id).append(", '"); stmt = conn.prepareStatement("INSERT INTO postdata (postid, data) VALUES (?, ?);");
sql.append(body).append("');"); stmt.setLong(1,zero_post_id);
stmt.executeUpdate(sql.toString()); stmt.setString(2,body);
stmt.executeUpdate();
// touch the "conference" entry to reflect the update // touch the "conference" entry to reflect the update
sql.setLength(0); stmt.close();
sql.append("UPDATE confs SET lastupdate = '").append(now_str).append("', top_topic = "); stmt = conn.prepareStatement("UPDATE confs SET lastupdate = ?, top_topic = ? WHERE confid = ?;");
sql.append(new_topic_num).append(" WHERE confid = ").append(confid).append(';'); SQLUtil.setFullDateTime(stmt,1,creation);
if (logger.isDebugEnabled()) stmt.setInt(2,new_topic_num);
logger.debug("SQL: " + sql.toString()); stmt.setInt(3,confid);
stmt.executeUpdate(sql.toString()); stmt.executeUpdate();
// touch the local variables, too // touch the local variables, too
top_topic = new_topic_num; top_topic = new_topic_num;
@ -1077,7 +1081,9 @@ class ConferenceCoreData implements ConferenceData
} // end catch } // end catch
finally finally
{ // make sure the connection is released before we go { // make sure the connection is released before we go
SQLUtil.shutdown(rs);
SQLUtil.shutdown(stmt); SQLUtil.shutdown(stmt);
SQLUtil.shutdown(stmt2);
AuditRecord.store(conn,ar); AuditRecord.store(conn,ar);
SQLUtil.shutdown(conn); SQLUtil.shutdown(conn);
@ -1109,14 +1115,14 @@ class ConferenceCoreData implements ConferenceData
if (deleted) if (deleted)
throw new DataException("This conference has been deleted."); throw new DataException("This conference has been deleted.");
Statement stmt = null; PreparedStatement stmt = null;
try try
{ // update the last update date { // update the last update date
stmt = conn.createStatement(); stmt = conn.prepareStatement("UPDATE confs SET lastupdate = ? WHERE confid = ?;");
StringBuffer sql = new StringBuffer("UPDATE confs SET lastupdate = '"); SQLUtil.setFullDateTime(stmt,1,date);
sql.append(SQLUtil.encodeDate(date)).append("' WHERE confid = ").append(confid).append(';'); stmt.setInt(2,confid);
stmt.executeUpdate(sql.toString()); stmt.executeUpdate();
last_update = date; last_update = date;
} // end try } // end try
@ -1177,26 +1183,22 @@ class ConferenceCoreData implements ConferenceData
ArrayList rc = new ArrayList(); // return from this function ArrayList rc = new ArrayList(); // return from this function
Connection conn = null; // pooled database connection Connection conn = null; // pooled database connection
Statement stmt = null; PreparedStatement stmt = null;
ResultSet rs = null;
try try
{ // get a database connection { // get a database connection
conn = globalsite.getConnection(null); conn = globalsite.getConnection(null);
stmt = conn.createStatement();
// create a new SQL statement // create a new SQL statement
StringBuffer sql = new StringBuffer("SELECT u.uid, u.username, u.description, c.given_name, " stmt = conn.prepareStatement("SELECT u.uid, u.username, u.description, c.given_name, c.family_name, "
+ "c.family_name, c.locality, c.region, c.country, m.granted_lvl " + "c.locality, c.region, c.country, m.granted_lvl FROM users u, contacts c, "
+ "FROM users u, contacts c, confmember m WHERE " + "confmember m WHERE u.contactid = c.contactid AND u.uid = m.uid "
+ "u.contactid = c.contactid AND u.uid = m.uid AND m.confid = "); + "AND m.confid = ? AND u.is_anon = 0 ORDER BY u.username;");
sql.append(confid).append(" AND u.is_anon = 0 ORDER BY u.username;"); stmt.setInt(1,confid);
if (logger.isDebugEnabled())
logger.debug("SQL: " + sql.toString());
// launch the search! // launch the search!
ResultSet rs = stmt.executeQuery(sql.toString()); rs = stmt.executeQuery();
while (rs.next()) while (rs.next())
{ // add all the found users to the list { // add all the found users to the list
UserFoundImpl ufi = new UserFoundImpl(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getString(4), UserFoundImpl ufi = new UserFoundImpl(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getString(4),
@ -1216,6 +1218,7 @@ class ConferenceCoreData implements ConferenceData
} // end catch } // end catch
finally finally
{ // make sure we release the connection before we go { // make sure we release the connection before we go
SQLUtil.shutdown(rs);
SQLUtil.shutdown(stmt); SQLUtil.shutdown(stmt);
SQLUtil.shutdown(conn); SQLUtil.shutdown(conn);
@ -1231,19 +1234,20 @@ class ConferenceCoreData implements ConferenceData
throw new DataException("This conference has been deleted."); throw new DataException("This conference has been deleted.");
Connection conn = null; // pooled database connection Connection conn = null; // pooled database connection
Statement stmt = null; PreparedStatement stmt = null;
ResultSet rs = null;
try try
{ // get a database connection { // get a database connection
conn = globalsite.getConnection(null); conn = globalsite.getConnection(null);
stmt = conn.createStatement();
// create the statement // create the statement
StringBuffer sql = new StringBuffer("SELECT granted_lvl FROM confmember WHERE confid = "); stmt = conn.prepareStatement("SELECT granted_lvl FROM confmember WHERE confid = ? AND uid = ?;");
sql.append(confid).append(" AND uid = ").append(uid).append(';'); stmt.setInt(1,confid);
stmt.setInt(2,uid);
// execute the statement and return the retrieved value // execute the statement and return the retrieved value
ResultSet rs = stmt.executeQuery(sql.toString()); rs = stmt.executeQuery();
if (rs.next()) if (rs.next())
return rs.getInt(1); return rs.getInt(1);
@ -1256,6 +1260,7 @@ class ConferenceCoreData implements ConferenceData
} // end catch } // end catch
finally finally
{ // make sure we release the connection before we go { // make sure we release the connection before we go
SQLUtil.shutdown(rs);
SQLUtil.shutdown(stmt); SQLUtil.shutdown(stmt);
SQLUtil.shutdown(conn); SQLUtil.shutdown(conn);

View File

@ -866,7 +866,7 @@ class ConferenceUserContextImpl implements ConferenceContext, ConferenceBackend
} // end anyUnread } // end anyUnread
public List getTopicList(int get_option, int sort_option) throws DataException, AccessError public List getTopicList(int get_option, int sort_option, boolean ignore_sticky) throws DataException, AccessError
{ {
if (!(getConferenceData().canReadConference(level))) if (!(getConferenceData().canReadConference(level)))
{ // the luser can't even read the conference... { // the luser can't even read the conference...
@ -876,7 +876,13 @@ class ConferenceUserContextImpl implements ConferenceContext, ConferenceBackend
} // end if } // end if
// palm it all off on the big static function // palm it all off on the big static function
return TopicUserContextImpl.getTopicList(env,get_option,sort_option); return TopicUserContextImpl.getTopicList(env,get_option,sort_option,ignore_sticky);
} // end getTopicList
public List getTopicList(int get_option, int sort_option) throws DataException, AccessError
{
return getTopicList(get_option,sort_option,false);
} // end getTopicList } // end getTopicList
@ -943,20 +949,18 @@ class ConferenceUserContextImpl implements ConferenceContext, ConferenceBackend
// now we need to reset our last post date // now we need to reset our last post date
Connection conn = null; Connection conn = null;
Statement stmt = null; PreparedStatement stmt = null;
try try
{ // get a connection { // get a connection
conn = env.getConnection(); conn = env.getConnection();
// create a new record in topicsettings (we WERE the first to post in the topic after all!) // create a new record in topicsettings (we WERE the first to post in the topic after all!)
stmt = conn.createStatement(); stmt = conn.prepareStatement("INSERT INTO topicsettings (topicid, uid, last_post) VALUES (?, ?, ?);");
StringBuffer sql = new StringBuffer("INSERT INTO topicsettings (topicid, uid, last_post) VALUES ("); stmt.setInt(1,new_topic_inf.getTopicID());
sql.append(new_topic_inf.getTopicID()).append(", ").append(env.getUserID()).append(", '"); stmt.setInt(2,env.getUserID());
sql.append(SQLUtil.encodeDate(new_topic_inf.getCreateDate())).append("');"); SQLUtil.setFullDateTime(stmt,3,new_topic_inf.getCreateDate());
if (logger.isDebugEnabled()) stmt.executeUpdate();
logger.debug("SQL: " + sql.toString());
stmt.executeUpdate(sql.toString());
// update the conference last-post information // update the conference last-post information
touchPost(conn,new_topic_inf.getCreateDate()); touchPost(conn,new_topic_inf.getCreateDate());

View File

@ -188,7 +188,7 @@ class ConferencingExporter
m_wr = new PrintWriter(m_buffer); m_wr = new PrintWriter(m_buffer);
m_wr.write("<?xml version=\"1.0\"?>\n<vcif>\n"); m_wr.write("<?xml version=\"1.0\"?>\n<vcif>\n");
List l = conf.getTopicList(ConferenceContext.GET_ALL,ConferenceContext.SORT_NUMBER); List l = conf.getTopicList(ConferenceContext.GET_ALL,ConferenceContext.SORT_NUMBER,true);
for (Iterator it=l.iterator(); it.hasNext(); ) for (Iterator it=l.iterator(); it.hasNext(); )
visit((TopicUserContextImpl)(it.next())); visit((TopicUserContextImpl)(it.next()));

View File

@ -9,9 +9,9 @@
* *
* The Original Code is the Venice Web Communities System. * The Original Code is the Venice Web Communities System.
* *
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>, * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
* Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. * Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
*/ */
@ -40,18 +40,19 @@ class PublishedMessageTopicImpl implements TopicContext
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
*/ */
private EnvEngine env; private EnvEngine m_env;
private int cid; private int m_cid;
private int topicid; private int m_topicid;
private short topicnum; private short m_topicnum;
private int creator_uid; private int m_creator_uid;
private int total_msgs; private int m_total_msgs;
private boolean frozen; private boolean m_frozen;
private boolean archived; private boolean m_archived;
private java.util.Date createdate; private boolean m_sticky;
private java.util.Date lastupdate; private java.util.Date m_createdate;
private String name; private java.util.Date m_lastupdate;
private String postlink; private String m_name;
private String m_postlink;
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Constructor * Constructor
@ -61,47 +62,55 @@ class PublishedMessageTopicImpl implements TopicContext
PublishedMessageTopicImpl(EnvEngine env, int cid, int topicid) throws DataException PublishedMessageTopicImpl(EnvEngine env, int cid, int topicid) throws DataException
{ {
Connection conn = null; Connection conn = null;
Statement stmt = null; PreparedStatement stmt = null;
ResultSet rs = null;
try try
{ // get a database connection { // get a database connection
conn = env.getConnection(); conn = env.getConnection();
stmt = conn.createStatement();
// query the topics table for information // query the topics table for information
StringBuffer sql = stmt = conn.prepareStatement("SELECT confid, num, creator_uid, top_message, frozen, archived, sticky, "
new StringBuffer("SELECT confid, num, creator_uid, top_message, frozen, archived, createdate, " + "createdate, lastupdate, name FROM topics WHERE topicid = ?;");
+ "lastupdate, name FROM topics WHERE topicid = "); stmt.setInt(1,topicid);
sql.append(topicid).append(";"); rs = stmt.executeQuery();
ResultSet rs = stmt.executeQuery(sql.toString());
if (!(rs.next())) if (!(rs.next()))
throw new DataException("Topic with ID " + topicid + " not found"); throw new DataException("Topic with ID " + topicid + " not found");
// fill internal attributes with data // fill internal attributes with data
this.env = env; m_env = env;
this.cid = cid; m_cid = cid;
this.topicid = topicid; m_topicid = topicid;
int confid = rs.getInt(1); int confid = rs.getInt(1);
this.topicnum = rs.getShort(2); m_topicnum = rs.getShort(2);
this.creator_uid = rs.getInt(3); m_creator_uid = rs.getInt(3);
this.total_msgs = rs.getInt(4) + 1; m_total_msgs = rs.getInt(4) + 1;
this.frozen = rs.getBoolean(5); m_frozen = rs.getBoolean(5);
this.archived = rs.getBoolean(6); m_archived = rs.getBoolean(6);
this.createdate = SQLUtil.getFullDateTime(rs,7); m_sticky = rs.getBoolean(7);
this.lastupdate = SQLUtil.getFullDateTime(rs,8); m_createdate = SQLUtil.getFullDateTime(rs,8);
this.name = rs.getString(9); m_lastupdate = SQLUtil.getFullDateTime(rs,9);
m_name = rs.getString(10);
rs.close();
stmt.close();
// retrieve the community alias // retrieve the community alias
rs = stmt.executeQuery("SELECT alias FROM sigs WHERE sigid = " + cid + ";"); stmt = conn.prepareStatement("SELECT alias FROM sigs WHERE sigid = ?;");
stmt.setInt(1,cid);
rs = stmt.executeQuery();
if (!(rs.next())) if (!(rs.next()))
throw new DataException("Community with ID " + cid + " not found"); throw new DataException("Community with ID " + cid + " not found");
postlink = rs.getString(1) + "!"; m_postlink = rs.getString(1) + "!";
rs.close();
stmt.close();
// retrieve a conference alias // retrieve a conference alias
rs = stmt.executeQuery("SELECT alias FROM confalias WHERE confid = " + confid + " LIMIT 1;"); stmt = conn.prepareStatement("SELECT alias FROM confalias WHERE confid = ? LIMIT 1;");
stmt.setInt(1,confid);
rs = stmt.executeQuery();
if (!(rs.next())) if (!(rs.next()))
throw new DataException("Conference with ID " + confid + " not found"); throw new DataException("Conference with ID " + confid + " not found");
postlink += (rs.getString(1) + "." + topicnum); m_postlink += (rs.getString(1) + "." + m_topicnum);
} // end try } // end try
catch (SQLException e) catch (SQLException e)
@ -112,6 +121,7 @@ class PublishedMessageTopicImpl implements TopicContext
} // end catch } // end catch
finally finally
{ // release the connection { // release the connection
SQLUtil.shutdown(rs);
SQLUtil.shutdown(stmt); SQLUtil.shutdown(stmt);
SQLUtil.shutdown(conn); SQLUtil.shutdown(conn);
@ -130,19 +140,19 @@ class PublishedMessageTopicImpl implements TopicContext
public int getTopicID() public int getTopicID()
{ {
return topicid; return m_topicid;
} // end getTopicID } // end getTopicID
public short getTopicNumber() public short getTopicNumber()
{ {
return topicnum; return m_topicnum;
} // end getTopicNumber } // end getTopicNumber
public String getName() public String getName()
{ {
return name; return m_name;
} // end getName } // end getName
@ -154,39 +164,45 @@ class PublishedMessageTopicImpl implements TopicContext
public int getTotalMessages() public int getTotalMessages()
{ {
return total_msgs; return m_total_msgs;
} // end getTotalMessages } // end getTotalMessages
public java.util.Date getLastUpdateDate() public java.util.Date getLastUpdateDate()
{ {
return lastupdate; return m_lastupdate;
} // end getLastUpdateDate } // end getLastUpdateDate
public int getCreatorUID() public int getCreatorUID()
{ {
return creator_uid; return m_creator_uid;
} // end getCreatorUID } // end getCreatorUID
public boolean isFrozen() public boolean isFrozen()
{ {
return frozen; return m_frozen;
} // end isFrozen } // end isFrozen
public boolean isArchived() public boolean isArchived()
{ {
return archived; return m_archived;
} // end isArchived } // end isArchived
public boolean isSticky()
{
return m_sticky;
} // end isSticky
public java.util.Date getCreatedDate() public java.util.Date getCreatedDate()
{ {
return createdate; return m_createdate;
} // end egtCreatedDate } // end getCreatedDate
public boolean isHidden() public boolean isHidden()
{ {
@ -212,6 +228,12 @@ class PublishedMessageTopicImpl implements TopicContext
} // end canArchive } // end canArchive
public boolean canStick()
{
return false;
} // end canStick
public void setFrozen(boolean flag) throws AccessError public void setFrozen(boolean flag) throws AccessError
{ {
throw new AccessError("cannot perform this function from a read-only topic view"); throw new AccessError("cannot perform this function from a read-only topic view");
@ -224,6 +246,12 @@ class PublishedMessageTopicImpl implements TopicContext
} // end setArchived } // end setArchived
public void setSticky(boolean flag) throws AccessError
{
throw new AccessError("cannot perform this function from a read-only topic view");
} // end setSticky
public void setHidden(boolean flag) public void setHidden(boolean flag)
{ // do nothing { // do nothing
} // end setHidden } // end setHidden
@ -399,7 +427,7 @@ class PublishedMessageTopicImpl implements TopicContext
public String getPostLink() public String getPostLink()
{ {
return postlink; return m_postlink;
} // end getPostLink } // end getPostLink

View File

@ -68,5 +68,6 @@ public interface Audit
public static final int UPLOAD_ATTACHMENT = 314; public static final int UPLOAD_ATTACHMENT = 314;
public static final int DELETE_CONF = 315; public static final int DELETE_CONF = 315;
public static final int MOVE_MESSAGE = 316; public static final int MOVE_MESSAGE = 316;
public static final int TOPIC_STICKY = 317;
} // end interface Audit } // end interface Audit

View File

@ -9,9 +9,9 @@
The Original Code is the Venice Web Communities System. The Original Code is the Venice Web Communities System.
The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>, The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
for Silverwrist Design Studios. Portions created by Eric J. Bowersox are for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
Contributor(s): Contributor(s):
--%> --%>
@ -45,6 +45,12 @@
<util:header> <util:header>
<util:title><%= view.getTitle() %></util:title> <util:title><%= view.getTitle() %></util:title>
<util:subtitle> <util:subtitle>
<% if (my_topic.isSticky()) { %>
(Sticky)
<% } // end if %>
<% if (my_topic.isHidden()) { %>
(Hidden)
<% } // end if %>
<% if (my_topic.isArchived()) { %> <% if (my_topic.isArchived()) { %>
(Archived) (Archived)
<% } else if (my_topic.isFrozen()) { %> <% } else if (my_topic.isFrozen()) { %>
@ -55,19 +61,35 @@
</util:header> </util:header>
<%= view.getTopCustom() %> <%= view.getTopCustom() %>
<TABLE BORDER=0 WIDTH="100%" CELLPADDING=0 CELLSPACING=0> <table border="0" width="100%" cellpadding="0" cellspacing="0">
<TR VALIGN=BOTTOM> <tr valign="bottom">
<TD NOWRAP ALIGN=LEFT COLSPAN=2 CLASS="content"> <td nowrap="nowrap" align="left" colspan="2" class="content">
<util:call_jsp name="conf/posts_usercontrols.jsp"/> <util:call_jsp name="conf/posts_usercontrols.jsp"/>
</TD> </td>
</TR> </tr>
<% out.flush(); response.flushBuffer(); %> <% out.flush(); response.flushBuffer(); %>
<TR VALIGN=BOTTOM> <tr valign="bottom">
<TD>&nbsp;</TD> <td>&nbsp;</td>
<TD NOWRAP ALIGN=RIGHT CLASS="content"> <td nowrap="nowrap" align="right" class="content">
<util:comment>Topic admin controls section</util:comment> <util:comment>Topic admin controls section</util:comment>
<% if (my_topic.canFreeze()) { %> <% if (my_topic.canStick()) { %>
&nbsp;
<% if (my_topic.isSticky()) { %>
<util:xlink>
<util:href type="servlet">conf/stick_topic.js.vs?<%= topic_locator %>&flag=0</util:href>
<util:text><util:button id="unstick_topic"/></util:text>
</util:xlink>
<% } else { %>
<util:xlink>
<util:href type="servlet">conf/stick_topic.js.vs?<%= topic_locator %>&flag=1</util:href>
<util:text><util:button id="stick_topic"/></util:text>
</util:xlink>
<%
} // end if
} // end if
if (my_topic.canFreeze()) {
%>
&nbsp; &nbsp;
<% if (my_topic.isFrozen()) { %> <% if (my_topic.isFrozen()) { %>
<util:xlink> <util:xlink>
@ -106,25 +128,25 @@
<util:text><util:button id="delete_topic"/></util:text> <util:text><util:button id="delete_topic"/></util:text>
</util:xlink> </util:xlink>
<% } // end if %> <% } // end if %>
</TD> </td>
</TR> </tr>
<% out.flush(); response.flushBuffer(); %> <% out.flush(); response.flushBuffer(); %>
<TR VALIGN=BOTTOM> <tr valign="bottom">
<TD NOWRAP ALIGN=LEFT CLASS="content"> <td nowrap="nowrap" align="left" class="content">
<util:comment>Go box</util:comment> <util:comment>Go box</util:comment>
<util:form verb="GET" action="conf/posts.js.vs" type="servlet"><DIV CLASS="content"> <util:form verb="GET" action="conf/posts.js.vs" type="servlet"><div class="content">
<INPUT TYPE="HIDDEN" NAME="cc" VALUE="<%= my_comm.getCommunityID() %>"> <input type="hidden" name="cc" value="<%= my_comm.getCommunityID() %>" />
<INPUT TYPE="HIDDEN" NAME="conf" VALUE="<%= my_conf.getConfID() %>"> <input type="hidden" name="conf" value="<%= my_conf.getConfID() %>" />
<INPUT TYPE="HIDDEN" NAME="top" VALUE="<%= my_topicnum %>"> <input type="hidden" name="top" value="<%= my_topicnum %>" />
<SPAN CLASS="cinput"><INPUT TYPE="TEXT" CLASS="cinput" NAME="pxg" VALUE="" SIZE=6 <span class="cinput"><input type="text" class="cinput" name="pxg" value="" size="6"
MAXLENGTH=13></SPAN>&nbsp; maxlength="13"></span>&nbsp;
<util:button id="go" type="input"/> <util:button id="go" type="input"/>
</DIV></util:form> </div></util:form>
</TD> </td>
<TD NOWRAP ALIGN=RIGHT CLASS="content"><util:font color="content.fg" size="content"> <td nowrap="nowrap" align="right" class="content"><util:font color="content.fg" size="content">
<util:comment>Upper navigation linkset</util:comment> <util:comment>Upper navigation linkset</util:comment>
<A NAME="top">[</A>&nbsp; <a name="top">[</a>&nbsp;
<util:xlink> <util:xlink>
<util:href type="servlet">conf/posts.js.vs?<%= topic_locator %>&p1=0&p2=-1</util:href> <util:href type="servlet">conf/posts.js.vs?<%= topic_locator %>&p1=0&p2=-1</util:href>
<util:text>View All</util:text> <util:text>View All</util:text>
@ -157,12 +179,12 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
</util:xlink> </util:xlink>
<% } // end if %> <% } // end if %>
&nbsp;|&nbsp; &nbsp;|&nbsp;
<A HREF="#bottom">Bottom</A> <a href="#bottom">Bottom</a>
&nbsp;] &nbsp;]
</util:font></TD> </util:font></td>
</TR> </tr>
<TR VALIGN=MIDDLE> <tr valign="middle">
<TD ALIGN=CENTER COLSPAN=2><util:font color="content.fg" size="post-reference"> <td align="center" colspan="2"><util:font color="content.fg" size="post-reference">
<util:xlink> <util:xlink>
<util:href type="servlet"><%= view.getPageQID() %></util:href> <util:href type="servlet"><%= view.getPageQID() %></util:href>
<util:text>[Permalink to this topic]</util:text> <util:text>[Permalink to this topic]</util:text>
@ -172,27 +194,27 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
<util:href type="servlet"><%= view.getPageQID() %>.<%= my_first %>-<%= my_last %></util:href> <util:href type="servlet"><%= view.getPageQID() %>.<%= my_first %>-<%= my_last %></util:href>
<util:text>[Permalink to these posts]</util:text> <util:text>[Permalink to these posts]</util:text>
</util:xlink> </util:xlink>
</util:font></TD> </util:font></td>
</TR> </tr>
</TABLE> </table>
<% out.flush(); response.flushBuffer(); %> <% out.flush(); response.flushBuffer(); %>
<util:comment>Begin Actual Messages</util:comment> <util:comment>Begin Actual Messages</util:comment>
<% <%
Iterator it = view.getMessages().iterator();
String last_post = "shac=1&p1=" + String.valueOf(my_total_msg - 1); String last_post = "shac=1&p1=" + String.valueOf(my_total_msg - 1);
boolean can_line = false; boolean can_line = false;
while (it.hasNext()) { for (Iterator it=view.getMessages().iterator(); it.hasNext(); ) {
TopicMessageContext msg = (TopicMessageContext)(it.next()); TopicMessageContext msg = (TopicMessageContext)(it.next());
String poster = view.getPosterName(msg); String poster = view.getPosterName(msg);
if (can_line && (msg.getPostNumber()==(my_total_msg-my_unread))) { if (can_line && (msg.getPostNumber()==(my_total_msg-my_unread))) {
out.write("<HR WIDTH=\"70%\">\n"); out.write("<hr width=\"70%\" />\n");
} // end if } // end if
if (view.getShowAdvanced() && (view.getMessages().size()==1)) { if (view.getShowAdvanced() && (view.getMessages().size()==1)) {
%> %>
<BR> <br />
<TABLE WIDTH="100%" BORDER=0 CELLPADDING=0 CELLSPACING=0><TR VALIGN=TOP><TD NOWRAP ALIGN=LEFT CLASS="content"> <table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr valign="top"><td nowrap="nowrap" align="left" class="content">
<% } // end if %> <% } // end if %>
<util:font color="content.fg" size="content"> <util:font color="content.fg" size="content">
<% <%
@ -222,32 +244,32 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
<% <%
if (view.getShowAdvanced() && (view.getMessages().size()==1)) { if (view.getShowAdvanced() && (view.getMessages().size()==1)) {
if (msg.isHidden()) { if (msg.isHidden()) {
out.write("<B><EM>(Hidden)</EM></B>\n"); out.write("<b><i>(Hidden)</i></b>\n");
} // end if } // end if
if (view.showBozoFilteredIndicator(msg.getCreatorUID())) { if (view.showBozoFilteredIndicator(msg.getCreatorUID())) {
%> %>
<B><EM>(User filtered; <b><i>(User filtered;
<util:xlink> <util:xlink>
<util:href type="servlet"> <util:href type="servlet">
conf/message_bozo.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %>&flag=0 conf/message_bozo.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %>&flag=0
</util:href> </util:href>
<util:text>remove filter</util:text> <util:text>remove filter</util:text>
</util:xlink>) </util:xlink>)
</EM></B> </i></b>
<% <%
} // end if } // end if
} // end if } // end if
if (!(view.bozoFilterUser(msg.getCreatorUID()))) { if (!(view.bozoFilterUser(msg.getCreatorUID()))) {
%> %>
<BR> <br />
<B><%= msg.getPseud() %></B> <b><%= msg.getPseud() %></b>
(<EM> (<i>
<util:xlink target="_blank"> <util:xlink target="_blank">
<util:href type="servlet">user/<%= poster %></util:href> <util:href type="servlet">user/<%= poster %></util:href>
<util:text><%= poster %></util:text> <util:text><%= poster %></util:text>
</util:xlink>, </util:xlink>,
<%= view.formatDate(msg.getPostDate()) %> <%= view.formatDate(msg.getPostDate()) %>
</EM>) </i>)
<% if (msg.hasAttachment()) { %> <% if (msg.hasAttachment()) { %>
<util:xlink> <util:xlink>
<% if (view.displayAttachmentInNewWindow(msg)) { %> <% if (view.displayAttachmentInNewWindow(msg)) { %>
@ -272,15 +294,15 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
} // end if } // end if
%> %>
</util:font> </util:font>
<P> <p />
<% if (msg.isScribbled()) { %> <% if (msg.isScribbled()) { %>
<SPAN CLASS="post"><TT><EM><B> <span class="post"><tt><i><b>
(Scribbled by <%= view.getMessageBodyText(msg) %> on (Scribbled by <%= view.getMessageBodyText(msg) %> on
<%= view.formatDate(msg.getScribbleDate()) %>) <%= view.formatDate(msg.getScribbleDate()) %>)
</B></EM></TT></SPAN> </b></i></tt></SPAN>
<% if (view.getPhotoDims()!=null) { %><BR CLEAR=LEFT><% } %><P> <% if (view.getPhotoDims()!=null) { %><br clear="left" /><% } %><p />
<% } else if (view.bozoFilterUser(msg.getCreatorUID())) { %> <% } else if (view.bozoFilterUser(msg.getCreatorUID())) { %>
<SPAN CLASS="post"><TT><EM><B> <span class="post"><tt><i><b>
<util:xlink> <util:xlink>
<util:href type="servlet"> <util:href type="servlet">
conf/posts.js.vs?<%= topic_locator %>&shac=1&nbz=1&p1=<%= msg.getPostNumber() %> conf/posts.js.vs?<%= topic_locator %>&shac=1&nbz=1&p1=<%= msg.getPostNumber() %>
@ -290,9 +312,9 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
<%= msg.getNumLines() %> <% if (msg.getNumLines()==1) { %>Line<% } else { %>Lines<% } %>) <%= msg.getNumLines() %> <% if (msg.getNumLines()==1) { %>Line<% } else { %>Lines<% } %>)
</util:text> </util:text>
</util:xlink> </util:xlink>
</B></EM></TT></SPAN><P> </b></i></tt></span><p />
<% } else if (msg.isHidden() && (!(view.getShowAdvanced()) || (view.getMessages().size()!=1))) { %> <% } else if (msg.isHidden() && (!(view.getShowAdvanced()) || (view.getMessages().size()!=1))) { %>
<SPAN CLASS="post"><TT><EM><B> <span class="post"><tt><i><b>
<util:xlink> <util:xlink>
<util:href type="servlet"> <util:href type="servlet">
conf/posts.js.vs?<%= topic_locator %>&shac=1&p1=<%= msg.getPostNumber() %> conf/posts.js.vs?<%= topic_locator %>&shac=1&p1=<%= msg.getPostNumber() %>
@ -302,16 +324,16 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
<%= msg.getNumLines() %> <% if (msg.getNumLines()==1) { %>Line<% } else { %>Lines<% } %>) <%= msg.getNumLines() %> <% if (msg.getNumLines()==1) { %>Line<% } else { %>Lines<% } %>)
</util:text> </util:text>
</util:xlink> </util:xlink>
</B></EM></TT></SPAN> </b></i></tt></span>
<% if (view.getPhotoDims()!=null) { %><BR CLEAR=LEFT><% } %><P> <% if (view.getPhotoDims()!=null) { %><br clear="left" /><% } %><p />
<% } else { %> <% } else { %>
<TT><PRE CLASS="post"><post:rewrite><%= view.getMessageBodyText(msg) %></post:rewrite></PRE></TT> <tt><pre class="post"><post:rewrite><%= view.getMessageBodyText(msg) %></post:rewrite></pre></tt>
<% if (view.getPhotoDims()!=null) { %><BR CLEAR=LEFT><% } %><P> <% if (view.getPhotoDims()!=null) { %><br clear="left" /><% } %><p />
<% <%
} // end if } // end if
if (view.getShowAdvanced() && (view.getMessages().size()==1)) { if (view.getShowAdvanced() && (view.getMessages().size()==1)) {
%> %>
</TD><TD NOWRAP ALIGN=RIGHT CLASS="content"> </td><td nowrap="nowrap" align="right" class="content">
<% <%
if (!(msg.isScribbled())) { if (!(msg.isScribbled())) {
if (msg.canHide()) { if (msg.canHide()) {
@ -322,14 +344,14 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
conf/hide_message.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %>&flag=0 conf/hide_message.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %>&flag=0
</util:href> </util:href>
<util:text><util:button id="show"/></util:text> <util:text><util:button id="show"/></util:text>
</util:xlink><P> </util:xlink><p />
<% } else { %> <% } else { %>
<util:xlink> <util:xlink>
<util:href type="servlet"> <util:href type="servlet">
conf/hide_message.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %>&flag=1 conf/hide_message.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %>&flag=1
</util:href> </util:href>
<util:text><util:button id="hide"/></util:text> <util:text><util:button id="hide"/></util:text>
</util:xlink><P> </util:xlink><p />
<% <%
} // end if } // end if
} // end if (can hide) } // end if (can hide)
@ -340,7 +362,7 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
conf/scribble_message.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %> conf/scribble_message.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %>
</util:href> </util:href>
<util:text><util:button id="scribble"/></util:text> <util:text><util:button id="scribble"/></util:text>
</util:xlink><P> </util:xlink><p />
<% <%
} // end if (can scribble) } // end if (can scribble)
} // end if (not already scribbled) } // end if (not already scribbled)
@ -351,7 +373,7 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
conf/message_bozo.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %>&flag=1 conf/message_bozo.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %>&flag=1
</util:href> </util:href>
<util:text><util:button id="filter_user"/></util:text> <util:text><util:button id="filter_user"/></util:text>
</util:xlink><P> </util:xlink><p />
<% <%
} // end if (can bozo filter) } // end if (can bozo filter)
if (msg.canNuke()) { if (msg.canNuke()) {
@ -361,7 +383,7 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
conf/nuke_message.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %> conf/nuke_message.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %>
</util:href> </util:href>
<util:text><util:button id="nuke"/></util:text> <util:text><util:button id="nuke"/></util:text>
</util:xlink><P> </util:xlink><p />
<% <%
} // end if (can nuke) } // end if (can nuke)
if (msg.canMove() && (my_topic.getTotalMessages()>1)) { if (msg.canMove() && (my_topic.getTotalMessages()>1)) {
@ -371,7 +393,7 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
conf/move_message.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %> conf/move_message.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %>
</util:href> </util:href>
<util:text><util:button id="move"/></util:text> <util:text><util:button id="move"/></util:text>
</util:xlink><P> </util:xlink><p />
<% <%
} // end if (can move) } // end if (can move)
if (msg.canPublish()) { if (msg.canPublish()) {
@ -381,21 +403,21 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
conf/publish_message.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %> conf/publish_message.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %>
</util:href> </util:href>
<util:text><util:button id="publish"/></util:text> <util:text><util:button id="publish"/></util:text>
</util:xlink><P> </util:xlink><p />
<% } // end if (can publish) %> <% } // end if (can publish) %>
</TD></TR></TABLE><BR> </td></tr></table><br />
<% <%
} // end if (showing advanced controls) } // end if (showing advanced controls)
can_line = true; can_line = true;
out.flush(); out.flush();
response.flushBuffer(); response.flushBuffer();
} // end while } // end for
%> %>
<util:comment>End Actual Messages</util:comment> <util:comment>End Actual Messages</util:comment>
<TABLE BORDER=0 WIDTH="100%" CELLPADDING=0 CELLSPACING=0> <table border="0" width="100%" cellpadding="0" cellspacing="0">
<TR VALIGN=MIDDLE> <tr valign="middle">
<TD ALIGN=CENTER COLSPAN=2><util:font color="content.fg" size="post-reference"> <td align="center" colspan="2"><util:font color="content.fg" size="post-reference">
<util:xlink> <util:xlink>
<util:href type="servlet"><%= view.getPageQID() %></util:href> <util:href type="servlet"><%= view.getPageQID() %></util:href>
<util:text>[Permalink to this topic]</util:text> <util:text>[Permalink to this topic]</util:text>
@ -405,13 +427,13 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
<util:href type="servlet"><%= view.getPageQID() %>.<%= my_first %>-<%= my_last %></util:href> <util:href type="servlet"><%= view.getPageQID() %>.<%= my_first %>-<%= my_last %></util:href>
<util:text>[Permalink to these posts]</util:text> <util:text>[Permalink to these posts]</util:text>
</util:xlink> </util:xlink>
</util:font></TD> </util:font></td>
</TR> </tr>
<TR VALIGN=BOTTOM> <tr valign="bottom">
<TD NOWRAP ALIGN=LEFT>&nbsp;</TD> <td nowrap="nowrap" align="left">&nbsp;</td>
<TD NOWRAP ALIGN=RIGHT CLASS="content"><util:font color="content.fg" size="content"> <td nowrap="nowrap" align="right" class="content"><util:font color="content.fg" size="content">
<util:comment>Lower navigation linkset</util:comment> <util:comment>Lower navigation linkset</util:comment>
<A NAME="bottom">[</A>&nbsp; <a name="bottom">[</a>&nbsp;
<util:xlink> <util:xlink>
<util:href type="servlet">conf/posts.js.vs?<%= topic_locator %>&p1=0&p2=-1</util:href> <util:href type="servlet">conf/posts.js.vs?<%= topic_locator %>&p1=0&p2=-1</util:href>
<util:text>View All</util:text> <util:text>View All</util:text>
@ -442,18 +464,18 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
</util:xlink> </util:xlink>
<% } // end if %> <% } // end if %>
&nbsp;|&nbsp; &nbsp;|&nbsp;
<A HREF="#top">Top</A> <a href="#top">Top</a>
&nbsp;] &nbsp;]
</util:font></TD> </util:font></td>
</TR> </tr>
<% out.flush(); response.flushBuffer(); %> <% out.flush(); response.flushBuffer(); %>
<TR VALIGN=BOTTOM> <tr valign="bottom">
<TD NOWRAP ALIGN=LEFT COLSPAN=2 CLASS="content"> <td nowrap="nowrap" align="left" colspan="2" class="content">
<util:call_jsp name="conf/posts_usercontrols.jsp"/> <util:call_jsp name="conf/posts_usercontrols.jsp"/>
</TD> </td>
</TR> </tr>
</TABLE> </table>
<% out.flush(); response.flushBuffer(); %> <% out.flush(); response.flushBuffer(); %>
<% <%
@ -462,9 +484,9 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
final boolean flag3 = (my_topic.isArchived() ? my_topic.canArchive() : true); final boolean flag3 = (my_topic.isArchived() ? my_topic.canArchive() : true);
if (flag1 && flag2 && flag3) { if (flag1 && flag2 && flag3) {
%> %>
<HR><SPAN STYLE="font-size: 14pt;"><util:font color="content.fg" size="subhead"> <hr /><span style="font-size: 14pt;"><util:font color="content.fg" size="subhead">
<B>Post Message in &quot;<%= my_topic.getName() %>&quot;:</B> <b>Post Message in &quot;<%= my_topic.getName() %>&quot;:</b>
</util:font></SPAN><BR> </util:font></span><br />
<post:box action="conf/post_message.js.vs" type="servlet"> <post:box action="conf/post_message.js.vs" type="servlet">
<post:param name="cc"><%= my_comm.getCommunityID() %></post:param> <post:param name="cc"><%= my_comm.getCommunityID() %></post:param>
<post:param name="conf"><%= my_conf.getConfID() %></post:param> <post:param name="conf"><%= my_conf.getConfID() %></post:param>
@ -486,15 +508,15 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
} else if (my_conf.canPostToConference()) { } else if (my_conf.canPostToConference()) {
if (my_topic.isArchived()) { if (my_topic.isArchived()) {
%> %>
<DIV ALIGN=CENTER CLASS="content"><util:font color="content.fg" size="content"><B>This is an <div align="center" class="content"><util:font color="content.fg" size="content"><b>This is an
<EM>Archived</EM> Topic</B></util:font></DIV> <i>Archived</i> Topic</b></util:font></div>
<% } else if (my_topic.isFrozen()) { %> <% } else if (my_topic.isFrozen()) { %>
<DIV ALIGN=CENTER CLASS="content"><util:font color="content.fg" size="content"><B>This is a <div align="center" class="content"><util:font color="content.fg" size="content"><b>This is a
<EM>Frozen</EM> Topic</B></util:font></DIV> <i>Frozen</i> Topic</b></util:font></div>
<% <%
} // end if } // end if
} // end if } // end if
%> %>
<%= view.getBottomCustom() %> <%= view.getBottomCustom() %>
<% out.flush(); response.flushBuffer(); %> <% out.flush(); response.flushBuffer(); %>
<%-- EOF --%>

View File

@ -9,9 +9,9 @@
The Original Code is the Venice Web Communities System. The Original Code is the Venice Web Communities System.
The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>, The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
for Silverwrist Design Studios. Portions created by Eric J. Bowersox are for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. Copyright (C) 2001-2004 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
Contributor(s): Contributor(s):
--%> --%>
@ -51,7 +51,7 @@
<%= view.getRequestAttribute("conference.custom.top").toString() %> <%= view.getRequestAttribute("conference.custom.top").toString() %>
<util:font color="content.fg" size="content"> <util:font color="content.fg" size="content">
<DIV ALIGN="LEFT" CLASS="content"> <div align="left" class="content">
<util:xlink> <util:xlink>
<util:href type="servlet">conf/conferences.js.vs?<%= base_locator %></util:href> <util:href type="servlet">conf/conferences.js.vs?<%= base_locator %></util:href>
<util:text><util:button id="conf_list"/></util:text> <util:text><util:button id="conf_list"/></util:text>
@ -83,104 +83,106 @@
<util:text><util:button id="add_to_hotlist"/></util:text> <util:text><util:button id="add_to_hotlist"/></util:text>
</util:xlink>&nbsp; </util:xlink>&nbsp;
</conf:can_add_to_hotlist> </conf:can_add_to_hotlist>
<BR> <br />
<util:font color="content.fg" size="post-reference"><util:xlink> <util:font color="content.fg" size="post-reference"><util:xlink>
<util:href type="servlet"><%= view.getPageQID() %></util:href> <util:href type="servlet"><%= view.getPageQID() %></util:href>
<util:text>[Permalink to this conference]</util:text> <util:text>[Permalink to this conference]</util:text>
</util:xlink></util:font> </util:xlink></util:font>
</DIV> </div>
<% out.flush(); response.flushBuffer(); %> <% out.flush(); response.flushBuffer(); %>
<% final List topics = (List)(view.getRequestAttribute("topics.list")); %> <% final List topics = (List)(view.getRequestAttribute("topics.list")); %>
<% if (topics.size()>0) { %> <% if (topics.size()>0) { %>
<TABLE WIDTH="100%" BORDER=0 CELLPADDING=0 CELLSPACING=3> <table width="100%" border="0" cellpadding="0" cellspacing="3">
<TR VALIGN=TOP> <tr valign="top">
<TD ALIGN=LEFT WIDTH="1%" CLASS="content" NOWRAP><util:font color="content.fg" size="content"> <td align="left" width="1%" class="content" nowrap="nowrap"><util:font color="content.fg" size="content">
<B><util:xlink> <b><util:xlink>
<util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&sort=<%= ((sort_opt==SORT_NUMBER) ? -SORT_NUMBER : SORT_NUMBER) %></util:href> <util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&sort=<%= ((sort_opt==SORT_NUMBER) ? -SORT_NUMBER : SORT_NUMBER) %></util:href>
<util:text>#</util:text> <util:text>#</util:text>
</util:xlink></B>&nbsp;&nbsp; </util:xlink></b>&nbsp;&nbsp;
</util:font></TD> </util:font></td>
<TD ALIGN=LEFT CLASS="content"><util:font color="content.fg" size="content"> <td align="left" class="content"><util:font color="content.fg" size="content">
<B><util:xlink> <b><util:xlink>
<util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&sort=<%= ((sort_opt==SORT_NAME) ? -SORT_NAME : SORT_NAME) %></util:href> <util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&sort=<%= ((sort_opt==SORT_NAME) ? -SORT_NAME : SORT_NAME) %></util:href>
<util:text>Topic Name</util:text> <util:text>Topic Name</util:text>
</util:xlink></B> </util:xlink></b>
</util:font></TD> </util:font></td>
<TD ALIGN=RIGHT CLASS="content" NOWRAP><util:font color="content.fg" size="content"> <td align="right" class="content" nowrap="nowrap"><util:font color="content.fg" size="content">
<B><util:xlink> <b><util:xlink>
<util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&sort=<%= ((sort_opt==SORT_UNREAD) ? -SORT_UNREAD : SORT_UNREAD) %></util:href> <util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&sort=<%= ((sort_opt==SORT_UNREAD) ? -SORT_UNREAD : SORT_UNREAD) %></util:href>
<util:text>New</util:text> <util:text>New</util:text>
</util:xlink></B> </util:xlink></b>
</util:font></TD> </util:font></td>
<TD ALIGN=RIGHT CLASS="content" NOWRAP><util:font color="content.fg" size="content"> <td align="right" class="content" nowrap="nowrap"><util:font color="content.fg" size="content">
<B><util:xlink> <b><util:xlink>
<util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&sort=<%= ((sort_opt==SORT_TOTAL) ? -SORT_TOTAL : SORT_TOTAL) %></util:href> <util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&sort=<%= ((sort_opt==SORT_TOTAL) ? -SORT_TOTAL : SORT_TOTAL) %></util:href>
<util:text>Total</util:text> <util:text>Total</util:text>
</util:xlink></B> </util:xlink></b>
</util:font></TD> </util:font></td>
<TD ALIGN=LEFT CLASS="content" NOWRAP><util:font color="content.fg" size="content"> <td align="left" class="content" nowrap="nowrap"><util:font color="content.fg" size="content">
<B><util:xlink> <b><util:xlink>
<util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&sort=<%= ((sort_opt==SORT_DATE) ? -SORT_DATE : SORT_DATE) %></util:href> <util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&sort=<%= ((sort_opt==SORT_DATE) ? -SORT_DATE : SORT_DATE) %></util:href>
<util:text>Last Response</util:text> <util:text>Last Response</util:text>
</util:xlink></B> </util:xlink></b>
</util:font></TD> </util:font></td>
</TR> </tr>
<tr valign="top"><td align="left" colspan="5">&nbsp;</td></tr>
<% out.flush(); response.flushBuffer(); %> <% out.flush(); response.flushBuffer(); %>
<TR VALIGN=TOP><TD ALIGN=LEFT COLSPAN=5>&nbsp;</TD></TR>
<% <%
Iterator it = topics.iterator(); for (Iterator it=topics.iterator(); it.hasNext(); ) {
while (it.hasNext()) {
TopicContext topic = (TopicContext)(it.next()); TopicContext topic = (TopicContext)(it.next());
short num = topic.getTopicNumber(); short num = topic.getTopicNumber();
String my_locator = base_locator + "&top=" + num; String my_locator = base_locator + "&top=" + num;
%> %>
<TR VALIGN=TOP> <tr valign="top">
<TD ALIGN=LEFT WIDTH="1%" CLASS="content" NOWRAP><util:font color="content.fg" size="content"> <td align="left" width="1%" class="content" nowrap="nowrap"><util:font color="content.fg" size="content">
<util:xlink> <util:xlink>
<util:href type="servlet">conf/posts.js.vs?<%= my_locator %>&rnm=1</util:href> <util:href type="servlet">conf/posts.js.vs?<%= my_locator %>&rnm=1</util:href>
<util:text><%= num %></util:text> <util:text><%= num %></util:text>
</util:xlink>&nbsp;&nbsp; </util:xlink>&nbsp;&nbsp;
</util:font></TD> </util:font></td>
<TD ALIGN=LEFT CLASS="content"><util:font color="content.fg" size="content"> <td align="left" class="content"><util:font color="content.fg" size="content">
<util:xlink> <util:xlink>
<util:href type="servlet">conf/posts.js.vs?<%= my_locator %>&rnm=1</util:href> <util:href type="servlet">conf/posts.js.vs?<%= my_locator %>&rnm=1</util:href>
<util:text><%= topic.getName() %></util:text> <util:text><%= topic.getName() %></util:text>
</util:xlink> </util:xlink>
<% if (topic.isArchived() && (view_opt!=DISPLAY_ARCHIVED)) { %> <% if (topic.isSticky()) { %>
<EM>(archived)</EM> <i>(sticky)</i>
<% } else if (topic.isFrozen()) { %>
<EM>(frozen)</EM>
<% } // end if %> <% } // end if %>
</util:font></TD> <% if (topic.isArchived() && (view_opt!=DISPLAY_ARCHIVED)) { %>
<TD ALIGN=RIGHT CLASS="content" NOWRAP><util:font color="content.fg" size="content"> <i>(archived)</i>
<% } else if (topic.isFrozen()) { %>
<i>(frozen)</i>
<% } // end if %>
</util:font></td>
<td align="right" class="content" nowrap="nowrap"><util:font color="content.fg" size="content">
<util:xlink> <util:xlink>
<util:href type="servlet">conf/posts.js.vs?<%= my_locator %>&rnm=1</util:href> <util:href type="servlet">conf/posts.js.vs?<%= my_locator %>&rnm=1</util:href>
<util:text><%= topic.getUnreadMessages() %></util:text> <util:text><%= topic.getUnreadMessages() %></util:text>
</util:xlink> </util:xlink>
</util:font></TD> </util:font></td>
<TD ALIGN=RIGHT CLASS="content" NOWRAP><util:font color="content.fg" size="content"> <td align="right" class="content" nowrap="nowrap"><util:font color="content.fg" size="content">
<util:xlink> <util:xlink>
<util:href type="servlet">conf/posts.js.vs?<%= my_locator %>&p1=0&p2=-1</util:href> <util:href type="servlet">conf/posts.js.vs?<%= my_locator %>&p1=0&p2=-1</util:href>
<util:text><%= topic.getTotalMessages() %></util:text> <util:text><%= topic.getTotalMessages() %></util:text>
</util:xlink> </util:xlink>
</util:font></TD> </util:font></td>
<TD ALIGN=LEFT CLASS="content" NOWRAP><util:font color="content.fg" size="content"> <td align="left" class="content" nowrap="nowrap"><util:font color="content.fg" size="content">
<util:xlink> <util:xlink>
<util:href type="servlet">conf/posts.js.vs?<%= my_locator %>&rnm=1</util:href> <util:href type="servlet">conf/posts.js.vs?<%= my_locator %>&rnm=1</util:href>
<util:text><%= view.formatDate(topic.getLastUpdateDate()) %></util:text> <util:text><%= view.formatDate(topic.getLastUpdateDate()) %></util:text>
</util:xlink> </util:xlink>
</util:font></TD> </util:font></td>
</TR> </tr>
<% <%
out.flush(); out.flush();
response.flushBuffer(); response.flushBuffer();
} // end while (more topics in enumeration) } // end for (all topics in enumeration)
%> %>
</TABLE><P> </table><p />
<% } else { %> <% } else { %>
<EM><% <i><%
switch (view_opt) switch (view_opt)
{ {
case DISPLAY_NEW: case DISPLAY_NEW:
@ -200,58 +202,59 @@
out.write("Invalid display option selected."); out.write("Invalid display option selected.");
break; break;
} // end switch } // end switch
%></EM> %></i>
<P> <p />
<% } // end if %> <% } // end if %>
<% out.flush(); response.flushBuffer(); %> <% out.flush(); response.flushBuffer(); %>
<DIV ALIGN="CENTER" CLASS="content"> <div align="center" class="content">
<B>[</B> <b>[</b>
<% if (view_opt==DISPLAY_NEW) { %> <% if (view_opt==DISPLAY_NEW) { %>
<B>New</B> <b>New</b>
<% } else { %> <% } else { %>
<util:xlink> <util:xlink>
<util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&view=<%= DISPLAY_NEW %></util:href> <util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&view=<%= DISPLAY_NEW %></util:href>
<util:text>New</util:text> <util:text>New</util:text>
</util:xlink> </util:xlink>
<% } // end if %> <% } // end if %>
<B>|</B> <b>|</b>
<% if (view_opt==DISPLAY_ACTIVE) { %> <% if (view_opt==DISPLAY_ACTIVE) { %>
<B>Active</B> <b>Active</b>
<% } else { %> <% } else { %>
<util:xlink> <util:xlink>
<util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&view=<%= DISPLAY_ACTIVE %></util:href> <util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&view=<%= DISPLAY_ACTIVE %></util:href>
<util:text>Active</util:text> <util:text>Active</util:text>
</util:xlink> </util:xlink>
<% } // end if %> <% } // end if %>
<B>|</B> <b>|</b>
<% if (view_opt==DISPLAY_ALL) { %> <% if (view_opt==DISPLAY_ALL) { %>
<B>All</B> <b>All</b>
<% } else { %> <% } else { %>
<util:xlink> <util:xlink>
<util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&view=<%= DISPLAY_ALL %></util:href> <util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&view=<%= DISPLAY_ALL %></util:href>
<util:text>All</util:text> <util:text>All</util:text>
</util:xlink> </util:xlink>
<% } // end if %> <% } // end if %>
<B>|</B> <b>|</b>
<% if (view_opt==DISPLAY_HIDDEN) { %> <% if (view_opt==DISPLAY_HIDDEN) { %>
<B>Hidden</B> <b>Hidden</b>
<% } else { %> <% } else { %>
<util:xlink> <util:xlink>
<util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&view=<%= DISPLAY_HIDDEN %></util:href> <util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&view=<%= DISPLAY_HIDDEN %></util:href>
<util:text>Hidden</util:text> <util:text>Hidden</util:text>
</util:xlink> </util:xlink>
<% } // end if %> <% } // end if %>
<B>|</B> <b>|</b>
<% if (view_opt==DISPLAY_ARCHIVED) { %> <% if (view_opt==DISPLAY_ARCHIVED) { %>
<B>Archived</B> <b>Archived</b>
<% } else { %> <% } else { %>
<util:xlink> <util:xlink>
<util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&view=<%= DISPLAY_ARCHIVED %></util:href> <util:href type="servlet">conf/topics.js.vs?<%= base_locator %>&view=<%= DISPLAY_ARCHIVED %></util:href>
<util:text>Archived</util:text> <util:text>Archived</util:text>
</util:xlink> </util:xlink>
<% } // end if %> <% } // end if %>
<B>]</B> <b>]</b>
</DIV> </div>
</util:font> </util:font>
<%= view.getRequestAttribute("conference.custom.bottom").toString() %> <%= view.getRequestAttribute("conference.custom.bottom").toString() %>
<%-- EOF --%>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB