implement move message between topics in a conference
This commit is contained in:
parent
25c5817a67
commit
a404987a42
|
@ -172,6 +172,7 @@
|
||||||
<button id="join_now" caption="Join Now" fixup="true">classic/join_now.jpg</button>
|
<button id="join_now" caption="Join Now" fixup="true">classic/join_now.jpg</button>
|
||||||
<button id="login" caption="Log In" fixup="true">classic/login.jpg</button>
|
<button id="login" caption="Log In" fixup="true">classic/login.jpg</button>
|
||||||
<button id="manage" caption="Manage" fixup="true">classic/manage.jpg</button>
|
<button id="manage" caption="Manage" fixup="true">classic/manage.jpg</button>
|
||||||
|
<button id="move" caption="Move" fixup="true">classic/move.jpg</button>
|
||||||
<button id="next" caption="Next" fixup="true">classic/arrow_next.jpg</button>
|
<button id="next" caption="Next" fixup="true">classic/arrow_next.jpg</button>
|
||||||
<button id="next_topic" caption="Next Topic" fixup="true">classic/next_topic.jpg</button>
|
<button id="next_topic" caption="Next Topic" fixup="true">classic/next_topic.jpg</button>
|
||||||
<button id="next_topic_keep" caption="Next & Keep New"
|
<button id="next_topic_keep" caption="Next & Keep New"
|
||||||
|
@ -229,6 +230,7 @@
|
||||||
<button id="join_now" caption="Join Now" fixup="true">gelcap/join_now.jpg</button>
|
<button id="join_now" caption="Join Now" fixup="true">gelcap/join_now.jpg</button>
|
||||||
<button id="login" caption="Log In" fixup="true">gelcap/login.jpg</button>
|
<button id="login" caption="Log In" fixup="true">gelcap/login.jpg</button>
|
||||||
<button id="manage" caption="Manage" fixup="true">gelcap/manage.jpg</button>
|
<button id="manage" caption="Manage" fixup="true">gelcap/manage.jpg</button>
|
||||||
|
<button id="move" caption="Move" fixup="true">gelcap/move.jpg</button>
|
||||||
<button id="next" caption="Next" fixup="true">gelcap/arrow_next.jpg</button>
|
<button id="next" caption="Next" fixup="true">gelcap/arrow_next.jpg</button>
|
||||||
<button id="next_topic" caption="Next Topic" fixup="true">gelcap/next_topic.jpg</button>
|
<button id="next_topic" caption="Next Topic" fixup="true">gelcap/next_topic.jpg</button>
|
||||||
<button id="next_topic_keep" caption="Next & Keep New" fixup="true">gelcap/next_keep_new.jpg</button>
|
<button id="next_topic_keep" caption="Next & Keep New" fixup="true">gelcap/next_keep_new.jpg</button>
|
||||||
|
|
134
scripts/conf/move_message.js
Normal file
134
scripts/conf/move_message.js
Normal file
|
@ -0,0 +1,134 @@
|
||||||
|
// The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||||
|
// (the "License"); you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
|
||||||
|
//
|
||||||
|
// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||||
|
// WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||||
|
// language governing rights and limitations under the License.
|
||||||
|
//
|
||||||
|
// The Original Code is the Venice Web Communities System.
|
||||||
|
//
|
||||||
|
// The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
// for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
// Copyright (C) 2002 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);
|
||||||
|
|
||||||
|
// get the message under consideration
|
||||||
|
msg = currc.getTopicMessageParam("msg",true,"conf/posts.js.vs?cc=" + comm.communityID + "&conf="
|
||||||
|
+ conf.confID + "&top=" + topic.topicNumber);
|
||||||
|
on_error = "conf/posts.js.vs?cc=" + comm.communityID + "&conf=" + conf.confID + "&top=" + topic.topicNumber
|
||||||
|
+ "&p1=" + msg.getPostNumber() + "&shac=1";
|
||||||
|
|
||||||
|
if ("GET"==rinput.verb)
|
||||||
|
{ // set up the prompt for which topic to move the post to
|
||||||
|
rinput.setRequestAttribute("message.move.message",msg);
|
||||||
|
poster = "";
|
||||||
|
try
|
||||||
|
{ // get the poster name
|
||||||
|
poster = msg.creatorName;
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (foo)
|
||||||
|
{ // we hit a DataException here
|
||||||
|
poster = "(unknown)";
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
rinput.setRequestAttribute("message.move.postername",poster);
|
||||||
|
|
||||||
|
rc = null;
|
||||||
|
try
|
||||||
|
{ // get the list of topics in the conference
|
||||||
|
in_list = vlib.castList(conf.getTopicList(ConferenceContext.GET_ALL,ConferenceContext.SORT_NAME));
|
||||||
|
out_list = vlib.createList();
|
||||||
|
it = in_list.iterator();
|
||||||
|
while (it.hasNext())
|
||||||
|
{ // add all topic names to the list EXCEPT the current one
|
||||||
|
xtopic = vlib.castTopicContext(it.next());
|
||||||
|
if (xtopic.topicID!=topic.topicID)
|
||||||
|
out_list.add(xtopic);
|
||||||
|
|
||||||
|
} // end while
|
||||||
|
|
||||||
|
rinput.setRequestAttribute("message.move.topics",out_list);
|
||||||
|
|
||||||
|
// create the actual view and output it
|
||||||
|
rc = new JSPView("Move Message","conf/move_message.jsp");
|
||||||
|
rc.menuSelector = Content.MENU_SELECTOR_COMMUNITY;
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (e)
|
||||||
|
{ // handle the exception here
|
||||||
|
etype = vlib.exceptionType(e) + "";
|
||||||
|
if (etype.match("DataException"))
|
||||||
|
rc = new ErrorBox("Database Error","Database error listing messages: " + 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);
|
||||||
|
vlib.done();
|
||||||
|
|
||||||
|
} // end if ("GET" request)
|
||||||
|
|
||||||
|
if (rinput.isImageButtonClicked("cancel"))
|
||||||
|
{ // Cancel button pressed - bounce back to the message
|
||||||
|
vlib.output(new Redirect(on_error,LinkTypes.SERVLET));
|
||||||
|
vlib.done();
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
if (!(rinput.isImageButtonClicked("move")))
|
||||||
|
{ // invalid command button pressed
|
||||||
|
logger.error("no known button click on POST to conf/move_message.js");
|
||||||
|
vlib.output(new ErrorBox("Internal Error","Invalid command button pressed.",on_error));
|
||||||
|
vlib.done();
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
rc = null;
|
||||||
|
try
|
||||||
|
{ // move the message!
|
||||||
|
topic_id = rinput.getParameterInt("target",-1);
|
||||||
|
msg.moveToTopic(topic_id);
|
||||||
|
|
||||||
|
// bounce to the topic we moved from
|
||||||
|
rc = new Redirect("conf/posts.js.vs?cc=" + comm.communityID + "&conf=" + conf.confID + "&top="
|
||||||
|
+ topic.topicNumber,LinkTypes.SERVLET);
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (e)
|
||||||
|
{ // handle the exception
|
||||||
|
etype = vlib.exceptionType(e) + "";
|
||||||
|
if (etype.match("DataException"))
|
||||||
|
rc = new ErrorBox("Database Error","Database error moving message: " + 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...
|
|
@ -492,6 +492,7 @@ INSERT INTO refaudit (type, descr) VALUES
|
||||||
(313, 'Nuke Message'),
|
(313, 'Nuke Message'),
|
||||||
(314, 'Upload Message Attachment'),
|
(314, 'Upload Message Attachment'),
|
||||||
(315, 'Delete Conference'),
|
(315, 'Delete Conference'),
|
||||||
|
(316, 'Move Message'),
|
||||||
(9999999, 'DUMMY');
|
(9999999, 'DUMMY');
|
||||||
|
|
||||||
# Populate the Category table.
|
# Populate the Category table.
|
||||||
|
|
|
@ -85,4 +85,8 @@ public interface TopicMessageContext
|
||||||
|
|
||||||
public abstract String getPostLink() throws DataException;
|
public abstract String getPostLink() throws DataException;
|
||||||
|
|
||||||
|
public abstract void moveToTopic(int newtopicid) throws DataException, AccessError;
|
||||||
|
|
||||||
|
public abstract boolean canMove();
|
||||||
|
|
||||||
} // end interface TopicMessageContext
|
} // end interface TopicMessageContext
|
||||||
|
|
|
@ -1087,6 +1087,194 @@ class TopicMessageUserContextImpl implements TopicMessageContext
|
||||||
|
|
||||||
} // end getPostLink
|
} // end getPostLink
|
||||||
|
|
||||||
|
public void moveToTopic(int newtopicid) throws DataException, AccessError
|
||||||
|
{
|
||||||
|
if (!(env.getConference().userCanNuke()) || !(env.getConference().userCanPost()))
|
||||||
|
{ // we must have both Nuke and Post privileges in this conference to be able to move
|
||||||
|
logger.error("trying to move post w/o permission!");
|
||||||
|
throw new AccessError("You are not permitted to move this message to another topic.");
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
if (newtopicid==topicid)
|
||||||
|
return; // attempting to move to the same topic is a no-op
|
||||||
|
|
||||||
|
if (nuked)
|
||||||
|
{ // we can't move a nuked message!
|
||||||
|
logger.error("unable to move message because message nuked");
|
||||||
|
throw new DataException("Cannot move a message that has been nuked.");
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
if (scribble_date!=null)
|
||||||
|
{ // we can't move a scribbled message!
|
||||||
|
logger.error("unable to move because message scribbled");
|
||||||
|
throw new DataException("Cannot move a message that has been scribbled.");
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
Connection conn = null;
|
||||||
|
AuditRecord ar = null;
|
||||||
|
ArrayList mailto_addrs = null;
|
||||||
|
int new_topic_num = -1;
|
||||||
|
String new_topic_name = null, my_text = null;
|
||||||
|
ResultSet rs;
|
||||||
|
StringBuffer sql = new StringBuffer();
|
||||||
|
|
||||||
|
try
|
||||||
|
{ // get a database connection
|
||||||
|
conn = env.getConnection();
|
||||||
|
Statement stmt = conn.createStatement();
|
||||||
|
|
||||||
|
// lock the tables we reference
|
||||||
|
stmt.executeUpdate("LOCK TABLES confs WRITE, topics WRITE, posts WRITE, topicsettings READ;");
|
||||||
|
|
||||||
|
ArrayList mailto_uids = null;
|
||||||
|
int old_topicid;
|
||||||
|
|
||||||
|
try
|
||||||
|
{ // verify that we're not trying to move post 0 when that's the only one that exists
|
||||||
|
if (num==0)
|
||||||
|
{ // if we're moving post 0, check the number of posts in the topic
|
||||||
|
rs = stmt.executeQuery("SELECT top_message FROM topics WHERE topicid = " + topicid + ";");
|
||||||
|
if (!(rs.next()))
|
||||||
|
throw new InternalStateError("unable to get current message's topic?!?!?");
|
||||||
|
if (rs.getInt(1)==0)
|
||||||
|
throw new DataException("You cannot move the only message out of a topic.");
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
// verify that the target topic exists
|
||||||
|
rs = stmt.executeQuery("SELECT confid, num, top_message, name FROM topics WHERE topicid = "
|
||||||
|
+ newtopicid + ";");
|
||||||
|
if (!(rs.next()))
|
||||||
|
throw new DataException("The specified topic to move the message to does not exist.");
|
||||||
|
if (env.getConfID()!=rs.getInt(1))
|
||||||
|
throw new AccessError("The topic to move the message to must be within the same conference.");
|
||||||
|
int newconfid = rs.getInt(1);
|
||||||
|
new_topic_num = rs.getInt(2);
|
||||||
|
int new_post_num = rs.getInt(3) + 1;
|
||||||
|
new_topic_name = rs.getString(4);
|
||||||
|
|
||||||
|
// save off the old parent, topic ID, and old post number
|
||||||
|
long old_parent = parent;
|
||||||
|
old_topicid = topicid;
|
||||||
|
int old_post_num = num;
|
||||||
|
|
||||||
|
// adjust the post record in the database so it's part of the new topic
|
||||||
|
sql.append("UPDATE posts SET parent = 0, topicid = ").append(newtopicid).append(", num = ");
|
||||||
|
sql.append(new_post_num).append(" WHERE postid = ").append(postid).append(';');
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("SQL: " + sql.toString());
|
||||||
|
stmt.executeUpdate(sql.toString());
|
||||||
|
parent = 0;
|
||||||
|
topicid = newtopicid;
|
||||||
|
num = new_post_num;
|
||||||
|
|
||||||
|
// Touch the topic values to reflect the added post.
|
||||||
|
sql.setLength(0);
|
||||||
|
java.util.Date now = new java.util.Date();
|
||||||
|
sql.append("UPDATE topics SET top_message = ").append(new_post_num).append(", lastupdate = '");
|
||||||
|
sql.append(SQLUtil.encodeDate(now)).append("' WHERE topicid = ").append(newtopicid).append(';');
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("SQL: " + sql.toString());
|
||||||
|
stmt.executeUpdate(sql.toString());
|
||||||
|
|
||||||
|
// Now we have to renumber the remaining posts in the "old" topic, just as if the post had been
|
||||||
|
// nuked rather than moved.
|
||||||
|
// -----
|
||||||
|
// Phase 1 of renumber - Renumber all posts IN THIS TOPIC that had a number higher than the one
|
||||||
|
// we just shifted over.
|
||||||
|
stmt.executeUpdate("UPDATE posts SET num = (num - 1) WHERE topicid = " + old_topicid + " AND num > "
|
||||||
|
+ old_post_num + ";");
|
||||||
|
|
||||||
|
// Phase 2 of renumber - The topic now has one less post in it. Reflect that.
|
||||||
|
stmt.executeUpdate("UPDATE topics SET top_message = (top_message - 1) WHERE topicid = "
|
||||||
|
+ old_topicid + ";");
|
||||||
|
|
||||||
|
// Also reparent any posts that had this one as a parent.
|
||||||
|
stmt.executeUpdate("UPDATE posts SET parent = " + old_parent + " WHERE parent = " + postid + ";");
|
||||||
|
|
||||||
|
// Touch the "conference updated" indicator.
|
||||||
|
env.getConference().touchUpdate(conn,now);
|
||||||
|
|
||||||
|
// Who's subscribed to the new topic? Whoever it is, they need to get this post via E-mail.
|
||||||
|
sql.setLength(0);
|
||||||
|
sql.append("SELECT uid FROM topicsettings WHERE topicid = ").append(newtopicid);
|
||||||
|
sql.append(" AND subscribe = 1;");
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("SQL: " + sql.toString());
|
||||||
|
rs = stmt.executeQuery(sql.toString());
|
||||||
|
while (rs.next())
|
||||||
|
{ // load the UIDs here
|
||||||
|
if (mailto_uids==null)
|
||||||
|
mailto_uids = new ArrayList();
|
||||||
|
mailto_uids.add(new Integer(rs.getInt(1)));
|
||||||
|
|
||||||
|
} // end while
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
finally
|
||||||
|
{ // unlock the tables before we go
|
||||||
|
Statement ulk_stmt = conn.createStatement();
|
||||||
|
ulk_stmt.executeUpdate("UNLOCK TABLES;");
|
||||||
|
|
||||||
|
} // end finally
|
||||||
|
|
||||||
|
// record what we did in an audit record
|
||||||
|
ar = env.newAudit(AuditRecord.MOVE_MESSAGE,"conf=" + env.getConfID() + ",post=" + postid,
|
||||||
|
"fromtopic=" + old_topicid,"totopic=" + newtopicid);
|
||||||
|
|
||||||
|
if (mailto_uids!=null)
|
||||||
|
{ // We need to translate the "mailto" UIDs to E-mail addresses while we still have the database open!
|
||||||
|
mailto_addrs = new ArrayList(mailto_uids.size());
|
||||||
|
sql.setLength(0);
|
||||||
|
sql.append("SELECT c.email FROM users u, contacts c WHERE u.contactid = c.contactid AND u.uid ");
|
||||||
|
if (mailto_uids.size()==1)
|
||||||
|
sql.append("= ").append(mailto_uids.get(0)).append(';');
|
||||||
|
else
|
||||||
|
sql.append("IN (").append(StringUtil.join(mailto_uids,", ")).append(");");
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
logger.debug("SQL: " + sql.toString());
|
||||||
|
rs = stmt.executeQuery(sql.toString());
|
||||||
|
while (rs.next())
|
||||||
|
mailto_addrs.add(rs.getString(1));
|
||||||
|
|
||||||
|
// also load the message's text for E-mailing
|
||||||
|
my_text = this.getBodyText();
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (SQLException e)
|
||||||
|
{ // just trap SQL exceptions and log them
|
||||||
|
logger.error("unable to move message: " + e.getMessage(),e);
|
||||||
|
throw new DataException("unable to move message: " + e.getMessage(),e);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
finally
|
||||||
|
{ // make sure we release the connection before we go
|
||||||
|
AuditRecord.store(conn,ar);
|
||||||
|
env.releaseConnection(conn);
|
||||||
|
|
||||||
|
} // end finally
|
||||||
|
|
||||||
|
if (mailto_addrs!=null)
|
||||||
|
{ // spin off a background thread to generate the E-mails
|
||||||
|
PostDeliveryAgent agent = new PostDeliveryAgent(env,my_text,pseud,new_topic_name,new_topic_num,
|
||||||
|
mailto_addrs);
|
||||||
|
agent.start();
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end moveToTopic
|
||||||
|
|
||||||
|
public boolean canMove()
|
||||||
|
{
|
||||||
|
return (env.getConference().userCanNuke() && env.getConference().userCanPost());
|
||||||
|
|
||||||
|
} // end canMove
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* External static operations
|
* External static operations
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
|
|
@ -67,5 +67,6 @@ public interface Audit
|
||||||
public static final int NUKE_MESSAGE = 313;
|
public static final int NUKE_MESSAGE = 313;
|
||||||
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;
|
||||||
|
|
||||||
} // end interface Audit
|
} // end interface Audit
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
*
|
*
|
||||||
* 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@silcom.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-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Contributor(s):
|
* Contributor(s):
|
||||||
*/
|
*/
|
||||||
|
@ -27,7 +27,7 @@ import com.silverwrist.venice.ui.*;
|
||||||
public class FrameContentHereTag extends VeniceTagSupport
|
public class FrameContentHereTag extends VeniceTagSupport
|
||||||
{
|
{
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Overrides from class TagSupport
|
* Static data members
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
86
src/com/silverwrist/venice/ui/jsp/UtilCallJSPTag.java
Normal file
86
src/com/silverwrist/venice/ui/jsp/UtilCallJSPTag.java
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
/*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||||
|
* (the "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||||
|
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||||
|
* language governing rights and limitations under the License.
|
||||||
|
*
|
||||||
|
* The Original Code is the Venice Web Communities System.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
* Copyright (C) 2002 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.ui.jsp;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.jsp.*;
|
||||||
|
import javax.servlet.jsp.tagext.*;
|
||||||
|
import com.silverwrist.venice.ui.*;
|
||||||
|
import com.silverwrist.venice.ui.view.NestedJSPView;
|
||||||
|
|
||||||
|
public class UtilCallJSPTag extends VeniceTagSupport
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private String name = null;
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Overrides from class TagSupport
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public int doStartTag() throws JspException
|
||||||
|
{
|
||||||
|
if (name==null)
|
||||||
|
throw new JspTagException("<call_jsp/> tag specified without a JSP name");
|
||||||
|
|
||||||
|
try
|
||||||
|
{ // do what we came here to accomplish
|
||||||
|
JspWriter out = pageContext.getOut();
|
||||||
|
out.flush();
|
||||||
|
getRequestOutput().output(out,new NestedJSPView(getContent(),name));
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (IOException e)
|
||||||
|
{ // convert the I/O error into something the servlet engine can deal with
|
||||||
|
throw new JspTagException("error writing comment start - " + e.getMessage());
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (ServletException se)
|
||||||
|
{ // convert the servlet exception into something we can deal with, too
|
||||||
|
throw new JspTagException("Servlet error writing frame content - " + se.getMessage());
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
return SKIP_BODY;
|
||||||
|
|
||||||
|
} // end doStartTag
|
||||||
|
|
||||||
|
public void release()
|
||||||
|
{
|
||||||
|
super.release();
|
||||||
|
name = null;
|
||||||
|
|
||||||
|
} // end release
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attribute set functions
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void setName(String s)
|
||||||
|
{
|
||||||
|
name = s;
|
||||||
|
|
||||||
|
} // end setName
|
||||||
|
|
||||||
|
} // end class UtilCallJSPTag
|
|
@ -93,6 +93,14 @@ public class ScriptLibrary
|
||||||
|
|
||||||
} // end castSideBoxDescriptor
|
} // end castSideBoxDescriptor
|
||||||
|
|
||||||
|
public final TopicContext castTopicContext(Object o)
|
||||||
|
{
|
||||||
|
if (o instanceof TopicContext)
|
||||||
|
return (TopicContext)o;
|
||||||
|
throw new ClassCastException("ScriptLibrary.castTopicContext: invalid cast");
|
||||||
|
|
||||||
|
} // end castTopicContext
|
||||||
|
|
||||||
public final TopicMessageContext castTopicMessageContext(Object o)
|
public final TopicMessageContext castTopicMessageContext(Object o)
|
||||||
{
|
{
|
||||||
if (o instanceof TopicMessageContext)
|
if (o instanceof TopicMessageContext)
|
||||||
|
|
163
src/com/silverwrist/venice/ui/view/NestedJSPView.java
Normal file
163
src/com/silverwrist/venice/ui/view/NestedJSPView.java
Normal file
|
@ -0,0 +1,163 @@
|
||||||
|
/*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||||
|
* (the "License"); you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
|
||||||
|
*
|
||||||
|
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||||
|
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||||
|
* language governing rights and limitations under the License.
|
||||||
|
*
|
||||||
|
* The Original Code is the Venice Web Communities System.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
* Copyright (C) 2002 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.ui.view;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import javax.servlet.*;
|
||||||
|
import com.silverwrist.venice.core.CommunityContext;
|
||||||
|
import com.silverwrist.venice.ui.*;
|
||||||
|
import com.silverwrist.venice.ui.servlet.RequestImpl;
|
||||||
|
|
||||||
|
public class NestedJSPView implements ContentJSP
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private Content outer;
|
||||||
|
private String jspname;
|
||||||
|
private RequestInput rinput = null;
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructor
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public NestedJSPView(Content outer, String jspname)
|
||||||
|
{
|
||||||
|
this.outer = outer;
|
||||||
|
this.jspname = jspname;
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface Content
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public boolean needFrame()
|
||||||
|
{
|
||||||
|
return outer.needFrame();
|
||||||
|
|
||||||
|
} // end needFrame
|
||||||
|
|
||||||
|
public int getMenuSelector()
|
||||||
|
{
|
||||||
|
return outer.getMenuSelector();
|
||||||
|
|
||||||
|
} // end getMenuSelector
|
||||||
|
|
||||||
|
public String getPageTitle(RequestOutput ro)
|
||||||
|
{
|
||||||
|
return outer.getPageTitle(ro);
|
||||||
|
|
||||||
|
} // end getPageTitle
|
||||||
|
|
||||||
|
public String getPageQID()
|
||||||
|
{
|
||||||
|
return outer.getPageQID();
|
||||||
|
|
||||||
|
} // end getPageQID
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface ContentJSP
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public String getJSPName()
|
||||||
|
{
|
||||||
|
return jspname;
|
||||||
|
|
||||||
|
} // end getJSPName
|
||||||
|
|
||||||
|
public void initialize(RequestInput req)
|
||||||
|
{
|
||||||
|
rinput = req;
|
||||||
|
|
||||||
|
} // end initialize
|
||||||
|
|
||||||
|
public void terminate(RequestInput req)
|
||||||
|
{
|
||||||
|
rinput = null;
|
||||||
|
|
||||||
|
} // end terminate
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External operations
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public final Content getOuterView()
|
||||||
|
{
|
||||||
|
return outer;
|
||||||
|
|
||||||
|
} // end getOuterView
|
||||||
|
|
||||||
|
public final Object getRequestAttribute(String s)
|
||||||
|
{
|
||||||
|
return ((rinput==null) ? null : rinput.getRequestAttribute(s));
|
||||||
|
|
||||||
|
} // end getRequestAttribute
|
||||||
|
|
||||||
|
public final String formatDate(Date date)
|
||||||
|
{
|
||||||
|
return ((rinput==null) ? null : rinput.formatDate(date));
|
||||||
|
|
||||||
|
} // end formatDate
|
||||||
|
|
||||||
|
public final CommunityContext getCommunity()
|
||||||
|
{
|
||||||
|
return ((rinput==null) ? null : rinput.getCommunity());
|
||||||
|
|
||||||
|
} // end getCommunity
|
||||||
|
|
||||||
|
public final String getActivityString(Date date)
|
||||||
|
{
|
||||||
|
return ((rinput==null) ? null : rinput.getActivityString(date));
|
||||||
|
|
||||||
|
} // end getActivityString
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External static operations
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static final NestedJSPView get(ServletRequest sreq) throws ServletException
|
||||||
|
{
|
||||||
|
Object obj = sreq.getAttribute(RequestImpl.REQUEST_CONTENT);
|
||||||
|
if (obj==null)
|
||||||
|
throw new ServletException("NestedJSPView.get: unable to get request content");
|
||||||
|
if (obj instanceof NestedJSPView)
|
||||||
|
return (NestedJSPView)obj;
|
||||||
|
throw new ServletException("NestedJSPView.get: request content is not a NestedJSPView object");
|
||||||
|
|
||||||
|
} // end get
|
||||||
|
|
||||||
|
public static final RequestOutput getRequestOutput(ServletRequest sreq) throws ServletException
|
||||||
|
{
|
||||||
|
Object obj = sreq.getAttribute(RequestImpl.REQUEST_OUTPUT);
|
||||||
|
if (obj==null)
|
||||||
|
throw new ServletException("NestedJSPView.getRequestOutput: unable to get request object");
|
||||||
|
if (obj instanceof RequestOutput)
|
||||||
|
return (RequestOutput)obj;
|
||||||
|
throw new ServletException("NestedJSPView.getRequestOutput: request object is not a RequestOutput object");
|
||||||
|
|
||||||
|
} // end getRequestOutput
|
||||||
|
|
||||||
|
} // end class NestedJSPView
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
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@silcom.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-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
|
||||||
Contributor(s):
|
Contributor(s):
|
||||||
-->
|
-->
|
||||||
|
@ -365,4 +365,16 @@
|
||||||
<bodycontent>JSP</bodycontent>
|
<bodycontent>JSP</bodycontent>
|
||||||
</tag>
|
</tag>
|
||||||
|
|
||||||
|
<tag>
|
||||||
|
<name>call_jsp</name>
|
||||||
|
<tagclass>com.silverwrist.venice.ui.jsp.UtilCallJSPTag</tagclass>
|
||||||
|
<info>Calls another JSP page from within this one.</info>
|
||||||
|
<bodycontent>EMPTY</bodycontent>
|
||||||
|
<attribute>
|
||||||
|
<name>name</name>
|
||||||
|
<required>true</required>
|
||||||
|
<rtexprvalue>false</rtexprvalue>
|
||||||
|
</attribute>
|
||||||
|
</tag>
|
||||||
|
|
||||||
</taglib>
|
</taglib>
|
||||||
|
|
65
web/format/conf/move_message.jsp
Normal file
65
web/format/conf/move_message.jsp
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
<%--
|
||||||
|
The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||||
|
(the "License"); you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
|
||||||
|
|
||||||
|
Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||||
|
WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||||
|
language governing rights and limitations under the License.
|
||||||
|
|
||||||
|
The Original Code is the Venice Web Communities System.
|
||||||
|
|
||||||
|
The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
Copyright (C) 2002 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
|
||||||
|
Contributor(s):
|
||||||
|
--%>
|
||||||
|
<%@ page import = "java.util.*" %>
|
||||||
|
<%@ page import = "com.silverwrist.venice.core.*" %>
|
||||||
|
<%@ page import = "com.silverwrist.venice.ui.conf.CurrentConference" %>
|
||||||
|
<%@ page import = "com.silverwrist.venice.ui.view.JSPView" %>
|
||||||
|
<%@ taglib uri="/tlds/util" prefix="util" %>
|
||||||
|
<%@ taglib uri="/tlds/community" prefix="comm" %>
|
||||||
|
<%@ taglib uri="/tlds/conference" prefix="conf" %>
|
||||||
|
<%@ taglib uri="/tlds/topic" prefix="topic" %>
|
||||||
|
<%
|
||||||
|
JSPView view = JSPView.get(request);
|
||||||
|
CurrentConference currc = CurrentConference.get(request);
|
||||||
|
TopicMessageContext msg = (TopicMessageContext)(view.getRequestAttribute("message.move.message"));
|
||||||
|
final String poster = view.getRequestAttribute("message.move.postername").toString();
|
||||||
|
final List targets = (List)(view.getRequestAttribute("message.move.topics"));
|
||||||
|
%>
|
||||||
|
<util:comment>Moving message #<%= msg.getPostID() %> to another topic</util:comment>
|
||||||
|
<util:header title="Move Message"/>
|
||||||
|
<util:font color="content.fg" size="content">
|
||||||
|
Message <%= msg.getPostNumber() %> of <topic:last_message/>:
|
||||||
|
<% if (msg.isHidden()) { %>
|
||||||
|
<B><EM>(Hidden)</EM></B>
|
||||||
|
<% } // end if %>
|
||||||
|
<BR>
|
||||||
|
<B><%= msg.getPseud() %></B>
|
||||||
|
(<EM>
|
||||||
|
<util:xlink target="_blank">
|
||||||
|
<util:href type="servlet">user/<%= poster %></util:href>
|
||||||
|
<util:text><%= poster %></util:text>
|
||||||
|
</util:xlink>,
|
||||||
|
<%= view.formatDate(msg.getPostDate()) %>
|
||||||
|
</EM>)
|
||||||
|
<P>
|
||||||
|
<util:form action="conf/move_message.js.vs" type="servlet">
|
||||||
|
<INPUT TYPE="HIDDEN" NAME="cc" VALUE="<comm:ID/>">
|
||||||
|
<INPUT TYPE="HIDDEN" NAME="conf" VALUE="<conf:ID/>">
|
||||||
|
<INPUT TYPE="HIDDEN" NAME="top" VALUE="<topic:number/>">
|
||||||
|
<INPUT TYPE="HIDDEN" NAME="msg" VALUE="<%= msg.getPostNumber() %>">
|
||||||
|
<B>Move to topic:</B>
|
||||||
|
<SELECT NAME="target" SIZE="1">
|
||||||
|
<% Iterator it = targets.iterator(); %>
|
||||||
|
<% while (it.hasNext()) { %>
|
||||||
|
<% TopicContext xtopic = (TopicContext)(it.next()); %>
|
||||||
|
<OPTION VALUE="<%= xtopic.getTopicID() %>"><%= xtopic.getName() %></OPTION>
|
||||||
|
<% } // end while %>
|
||||||
|
</SELECT><P>
|
||||||
|
<util:button id="move" type="input"/> <util:button id="cancel" type="input"/>
|
||||||
|
</util:form><P>
|
||||||
|
</util:font>
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
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@silcom.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-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
|
||||||
Contributor(s):
|
Contributor(s):
|
||||||
--%>
|
--%>
|
||||||
|
@ -58,49 +58,7 @@
|
||||||
<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 ALIGN=LEFT COLSPAN=2 CLASS="content">
|
||||||
<util:comment>Topic user controls section</util:comment>
|
<util:call_jsp name="conf/posts_usercontrols.jsp"/>
|
||||||
<util:xlink>
|
|
||||||
<util:href type="servlet">conf/topics.js.vs?<%= base_locator %></util:href>
|
|
||||||
<util:text><util:button id="topic_list"/></util:text>
|
|
||||||
</util:xlink>
|
|
||||||
|
|
||||||
<% if (my_topic.isHidden()) { %>
|
|
||||||
<util:xlink>
|
|
||||||
<util:href type="servlet">conf/hide_topic.js.vs?<%= topic_locator %>&flag=0</util:href>
|
|
||||||
<util:text><util:button id="show_topic"/></util:text>
|
|
||||||
</util:xlink>
|
|
||||||
<% } else { %>
|
|
||||||
<util:xlink>
|
|
||||||
<util:href type="servlet">conf/hide_topic.js.vs?<%= topic_locator %>&flag=1</util:href>
|
|
||||||
<util:text><util:button id="hide_topic"/></util:text>
|
|
||||||
</util:xlink>
|
|
||||||
<% } // end if %>
|
|
||||||
|
|
||||||
<% if (view.canDoNextTopic()) { %>
|
|
||||||
<util:xlink>
|
|
||||||
<util:href type="servlet">conf/posts.js.vs?<%= next_locator %>&rnm=1</util:href>
|
|
||||||
<util:text><util:button id="next_topic"/></util:text>
|
|
||||||
</util:xlink>
|
|
||||||
|
|
||||||
<% if (my_unread>0) { %>
|
|
||||||
<util:xlink>
|
|
||||||
<util:href type="servlet">conf/posts.js.vs?<%= next_locator %>&rnm=1&<%= restorer %></util:href>
|
|
||||||
<util:text><util:button id="next_topic_keep"/></util:text>
|
|
||||||
</util:xlink>
|
|
||||||
|
|
||||||
<%
|
|
||||||
} // end if
|
|
||||||
} // end if
|
|
||||||
%>
|
|
||||||
<util:xlink>
|
|
||||||
<util:href type="servlet">conf/find.js.vs?<%= topic_locator %></util:href>
|
|
||||||
<util:text><util:button id="find"/></util:text>
|
|
||||||
</util:xlink>
|
|
||||||
|
|
||||||
<util:xlink>
|
|
||||||
<util:href type="servlet">conf/manage_topic.js.vs?<%= topic_locator %></util:href>
|
|
||||||
<util:text><util:button id="manage"/></util:text>
|
|
||||||
</util:xlink>
|
|
||||||
</TD>
|
</TD>
|
||||||
</TR>
|
</TR>
|
||||||
<% out.flush(); response.flushBuffer(); %>
|
<% out.flush(); response.flushBuffer(); %>
|
||||||
|
@ -388,6 +346,16 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
|
||||||
</util:xlink><P>
|
</util:xlink><P>
|
||||||
<%
|
<%
|
||||||
} // end if (can nuke)
|
} // end if (can nuke)
|
||||||
|
if (msg.canMove() && (my_topic.getTotalMessages()>1)) {
|
||||||
|
%>
|
||||||
|
<util:xlink>
|
||||||
|
<util:href type="servlet">
|
||||||
|
conf/move_message.js.vs?<%= topic_locator %>&msg=<%= msg.getPostNumber() %>
|
||||||
|
</util:href>
|
||||||
|
<util:text><util:button id="move"/></util:text>
|
||||||
|
</util:xlink><P>
|
||||||
|
<%
|
||||||
|
} // end if (can move)
|
||||||
if (msg.canPublish()) {
|
if (msg.canPublish()) {
|
||||||
%>
|
%>
|
||||||
<util:xlink>
|
<util:xlink>
|
||||||
|
@ -451,49 +419,7 @@ conf/posts.js.vs?<%= topic_locator %>&p1=<%= my_last + 1 %>&p2=<%= Math.min(my_l
|
||||||
|
|
||||||
<TR VALIGN=BOTTOM>
|
<TR VALIGN=BOTTOM>
|
||||||
<TD NOWRAP ALIGN=LEFT COLSPAN=2 CLASS="content">
|
<TD NOWRAP ALIGN=LEFT COLSPAN=2 CLASS="content">
|
||||||
<util:comment>Topic user controls section</util:comment>
|
<util:call_jsp name="conf/posts_usercontrols.jsp"/>
|
||||||
<util:xlink>
|
|
||||||
<util:href type="servlet">conf/topics.js.vs?<%= base_locator %></util:href>
|
|
||||||
<util:text><util:button id="topic_list"/></util:text>
|
|
||||||
</util:xlink>
|
|
||||||
|
|
||||||
<% if (my_topic.isHidden()) { %>
|
|
||||||
<util:xlink>
|
|
||||||
<util:href type="servlet">conf/hide_topic.js.vs?<%= topic_locator %>&flag=0</util:href>
|
|
||||||
<util:text><util:button id="show_topic"/></util:text>
|
|
||||||
</util:xlink>
|
|
||||||
<% } else { %>
|
|
||||||
<util:xlink>
|
|
||||||
<util:href type="servlet">conf/hide_topic.js.vs?<%= topic_locator %>&flag=1</util:href>
|
|
||||||
<util:text><util:button id="hide_topic"/></util:text>
|
|
||||||
</util:xlink>
|
|
||||||
<% } // end if %>
|
|
||||||
|
|
||||||
<% if (view.canDoNextTopic()) { %>
|
|
||||||
<util:xlink>
|
|
||||||
<util:href type="servlet">conf/posts.js.vs?<%= next_locator %>&rnm=1</util:href>
|
|
||||||
<util:text><util:button id="next_topic"/></util:text>
|
|
||||||
</util:xlink>
|
|
||||||
|
|
||||||
<% if (my_unread>0) { %>
|
|
||||||
<util:xlink>
|
|
||||||
<util:href type="servlet">conf/posts.js.vs?<%= next_locator %>&rnm=1&<%= restorer %></util:href>
|
|
||||||
<util:text><util:button id="next_topic_keep"/></util:text>
|
|
||||||
</util:xlink>
|
|
||||||
|
|
||||||
<%
|
|
||||||
} // end if
|
|
||||||
} // end if
|
|
||||||
%>
|
|
||||||
<util:xlink>
|
|
||||||
<util:href type="servlet">conf/find.js.vs?<%= topic_locator %></util:href>
|
|
||||||
<util:text><util:button id="find"/></util:text>
|
|
||||||
</util:xlink>
|
|
||||||
|
|
||||||
<util:xlink>
|
|
||||||
<util:href type="servlet">conf/manage_topic.js.vs?<%= topic_locator %></util:href>
|
|
||||||
<util:text><util:button id="manage"/></util:text>
|
|
||||||
</util:xlink>
|
|
||||||
</TD>
|
</TD>
|
||||||
</TR>
|
</TR>
|
||||||
</TABLE>
|
</TABLE>
|
||||||
|
|
88
web/format/conf/posts_usercontrols.jsp
Normal file
88
web/format/conf/posts_usercontrols.jsp
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
<%--
|
||||||
|
The contents of this file are subject to the Mozilla Public License Version 1.1
|
||||||
|
(the "License"); you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
|
||||||
|
|
||||||
|
Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
|
||||||
|
WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||||
|
language governing rights and limitations under the License.
|
||||||
|
|
||||||
|
The Original Code is the Venice Web Communities System.
|
||||||
|
|
||||||
|
The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
|
for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
|
Copyright (C) 2002 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
|
||||||
|
Contributor(s):
|
||||||
|
--%>
|
||||||
|
<%@ page import = "java.util.*" %>
|
||||||
|
<%@ page import = "com.silverwrist.venice.core.*" %>
|
||||||
|
<%@ page import = "com.silverwrist.venice.ui.conf.CurrentConference" %>
|
||||||
|
<%@ page import = "com.silverwrist.venice.ui.conf.view.PostsView" %>
|
||||||
|
<%@ page import = "com.silverwrist.venice.ui.view.NestedJSPView" %>
|
||||||
|
<%@ taglib uri="/tlds/util" prefix="util" %>
|
||||||
|
<%@ taglib uri="/tlds/community" prefix="comm" %>
|
||||||
|
<%@ taglib uri="/tlds/conference" prefix="conf" %>
|
||||||
|
<%@ taglib uri="/tlds/topic" prefix="topic" %>
|
||||||
|
<%
|
||||||
|
NestedJSPView view = NestedJSPView.get(request);
|
||||||
|
PostsView outer_view = (PostsView)(view.getOuterView());
|
||||||
|
final int my_unread = outer_view.getUnread();
|
||||||
|
final short my_next = outer_view.getNextTopic();
|
||||||
|
final String restorer = "rtop=" + outer_view.getTopic().getTopicNumber() + "&rct=" + my_unread;
|
||||||
|
%>
|
||||||
|
<%-- Broken out from posts.jsp, which was getting too large and complex --%>
|
||||||
|
<util:comment>Topic user controls section</util:comment>
|
||||||
|
<util:xlink>
|
||||||
|
<util:href type="servlet">conf/topics.js.vs?cc=<comm:ID/>&conf=<conf:ID/></util:href>
|
||||||
|
<util:text><util:button id="topic_list"/></util:text>
|
||||||
|
</util:xlink>
|
||||||
|
|
||||||
|
<topic:is_hidden>
|
||||||
|
<util:xlink>
|
||||||
|
<util:href type="servlet">
|
||||||
|
conf/hide_topic.js.vs?cc=<comm:ID/>&conf=<conf:ID/>&top=<topic:number/>&flag=0
|
||||||
|
</util:href>
|
||||||
|
<util:text><util:button id="show_topic"/></util:text>
|
||||||
|
</util:xlink>
|
||||||
|
</topic:is_hidden>
|
||||||
|
<topic:is_not_hidden>
|
||||||
|
<util:xlink>
|
||||||
|
<util:href type="servlet">
|
||||||
|
conf/hide_topic.js.vs?cc=<comm:ID/>&conf=<conf:ID/>&top=<topic:number/>&flag=1
|
||||||
|
</util:href>
|
||||||
|
<util:text><util:button id="hide_topic"/></util:text>
|
||||||
|
</util:xlink>
|
||||||
|
</topic:is_not_hidden>
|
||||||
|
|
||||||
|
<% if (outer_view.canDoNextTopic()) { %>
|
||||||
|
<util:xlink>
|
||||||
|
<util:href type="servlet">
|
||||||
|
conf/posts.js.vs?cc=<comm:ID/>&conf=<conf:ID/>&top=<%= my_next %>&rnm=1
|
||||||
|
</util:href>
|
||||||
|
<util:text><util:button id="next_topic"/></util:text>
|
||||||
|
</util:xlink>
|
||||||
|
|
||||||
|
<% if (my_unread>0) { %>
|
||||||
|
<util:xlink>
|
||||||
|
<util:href type="servlet">
|
||||||
|
conf/posts.js.vs?cc=<comm:ID/>&conf=<conf:ID/>&top=<%= my_next %>&rnm=1&<%= restorer %>
|
||||||
|
</util:href>
|
||||||
|
<util:text><util:button id="next_topic_keep"/></util:text>
|
||||||
|
</util:xlink>
|
||||||
|
|
||||||
|
<%
|
||||||
|
} // end if
|
||||||
|
} // end if
|
||||||
|
%>
|
||||||
|
<util:xlink>
|
||||||
|
<util:href type="servlet">conf/find.js.vs?cc=<comm:ID/>&conf=<conf:ID/>&top=<topic:number/></util:href>
|
||||||
|
<util:text><util:button id="find"/></util:text>
|
||||||
|
</util:xlink>
|
||||||
|
|
||||||
|
<util:xlink>
|
||||||
|
<util:href type="servlet">
|
||||||
|
conf/manage_topic.js.vs?cc=<comm:ID/>&conf=<conf:ID/>&top=<topic:number/>
|
||||||
|
</util:href>
|
||||||
|
<util:text><util:button id="manage"/></util:text>
|
||||||
|
</util:xlink>
|
1
web/images/classic/.gitignore
vendored
Normal file
1
web/images/classic/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
.xvpics
|
BIN
web/images/classic/move.jpg
Normal file
BIN
web/images/classic/move.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.4 KiB |
1
web/images/gelcap/.gitignore
vendored
Normal file
1
web/images/gelcap/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
.xvpics
|
BIN
web/images/gelcap/move.jpg
Normal file
BIN
web/images/gelcap/move.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
Loading…
Reference in New Issue
Block a user