From e23de5dae671b0988e50eb632612133d8c85f044 Mon Sep 17 00:00:00 2001 From: "Eric J. Bowersox" Date: Mon, 19 Feb 2001 02:56:16 +0000 Subject: [PATCH] implemented conference hotlists and SIG list management from the Top page; cleaned up remaining SQL statements using text columns instead of column indexes with the ResultSet; fleshed out specifics in the TODO for SIG administration --- TODO | 24 +- etc/web.xml | 15 +- setup/database.sql | 9 +- .../venice/core/ConferenceContext.java | 4 + .../silverwrist/venice/core/SIGContext.java | 2 + .../core/impl/CategoryDescriptorImpl.java | 6 +- .../venice/core/impl/ConferenceCoreData.java | 2 +- .../core/impl/ConferenceSIGContextImpl.java | 18 +- .../core/impl/ConferenceUserContextImpl.java | 66 ++++- .../venice/core/impl/ContactInfoImpl.java | 4 +- .../venice/core/impl/SIGCoreData.java | 10 +- .../venice/core/impl/SIGUserContextImpl.java | 34 ++- .../silverwrist/venice/servlets/Account.java | 2 +- .../venice/servlets/ConfOperations.java | 208 ++++++++++++++ .../silverwrist/venice/servlets/Settings.java | 267 ++++++++++++++++++ .../venice/servlets/VeniceServlet.java | 100 +++---- .../servlets/format/ConferenceListing.java | 6 + .../servlets/format/ConferenceSequence.java | 170 +++++++++++ .../venice/servlets/format/Hotlist.java | 112 ++++++++ .../servlets/format/SideBoxConferences.java | 9 +- .../venice/servlets/format/SideBoxSIGs.java | 10 +- .../venice/servlets/format/UserSIGList.java | 111 ++++++++ web/format/conf_sequence.jsp | 140 +++++++++ web/format/conferences.jsp | 18 +- web/format/hotlist.jsp | 99 +++++++ web/format/siglist.jsp | 65 +++++ web/images/icn_down.gif | Bin 0 -> 90 bytes web/images/icn_off.gif | Bin 0 -> 84 bytes web/images/icn_on.gif | Bin 0 -> 108 bytes web/images/icn_transparent.gif | Bin 0 -> 55 bytes web/images/icn_up.gif | Bin 0 -> 92 bytes web/images/icn_x.gif | Bin 0 -> 96 bytes 32 files changed, 1400 insertions(+), 111 deletions(-) create mode 100644 src/com/silverwrist/venice/servlets/Settings.java create mode 100644 src/com/silverwrist/venice/servlets/format/ConferenceSequence.java create mode 100644 src/com/silverwrist/venice/servlets/format/Hotlist.java create mode 100644 src/com/silverwrist/venice/servlets/format/UserSIGList.java create mode 100644 web/format/conf_sequence.jsp create mode 100644 web/format/hotlist.jsp create mode 100644 web/format/siglist.jsp create mode 100644 web/images/icn_down.gif create mode 100644 web/images/icn_off.gif create mode 100644 web/images/icn_on.gif create mode 100644 web/images/icn_transparent.gif create mode 100644 web/images/icn_up.gif create mode 100644 web/images/icn_x.gif diff --git a/TODO b/TODO index 499083a..4118e12 100644 --- a/TODO +++ b/TODO @@ -1,8 +1,11 @@ Lots! -- A bunch of the SIG-level functionality is not fully implemented. We need - invites, some admin functions, and the "Manage" button on the "top - content" window to work. +- Unimplemented functions on the SIG Administration page: + Set SIG Features (sigadmin, command=F) + Membership Control (sigadmin, command=M) + Delete SIG (sigadmin, command=DEL) + +- Implement SIG invitations ("Invite" button on the profile). - Should we provide the sysadmin the ability to disable SIG creation for non-admin users? Maybe there needs to be a "global" set of levels that @@ -13,8 +16,6 @@ Lots! before we go live. (It plugs into the Administrative SIG features.) - Unimplemented functions on the Top page: - Manage SIG list (SIG sidebox) - Manage Conference Hotlist (Conference sidebox) Customize Sideboxes - The plan for the "main" part of the Top page is to let a sysadmin put @@ -25,21 +26,8 @@ Lots! - Implement quick e-mail from the user profile display (engine support and UI). -- More SELECT queries that specify discrete columns need to start using - numeric indexes to retrieve the column data, instead of names. This will - make the retrieval process more efficient, and make for shorter SQL - statements in the case of joined queries (no need to SELECT table.column - AS name). - - Slippage during posting is still untested. -- We need a "manage" button at conference list level so we can use that to - manage the ordering of conferences. This operation should be accessible - only to users with "create" privilege on the SIG. - -- Conference hotlist is now partially implemented, but we need some more work - at engine level. - - Not everybody likes purple. Provide a way to change the default colors. Probably via entries in render-config.xml. Of course, if we go to a different rendering system eventually, we won't need this. diff --git a/etc/web.xml b/etc/web.xml index 0b71c40..1143203 100644 --- a/etc/web.xml +++ b/etc/web.xml @@ -72,11 +72,19 @@ account - Displays the "accounts" page of the Venice application. + Account management operations - login, logout, create, verify email, enter profile. com.silverwrist.venice.servlets.Account + + settings + + User customization and settings operations. + + com.silverwrist.venice.servlets.Settings + + userdisplay @@ -200,6 +208,11 @@ /account + + settings + /settings + + userdisplay /user/* diff --git a/setup/database.sql b/setup/database.sql index 9245bdf..e665e8c 100644 --- a/setup/database.sql +++ b/setup/database.sql @@ -306,7 +306,8 @@ CREATE TABLE confhotlist ( sequence SMALLINT NOT NULL, sigid INT NOT NULL, confid INT NOT NULL, - PRIMARY KEY (uid, sequence) + PRIMARY KEY (uid, sigid, confid), + INDEX inorder (uid, sequence) ); # The "bozo filter" list for a conference, for use by users in filtering out @@ -1368,7 +1369,7 @@ INSERT INTO confs (confid, createdate, read_lvl, post_lvl, create_lvl, hide_lvl, delete_lvl, top_topic, name, descr) VALUES (1, '2000-12-01 00:00:00', 63000, 63000, 63000, 63000, 64999, 64999, 65500, 0, 'Administrative Notes', 'Used to store notes and discussions between the site administrators.'); -INSERT INTO sigtoconf (sigid, confid, sequence) VALUES (1, 1, 100); +INSERT INTO sigtoconf (sigid, confid, sequence) VALUES (1, 1, 10); INSERT INTO confalias (confid, alias) VALUES (1, 'Admin_Notes'); # Make the Administrator the host-of-record of the "Administrative Notes" conference. @@ -1405,7 +1406,7 @@ INSERT INTO confs (confid, createdate, read_lvl, post_lvl, create_lvl, hide_lvl, delete_lvl, top_topic, name, descr) VALUES (2, '2000-12-01 00:00:00', 6500, 6500, 6500, 52500, 52500, 52500, 58000, 0, 'General Discussion', 'Your place for general discussion about the system and general topics.'); -INSERT INTO sigtoconf (sigid, confid, sequence) VALUES (2, 2, 100); +INSERT INTO sigtoconf (sigid, confid, sequence) VALUES (2, 2, 10); INSERT INTO confalias (confid, alias) VALUES (2, 'General'); # Make the Administrator the host-of-record of the "General Discussion" conference. @@ -1417,7 +1418,7 @@ INSERT INTO confs (confid, createdate, read_lvl, post_lvl, create_lvl, hide_lvl, delete_lvl, top_topic, name, descr) VALUES (3, '2000-12-01 00:00:00', 6500, 6500, 6500, 52500, 52500, 52500, 58000, 0, 'Test Postings', 'Use this conference to test the conferencing system.'); -INSERT INTO sigtoconf (sigid, confid, sequence) VALUES (2, 3, 200); +INSERT INTO sigtoconf (sigid, confid, sequence) VALUES (2, 3, 20); INSERT INTO confalias (confid, alias) VALUES (3, 'Test'); # Make the Administrator the host-of-record of the "Test Postings" conference. diff --git a/src/com/silverwrist/venice/core/ConferenceContext.java b/src/com/silverwrist/venice/core/ConferenceContext.java index e07ed44..fcf14a4 100644 --- a/src/com/silverwrist/venice/core/ConferenceContext.java +++ b/src/com/silverwrist/venice/core/ConferenceContext.java @@ -149,4 +149,8 @@ public interface ConferenceContext public abstract SIGContext getEnclosingSIG(); + public abstract void removeFromHotlist() throws DataException; + + public abstract void setHotlistSequence(int seq) throws DataException; + } // end interface ConferenceContext diff --git a/src/com/silverwrist/venice/core/SIGContext.java b/src/com/silverwrist/venice/core/SIGContext.java index 6e194a7..cebe8d6 100644 --- a/src/com/silverwrist/venice/core/SIGContext.java +++ b/src/com/silverwrist/venice/core/SIGContext.java @@ -151,4 +151,6 @@ public interface SIGContext extends SearchMode public abstract List getMemberList() throws DataException; + public abstract boolean canManageConferences(); + } // end interface SIGContext diff --git a/src/com/silverwrist/venice/core/impl/CategoryDescriptorImpl.java b/src/com/silverwrist/venice/core/impl/CategoryDescriptorImpl.java index 03980ba..219673f 100644 --- a/src/com/silverwrist/venice/core/impl/CategoryDescriptorImpl.java +++ b/src/com/silverwrist/venice/core/impl/CategoryDescriptorImpl.java @@ -7,7 +7,7 @@ * 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 Community System. + * The Original Code is the Venice Web Communities System. * * The Initial Developer of the Original Code is Eric J. Bowersox , * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are @@ -520,7 +520,7 @@ class CategoryDescriptorImpl implements CategoryDescriptor, Cloneable { // get a database connection conn = datapool.getConnection(); Statement stmt = conn.createStatement(); - StringBuffer sql = new StringBuffer("SELECT COUNT(*) AS total FROM refcategory WHERE name "); + StringBuffer sql = new StringBuffer("SELECT COUNT(*) FROM refcategory WHERE name "); switch (mode) { // compose SQL in different ways depending on the search term @@ -556,7 +556,7 @@ class CategoryDescriptorImpl implements CategoryDescriptor, Cloneable if (!(rs.next())) throw new InternalStateError("getSearchCategoryCount search failure (MUST have 1 row!)"); - return rs.getInt("total"); + return rs.getInt(1); } // end try catch (SQLException e) diff --git a/src/com/silverwrist/venice/core/impl/ConferenceCoreData.java b/src/com/silverwrist/venice/core/impl/ConferenceCoreData.java index a6d5092..44a8798 100644 --- a/src/com/silverwrist/venice/core/impl/ConferenceCoreData.java +++ b/src/com/silverwrist/venice/core/impl/ConferenceCoreData.java @@ -1288,7 +1288,7 @@ class ConferenceCoreData implements ConferenceData rs = stmt.executeQuery(sql.toString()); if (!(rs.next())) throw new InternalStateError("bogus query in createConference - must return at least 1 row!"); - new_sequence = (short)(rs.getShort(1) + 100); + new_sequence = (short)(rs.getShort(1) + 10); // insert the record into the conferences table! sql.setLength(0); diff --git a/src/com/silverwrist/venice/core/impl/ConferenceSIGContextImpl.java b/src/com/silverwrist/venice/core/impl/ConferenceSIGContextImpl.java index a689c43..7ad4ede 100644 --- a/src/com/silverwrist/venice/core/impl/ConferenceSIGContextImpl.java +++ b/src/com/silverwrist/venice/core/impl/ConferenceSIGContextImpl.java @@ -572,9 +572,23 @@ class ConferenceSIGContextImpl implements ConferenceSIGContext public void setHideList(SIGBackend sig, boolean flag) throws DataException { + if (logger.isDebugEnabled()) + logger.debug("setHideList(conf #" + confid + ", " + flag + ")"); + if (deleted) + { // aiyaiyai - we're deleted + logger.error("conference deleted, can't change a thing"); throw new DataException("This conference has been deleted."); + } // end if + + if (flag==hide_list) + { // this is a no-op + logger.warn("setHideList for this conference is a no-op"); + return; + + } // end if + Connection conn = null; // database connection AuditRecord ar = null; // audit record @@ -585,8 +599,10 @@ class ConferenceSIGContextImpl implements ConferenceSIGContext // create the SQL statement Statement stmt = conn.createStatement(); StringBuffer sql = new StringBuffer("UPDATE sigtoconf SET hide_list = "); - sql.append(hide_list ? '1' : '0').append(" WHERE sigid = ").append(this.sig.realSIGID()); + sql.append(flag ? '1' : '0').append(" WHERE sigid = ").append(this.sig.realSIGID()); sql.append(" AND confid = ").append(confid).append(';'); + if (logger.isDebugEnabled()) + logger.debug("SQL: " + sql.toString()); // execute the update stmt.executeUpdate(sql.toString()); diff --git a/src/com/silverwrist/venice/core/impl/ConferenceUserContextImpl.java b/src/com/silverwrist/venice/core/impl/ConferenceUserContextImpl.java index 0057dd4..26d3392 100644 --- a/src/com/silverwrist/venice/core/impl/ConferenceUserContextImpl.java +++ b/src/com/silverwrist/venice/core/impl/ConferenceUserContextImpl.java @@ -7,7 +7,7 @@ * 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 Community System. + * The Original Code is the Venice Web Communities System. * * The Initial Developer of the Original Code is Eric J. Bowersox , * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are @@ -1359,6 +1359,70 @@ class ConferenceUserContextImpl implements ConferenceContext, ConferenceBackend } // end getEnclosingSIG + public void removeFromHotlist() throws DataException + { + Connection conn = null; + + try + { // retrieve a connection from the datapool + conn = datapool.getConnection(); + Statement stmt = conn.createStatement(); + + // create the DELETE statement and just execute it blind (if this conference is not in the hotlist, + // the DELETE is a no-op). + StringBuffer sql = new StringBuffer("DELETE FROM confhotlist WHERE uid = "); + sql.append(sig.realUID()).append(" AND sigid = ").append(sig.realSIGID()).append(" AND confid = "); + sql.append(confid).append(';'); + stmt.executeUpdate(sql.toString()); + + } // end try + catch (SQLException e) + { // this becomes a DataException + logger.error("DB error removing from hotlist: " + e.getMessage(),e); + throw new DataException("error removing from hotlist: " + e.getMessage(),e); + + } // end catch + finally + { // make sure we release the connection before we go + if (conn!=null) + datapool.releaseConnection(conn); + + } // end finally + + } // end removeFromHotlist + + public void setHotlistSequence(int seq) throws DataException + { + Connection conn = null; + + try + { // retrieve a connection from the datapool + conn = datapool.getConnection(); + Statement stmt = conn.createStatement(); + + // create the UPDATE statement and just execute it blind (if this conference is not in the hotlist, + // the UPDATE is a no-op). + StringBuffer sql = new StringBuffer("UPDATE confhotlist SET sequence = "); + sql.append(seq).append(" WHERE uid = ").append(sig.realUID()).append(" AND sigid = "); + sql.append(sig.realSIGID()).append(" AND confid = ").append(confid).append(';'); + stmt.executeUpdate(sql.toString()); + + } // end try + catch (SQLException e) + { // this becomes a DataException + logger.error("DB error setting hotlist sequence: " + e.getMessage(),e); + throw new DataException("error setting hotlist sequence: " + e.getMessage(),e); + + } // end catch + finally + { // make sure we release the connection before we go + if (conn!=null) + datapool.releaseConnection(conn); + + } // end finally + + } // end setHotlistSequence + /*-------------------------------------------------------------------------------- * Implementations from interface UserBackend *-------------------------------------------------------------------------------- diff --git a/src/com/silverwrist/venice/core/impl/ContactInfoImpl.java b/src/com/silverwrist/venice/core/impl/ContactInfoImpl.java index a1c4a03..f34b086 100644 --- a/src/com/silverwrist/venice/core/impl/ContactInfoImpl.java +++ b/src/com/silverwrist/venice/core/impl/ContactInfoImpl.java @@ -651,9 +651,9 @@ class ContactInfoImpl implements ContactInfo, Stashable // now read back the contact ID we just added int new_contactid; - ResultSet rs = stmt.executeQuery("SELECT LAST_INSERT_ID() AS blort;"); + ResultSet rs = stmt.executeQuery("SELECT LAST_INSERT_ID();"); if (rs.next()) - new_contactid = rs.getInt("blort"); + new_contactid = rs.getInt(1); else throw new DataException("unable to read back new contact ID"); diff --git a/src/com/silverwrist/venice/core/impl/SIGCoreData.java b/src/com/silverwrist/venice/core/impl/SIGCoreData.java index 69db218..3455190 100644 --- a/src/com/silverwrist/venice/core/impl/SIGCoreData.java +++ b/src/com/silverwrist/venice/core/impl/SIGCoreData.java @@ -7,7 +7,7 @@ * 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 Community System. + * The Original Code is the Venice Web Communities System. * * The Initial Developer of the Original Code is Eric J. Bowersox , * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are @@ -1280,7 +1280,7 @@ class SIGCoreData implements SIGData, SIGDataBackend { // get a database connection and create the appropriate SELECT statement conn = datapool.getConnection(); Statement stmt = conn.createStatement(); - StringBuffer sql = new StringBuffer("SELECT COUNT(*) AS total FROM sigmember WHERE sigid = "); + StringBuffer sql = new StringBuffer("SELECT COUNT(*) FROM sigmember WHERE sigid = "); sql.append(sigid); if (!include_hidden) sql.append(" AND hidden = 0"); @@ -1291,7 +1291,7 @@ class SIGCoreData implements SIGData, SIGDataBackend if (!(rs.next())) throw new InternalStateError("getMemberCount query failure - must have ONE row!"); - return rs.getInt("total"); + return rs.getInt(1); } // end try catch (SQLException e) @@ -1709,9 +1709,9 @@ class SIGCoreData implements SIGData, SIGDataBackend stmt.executeUpdate(sql.toString()); // here we go! // Get the SIGID of the new SIG! - rs = stmt.executeQuery("SELECT LAST_INSERT_ID() AS blort;"); + rs = stmt.executeQuery("SELECT LAST_INSERT_ID();"); if (rs.next()) - new_sigid = rs.getInt("blort"); + new_sigid = rs.getInt(1); else { // we should have gotten a SIGID back! logger.error("readback of new SIGID failed!"); diff --git a/src/com/silverwrist/venice/core/impl/SIGUserContextImpl.java b/src/com/silverwrist/venice/core/impl/SIGUserContextImpl.java index 0454bf6..c62db18 100644 --- a/src/com/silverwrist/venice/core/impl/SIGUserContextImpl.java +++ b/src/com/silverwrist/venice/core/impl/SIGUserContextImpl.java @@ -7,7 +7,7 @@ * 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 Community System. + * The Original Code is the Venice Web Communities System. * * The Initial Developer of the Original Code is Eric J. Bowersox , * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are @@ -1124,6 +1124,20 @@ class SIGUserContextImpl implements SIGContext, SIGBackend } // end getMemberList + public boolean canManageConferences() + { + SIGData sd = getSIGDataNE(); + if (sd==null) + return false; + if (!(sd.checkMembership(level,is_member))) + return false; + if (sd.isFeaturePresent("CONF")) + return sd.canCreateSIGSubObjects(level); + else + return false; + + } // end canManageConferences + /*-------------------------------------------------------------------------------- * Implementations from interface UserBackend *-------------------------------------------------------------------------------- @@ -1241,20 +1255,18 @@ class SIGUserContextImpl implements SIGContext, SIGBackend { // get a database connection conn = datapool.getConnection(); Statement stmt = conn.createStatement(); - StringBuffer sql = new StringBuffer("SELECT sm.sigid AS sigid, sm.granted_lvl AS level, " - + "sm.locked AS locked, s.signame AS name, s.alias AS alias " + StringBuffer sql = new StringBuffer("SELECT sm.sigid, sm.granted_lvl, sm.locked, s.signame, s.alias " + "FROM sigmember sm, sigs s WHERE sm.sigid = s.sigid " + "AND sm.uid = "); sql.append(user.realUID()).append(" ORDER BY s.signame;"); ResultSet rs = stmt.executeQuery(sql.toString()); while (rs.next()) { // create the user contexts and add them to the return vector - int the_sigid = rs.getInt("sigid"); + int the_sigid = rs.getInt(1); if (logger.isDebugEnabled()) logger.debug("...found SIG #" + String.valueOf(the_sigid)); - SIGContext tmp = new SIGUserContextImpl(engine,user,datapool,the_sigid,rs.getInt("level"), - rs.getBoolean("locked"),rs.getString("name"), - rs.getString("alias")); + SIGContext tmp = new SIGUserContextImpl(engine,user,datapool,the_sigid,rs.getInt(2),rs.getBoolean(3), + rs.getString(4),rs.getString(5)); rc.add(tmp); } // end while @@ -1457,7 +1469,7 @@ class SIGUserContextImpl implements SIGContext, SIGBackend { // get a database connection conn = datapool.getConnection(); Statement stmt = conn.createStatement(); - StringBuffer sql = new StringBuffer("SELECT COUNT(*) AS total FROM sigs WHERE "); + StringBuffer sql = new StringBuffer("SELECT COUNT(*) FROM sigs WHERE "); switch (field) { @@ -1506,7 +1518,7 @@ class SIGUserContextImpl implements SIGContext, SIGBackend if (!(rs.next())) throw new InternalStateError("getSearchSIGCount search failure (MUST have 1 row!)"); - return rs.getInt("total"); + return rs.getInt(1); } // end try catch (SQLException e) @@ -1590,7 +1602,7 @@ class SIGUserContextImpl implements SIGContext, SIGBackend { // get a database connection conn = datapool.getConnection(); Statement stmt = conn.createStatement(); - StringBuffer sql = new StringBuffer("SELECT COUNT(*) AS total FROM sigs WHERE catid = "); + StringBuffer sql = new StringBuffer("SELECT COUNT(*) FROM sigs WHERE catid = "); sql.append(catid); if (Capability.hideHiddenDirectorySIGs(user.realBaseLevel())) sql.append(" AND hide_dir = 0"); @@ -1605,7 +1617,7 @@ class SIGUserContextImpl implements SIGContext, SIGBackend if (!(rs.next())) throw new InternalStateError("getNumSIGsInCategory search failure (MUST have 1 row!)"); - return rs.getInt("total"); + return rs.getInt(1); } // end try catch (SQLException e) diff --git a/src/com/silverwrist/venice/servlets/Account.java b/src/com/silverwrist/venice/servlets/Account.java index 470a277..811ccdb 100644 --- a/src/com/silverwrist/venice/servlets/Account.java +++ b/src/com/silverwrist/venice/servlets/Account.java @@ -7,7 +7,7 @@ * 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 Community System. + * The Original Code is the Venice Web Communities System. * * The Initial Developer of the Original Code is Eric J. Bowersox , * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are diff --git a/src/com/silverwrist/venice/servlets/ConfOperations.java b/src/com/silverwrist/venice/servlets/ConfOperations.java index ac8dfd1..f5aab1c 100644 --- a/src/com/silverwrist/venice/servlets/ConfOperations.java +++ b/src/com/silverwrist/venice/servlets/ConfOperations.java @@ -100,6 +100,33 @@ public class ConfOperations extends VeniceServlet } // end validateNewTopic + private static boolean getFlag(ServletRequest request, String param, String on_error) throws ErrorBox + { + String foo = request.getParameter(param); + if (foo==null) + throw new ErrorBox(null,"Parameter not specified!",on_error); + + int value; + try + { // try to get a numeric value + value = Integer.parseInt(foo); + + } // end try + catch (NumberFormatException nfe) + { // unable to decode value + throw new ErrorBox(null,"Invalid parameter value!",on_error); + + } // end catch + + if (value==0) + return false; + else if (value==1) + return true; + else + throw new ErrorBox(null,"Invalid parameter value!",on_error); + + } // end getFlag + /*-------------------------------------------------------------------------------- * Overrides from class HttpServlet *-------------------------------------------------------------------------------- @@ -118,6 +145,26 @@ public class ConfOperations extends VeniceServlet *-------------------------------------------------------------------------------- */ + /* + * ConfOperations commands: + * A = Manage Conference Aliases (requires conference parameter) + * C = Create conference + * DEL = Delete conference (requires conference parameter) + * E = Edit Conference Settings (requires conference parameter) + * FX = Fixseen (requires conference parameter) + * H = Add Conference to Hotlist (requires conference parameter) + * M = Manage Conference Membership (requires conference parameter) + * Q = Display Conference Manage menu (requires conference parameter) + * RP = Report on Posters (requires conference parameter) + * RR = Report on Readers (requires conference parameter) + * S = Manage conference ordering/sequence + * SDEL = Delete conference from sequence manager menu + * SH = Hide/show conference from sequence manager menu + * SS = Change conference sequence from sequence manager menu + * T = Create topic (requires conference parameter) + * Other = Display list of conferences in SIG + */ + protected VeniceContent doVeniceGet(HttpServletRequest request, VeniceEngine engine, UserContext user, RenderData rdat) throws ServletException, IOException, VeniceServletResult @@ -130,6 +177,167 @@ public class ConfOperations extends VeniceServlet // get the command we want to use String cmd = getStandardCommandParam(request); + if (cmd.equals("S")) + { // "S" = Manage conferences sequence + if (!(sig.canManageConferences())) + return new ErrorBox("Access Error","You are not permitted to manage conferences in this SIG.", + on_error); + + try + { // display the Conference Sequence screen + setMyLocation(request,"confops?cmd=S&sig=" + sig.getSIGID()); + return new ConferenceSequence(sig); + + } // end try + catch (DataException de) + { // oops - database error here + return new ErrorBox("Database Error","Database error getting conference list: " + de.getMessage(), + on_error); + + } // end catch + catch (AccessError ae) + { // some sort of access error - display an error dialog + return new ErrorBox("Access Error",ae.getMessage(),on_error); + + } // end catch + + } // end if ("S" command) + + if (cmd.equals("SH")) + { // "SH" = Hide/show conference (requires conference parameter) + if (!(sig.canManageConferences())) + return new ErrorBox("Access Error","You are not permitted to manage conferences in this SIG.", + on_error); + + ConferenceContext conf = getConferenceParameter(request,sig,true,on_error); + on_error = "confops?sig=" + sig.getSIGID() + "&cmd=S"; + + if (!(conf.canChangeConference())) + return new ErrorBox("Access Error","You do not have permission to modify this conference.",on_error); + + boolean new_flag = getFlag(request,"flag",on_error); + + try + { // go set the hide flag + conf.setHideList(new_flag); + + } // end try + catch (DataException de) + { // database error - display appropriate dialog + return new ErrorBox("Database Error","Database error setting hide flag: " + de.getMessage(), + on_error); + + } // end catch + catch (AccessError ae) + { // some sort of access error - display an error dialog + return new ErrorBox("Access Error",ae.getMessage(),on_error); + + } // end catch + + throw new RedirectResult(on_error); // trap back to the main display + + } // end if ("SH" command) + + if (cmd.equals("SS")) + { // "SS" = Change conference sequence (requires conference parameter) + if (!(sig.canManageConferences())) + return new ErrorBox("Access Error","You are not permitted to manage conferences in this SIG.", + on_error); + + ConferenceContext conf = getConferenceParameter(request,sig,true,on_error); + on_error = "confops?sig=" + sig.getSIGID() + "&cmd=S"; + + // we need a second conference parameter to exchange with + ConferenceContext other_conf = getConferenceParameter(request.getParameter("oc"),sig,true,on_error); + + if (!(conf.canChangeConference()) || !(other_conf.canChangeConference())) + return new ErrorBox("Access Error","You do not have permission to modify this conference.",on_error); + + try + { // get the two sequences + short this_seq = conf.getSequence(); + short other_seq = other_conf.getSequence(); + + // now exchange them + conf.setSequence(other_seq); + boolean restore = true; + try + { // set the second conference sequence + other_conf.setSequence(this_seq); + restore = false; + + } // end try + finally + { // undo first set on error + if (restore) + conf.setSequence(this_seq); + + } // end finally + + } // end try + catch (DataException de) + { // database error - display appropriate dialog + return new ErrorBox("Database Error","Database error changing sequence: " + de.getMessage(), + on_error); + + } // end catch + catch (AccessError ae) + { // some sort of access error - display an error dialog + return new ErrorBox("Access Error",ae.getMessage(),on_error); + + } // end catch + + throw new RedirectResult(on_error); // trap back to the main display + + } // end if ("SS" command) + + if (cmd.equals("SDEL")) + { // "SDEL" = Delete conference (requires conference parameter) + if (!(sig.canManageConferences())) + return new ErrorBox("Access Error","You are not permitted to manage conferences in this SIG.", + on_error); + + ConferenceContext conf = getConferenceParameter(request,sig,true,on_error); + on_error = "confops?sig=" + sig.getSIGID() + "&cmd=S"; + + if (!(conf.canDeleteConference())) + return new ErrorBox("Access Error","You do not have permission to delete this conference.",on_error); + + if (ConfirmBox.isConfirmed(request,DELETE_CONFIRM_ATTR,DELETE_CONFIRM_PARAM)) + { // we are confirmed - delete the conference! + try + { // tell it to go away + conf.delete(); + + } // end try + catch (DataException de) + { // something wrong in the database + return new ErrorBox("Database Error","Database error deleting conference: " + de.getMessage(), + on_error); + + } // end catch + catch (AccessError ae) + { // some lack of access is causing problems + return new ErrorBox("Access Error",ae.getMessage(),on_error); + + } // end catch + + // that's it - trap back to the main display + throw new RedirectResult(on_error); + + } // end if + else + { // generate a confirmation box and wait for confirmation + String message = "You are about to permanently delete the \"" + conf.getName() + "\" conference! " + + "Are you sure you want to do this?"; + return new ConfirmBox(request,DELETE_CONFIRM_ATTR,DELETE_CONFIRM_PARAM,"Delete Conference",message, + "confops?sig=" + sig.getSIGID() + "&conf=" + conf.getConfID() + "&cmd=SDEL", + on_error); + + } // end else + + } // end if ("SDEL" command) + if (cmd.equals("C")) { // "C" = "Create conference" if (!(sig.canCreateConference())) diff --git a/src/com/silverwrist/venice/servlets/Settings.java b/src/com/silverwrist/venice/servlets/Settings.java new file mode 100644 index 0000000..ea1166d --- /dev/null +++ b/src/com/silverwrist/venice/servlets/Settings.java @@ -0,0 +1,267 @@ +/* + * 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 . + * + * 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 , + * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + * Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.servlets; + +import java.io.*; +import java.util.*; +import javax.servlet.*; +import javax.servlet.http.*; +import org.apache.log4j.*; +import com.silverwrist.venice.core.*; +import com.silverwrist.venice.servlets.format.*; + +public class Settings extends VeniceServlet +{ + /*-------------------------------------------------------------------------------- + * Static data members + *-------------------------------------------------------------------------------- + */ + + private static final String UNJOIN_CONFIRM_ATTR = "servlets.Settings.unjoin.confirm"; + private static final String UNJOIN_CONFIRM_PARAM = "confirm"; + + private static Category logger = Category.getInstance(Settings.class.getName()); + + /*-------------------------------------------------------------------------------- + * Internal functions + *-------------------------------------------------------------------------------- + */ + + private static int findHotlistIndex(List hotlist, ServletRequest request) throws ErrorBox + { + String foo = request.getParameter("sig"); + if (foo==null) + throw new ErrorBox(null,"Parameter not specified!","settings?cmd=H"); + int sigid; + try + { // this is the SIG id of the hotlist entry + sigid = Integer.parseInt(foo); + + } // end try + catch (NumberFormatException nfe) + { // conversion error... + throw new ErrorBox(null,"Parameter invalid!","settings?cmd=H"); + + } // end catch + + foo = request.getParameter("conf"); + if (foo==null) + throw new ErrorBox(null,"Parameter not specified!","settings?cmd=H"); + int confid; + try + { // this is the conference id of the hotlist entry + confid = Integer.parseInt(foo); + + } // end try + catch (NumberFormatException nfe) + { // conversion error... + throw new ErrorBox(null,"Parameter invalid!","settings?cmd=H"); + + } // end catch + + for (int i=0; i. + * + * 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 , + * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + * Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.servlets.format; + +import java.util.*; +import javax.servlet.*; +import javax.servlet.http.*; +import com.silverwrist.venice.core.*; + +public class ConferenceSequence implements JSPRender +{ + /*-------------------------------------------------------------------------------- + * Static data members + *-------------------------------------------------------------------------------- + */ + + // Attribute name for request attribute + protected static final String ATTR_NAME = "com.silverwrist.venice.content.Hotlist"; + + /*-------------------------------------------------------------------------------- + * Attributes + *-------------------------------------------------------------------------------- + */ + + private SIGContext sig; + private List conf_list; + private Hashtable hidden_stat = new Hashtable(); + private Hashtable next_id = new Hashtable(); + private Hashtable prev_id = new Hashtable(); + + /*-------------------------------------------------------------------------------- + * Constructor + *-------------------------------------------------------------------------------- + */ + + public ConferenceSequence(SIGContext sig) throws DataException, AccessError + { + this.sig = sig; + this.conf_list = sig.getConferences(); + + Integer last_id = null; + for (int i=0; i. + * + * 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 , + * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + * Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.servlets.format; + +import java.util.*; +import javax.servlet.*; +import javax.servlet.http.*; +import com.silverwrist.venice.core.*; + +public class Hotlist implements JSPRender +{ + /*-------------------------------------------------------------------------------- + * Static data members + *-------------------------------------------------------------------------------- + */ + + // Attribute name for request attribute + protected static final String ATTR_NAME = "com.silverwrist.venice.content.Hotlist"; + + /*-------------------------------------------------------------------------------- + * Attributes + *-------------------------------------------------------------------------------- + */ + + private UserContext uc; + private List hotlist; + + /*-------------------------------------------------------------------------------- + * Constructor + *-------------------------------------------------------------------------------- + */ + + public Hotlist(UserContext uc) throws DataException + { + this.uc = uc; + this.hotlist = uc.getConferenceHotlist(); + + } // end constructor + + /*-------------------------------------------------------------------------------- + * External static functions + *-------------------------------------------------------------------------------- + */ + + public static Hotlist retrieve(ServletRequest request) + { + return (Hotlist)(request.getAttribute(ATTR_NAME)); + + } // end retrieve + + /*-------------------------------------------------------------------------------- + * Implementations from interface VeniceContent + *-------------------------------------------------------------------------------- + */ + + public String getPageTitle(RenderData rdat) + { + return "Your Conference Hotlist"; + + } // end getPageTitle + + /*-------------------------------------------------------------------------------- + * Implementations from interface JSPRender + *-------------------------------------------------------------------------------- + */ + + public void store(ServletRequest request) + { + request.setAttribute(ATTR_NAME,this); + + } // end store + + public String getTargetJSPName() + { + return "hotlist.jsp"; + + } // end getTargetJSPName + + /*-------------------------------------------------------------------------------- + * External operations + *-------------------------------------------------------------------------------- + */ + + public int getHotlistSize() + { + return hotlist.size(); + + } // end getHotlistSize + + public ConferenceContext getConference(int ndx) + { + ConferenceHotlistEntry tmp = (ConferenceHotlistEntry)(hotlist.get(ndx)); + return tmp.getConference(); + + } // end getConference + +} // end class Hotlist diff --git a/src/com/silverwrist/venice/servlets/format/SideBoxConferences.java b/src/com/silverwrist/venice/servlets/format/SideBoxConferences.java index 44d69ea..a3abf90 100644 --- a/src/com/silverwrist/venice/servlets/format/SideBoxConferences.java +++ b/src/com/silverwrist/venice/servlets/format/SideBoxConferences.java @@ -94,9 +94,12 @@ public class SideBoxConferences implements ContentRender else out.write(rdat.getStdFontTag(null,2) + "You have no conferences in your hotlist.\n"); - // write the link at the end - out.write("

" + rdat.getStdFontTag(null,1) + "[ Manage ]"); + if (uc.isLoggedIn()) + { // write the link at the end + out.write("

" + rdat.getStdFontTag(null,1) + "[ Manage ]"); + + } // end if } // end renderHere diff --git a/src/com/silverwrist/venice/servlets/format/SideBoxSIGs.java b/src/com/silverwrist/venice/servlets/format/SideBoxSIGs.java index 99263d8..cdc6ae5 100644 --- a/src/com/silverwrist/venice/servlets/format/SideBoxSIGs.java +++ b/src/com/silverwrist/venice/servlets/format/SideBoxSIGs.java @@ -92,10 +92,12 @@ public class SideBoxSIGs implements ContentRender else out.write(rdat.getStdFontTag(null,2) + "You are not a member of any SIGs.\n"); - // write the two links at the end - out.write("

" + rdat.getStdFontTag(null,1) + "[ Manage | Create New ]"); + if (uc.isLoggedIn()) + { // write the two links at the end + out.write("

" + rdat.getStdFontTag(null,1) + "[ Manage | Create New ]"); + } // end if } // end renderHere diff --git a/src/com/silverwrist/venice/servlets/format/UserSIGList.java b/src/com/silverwrist/venice/servlets/format/UserSIGList.java new file mode 100644 index 0000000..5c1102f --- /dev/null +++ b/src/com/silverwrist/venice/servlets/format/UserSIGList.java @@ -0,0 +1,111 @@ +/* + * 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 . + * + * 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 , + * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + * Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + * + * Contributor(s): + */ +package com.silverwrist.venice.servlets.format; + +import java.util.*; +import javax.servlet.*; +import javax.servlet.http.*; +import com.silverwrist.venice.core.*; + +public class UserSIGList implements JSPRender +{ + /*-------------------------------------------------------------------------------- + * Static data members + *-------------------------------------------------------------------------------- + */ + + // Attribute name for request attribute + protected static final String ATTR_NAME = "com.silverwrist.venice.content.Hotlist"; + + /*-------------------------------------------------------------------------------- + * Attributes + *-------------------------------------------------------------------------------- + */ + + private UserContext uc; + private List sig_list; + + /*-------------------------------------------------------------------------------- + * Constructor + *-------------------------------------------------------------------------------- + */ + + public UserSIGList(UserContext uc) throws DataException + { + this.uc = uc; + this.sig_list = uc.getMemberSIGs(); + + } // end constructor + + /*-------------------------------------------------------------------------------- + * External static functions + *-------------------------------------------------------------------------------- + */ + + public static UserSIGList retrieve(ServletRequest request) + { + return (UserSIGList)(request.getAttribute(ATTR_NAME)); + + } // end retrieve + + /*-------------------------------------------------------------------------------- + * Implementations from interface VeniceContent + *-------------------------------------------------------------------------------- + */ + + public String getPageTitle(RenderData rdat) + { + return "Your SIGs"; + + } // end getPageTitle + + /*-------------------------------------------------------------------------------- + * Implementations from interface JSPRender + *-------------------------------------------------------------------------------- + */ + + public void store(ServletRequest request) + { + request.setAttribute(ATTR_NAME,this); + + } // end store + + public String getTargetJSPName() + { + return "siglist.jsp"; + + } // end getTargetJSPName + + /*-------------------------------------------------------------------------------- + * External operations + *-------------------------------------------------------------------------------- + */ + + public int getNumSIGs() + { + return sig_list.size(); + + } // end getNumSIGs + + public SIGContext getSIG(int ndx) + { + return (SIGContext)(sig_list.get(ndx)); + + } // end getSIG + +} // end class UserSIGList diff --git a/web/format/conf_sequence.jsp b/web/format/conf_sequence.jsp new file mode 100644 index 0000000..db9903b --- /dev/null +++ b/web/format/conf_sequence.jsp @@ -0,0 +1,140 @@ +<%-- + 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 . + + 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 , + for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + + Contributor(s): +--%> +<%@ page import = "java.util.*" %> +<%@ page import = "com.silverwrist.util.StringUtil" %> +<%@ page import = "com.silverwrist.venice.core.*" %> +<%@ page import = "com.silverwrist.venice.servlets.Variables" %> +<%@ page import = "com.silverwrist.venice.servlets.format.*" %> +<% + ConferenceSequence data = ConferenceSequence.retrieve(request); + Variables.failIfNull(data); + RenderData rdat = RenderConfig.createRenderData(application,request,response); +%> +<% if (rdat.useHTMLComments()) { %><% } %> +<% rdat.writeContentHeader(out,"Manage Conference List",null); %> +<%= rdat.getStdFontTag(null,2) %> + Return to Conference List +

+<% if (data.getNumConferences()>0) { %> + + <% for (int i=0; i + <% + ConferenceContext conf = data.getConference(i); + String partial = "confops?sig=" + data.getSIGID() + "&conf=" + conf.getConfID(); + String tail, image, alt; + %> + + + + + + + + <% } // end for %> +
+ <% + if (data.isConferenceHidden(conf)) + { // conference is hidden - this command will show it + tail = "&cmd=SH&flag=0"; + image = "icn_off.gif"; + alt = "Hidden (toggle)"; + + } // end if + else + { // conference is non-hidden - this command will hide it + tail = "&cmd=SH&flag=1"; + image = "icn_on.gif"; + alt = "Displayed (toggle)"; + + } // end else + %> + <%= alt %> + + <% if (i==(data.getNumConferences()-1)) { %> <% } else { %> + <% tail = "&cmd=SS&oc=" + data.getNextConfID(conf); %> + ALT="Move Down" BORDER=0 WIDTH=16 + HEIGHT=16> + <% } // end if %> + + <% if (i==0) { %> <% } else { %> + <% tail = "&cmd=SS&oc=" + data.getPrevConfID(conf); %> + ALT="Move Up" BORDER=0 WIDTH=16 + HEIGHT=16> + <% } // end if %> + + "> ALT="Remove" BORDER=0 WIDTH=16 + HEIGHT=16> + <%= rdat.getStdFontTag(null,2) %> + <%= StringUtil.encodeHTML(conf.getName()) %> +

+ + + + + + + + + + + + + + + + + + + + + + +
+ ALT="Displayed (toggle)" BORDER=0 WIDTH=16 + HEIGHT=16> + <%= rdat.getStdFontTag(null,2) %> + This indicates that the conference is displayed in the SIG's conference list. Click the symbol + to hide it. +
+ ALT="Hidden (toggle)" BORDER=0 WIDTH=16 + HEIGHT=16> + <%= rdat.getStdFontTag(null,2) %> + This indicates that the conference is hidden in the SIG's conference list. Click the symbol + to display it. +
+ ALT="Move Down" BORDER=0 WIDTH=16 HEIGHT=16> + <%= rdat.getStdFontTag(null,2) %> + Click this symbol to move the specified conference down in the SIG's conference list. +
+ ALT="Move Up" BORDER=0 WIDTH=16 HEIGHT=16> + <%= rdat.getStdFontTag(null,2) %> + Click this symbol to move the specified conference up in the SIG's conference list. +
+ ALT="Remove" BORDER=0 WIDTH=16 HEIGHT=16> + <%= rdat.getStdFontTag(null,2) %> + Click this symbol to delete the specified conference. You will be prompted to confirm this + action. +
+<% } else { %> + <%= rdat.getStdFontTag(null,2) %>There are no conferences in this SIG. +<% } // end if %> +<% rdat.writeFooter(out); %> diff --git a/web/format/conferences.jsp b/web/format/conferences.jsp index b92e118..9db8cf6 100644 --- a/web/format/conferences.jsp +++ b/web/format/conferences.jsp @@ -55,11 +55,17 @@ <% } else { %> No conferences found in this SIG.
<% } // end if (conferences present) %> -<% if (data.canCreateConference()) { %> -

-

+

+

+ <% if (data.canManageConferences()) { %> + ">" ALT="Manage" WIDTH=80 HEIGHT=24 + BORDER=0>  + <% } // end if %> + <% if (data.canCreateConference()) { %> ">" ALT="Create New" WIDTH=80 HEIGHT=24 BORDER=0> -
-<% } // end if %> + SRC="<%= rdat.getFullImagePath("bn_create_new.gif") %>" ALT="Create New" WIDTH=80 HEIGHT=24 + BORDER=0>  + <% } // end if %> +
<% rdat.writeFooter(out); %> diff --git a/web/format/hotlist.jsp b/web/format/hotlist.jsp new file mode 100644 index 0000000..2dfcbb0 --- /dev/null +++ b/web/format/hotlist.jsp @@ -0,0 +1,99 @@ +<%-- + 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 . + + 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 , + for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + + Contributor(s): +--%> +<%@ page import = "java.util.*" %> +<%@ page import = "com.silverwrist.util.StringUtil" %> +<%@ page import = "com.silverwrist.venice.core.*" %> +<%@ page import = "com.silverwrist.venice.servlets.Variables" %> +<%@ page import = "com.silverwrist.venice.servlets.format.*" %> +<% + Hotlist data = Hotlist.retrieve(request); + Variables.failIfNull(data); + RenderData rdat = RenderConfig.createRenderData(application,request,response); +%> +<% if (rdat.useHTMLComments()) { %><% } %> +<% rdat.writeContentHeader(out,"Your Conference Hotlist",null); %> +<%= rdat.getStdFontTag(null,2) %> + ">Return to Front Page +

+<% if (data.getHotlistSize()>0) { %> + + <% for (int i=0; i + <% + ConferenceContext conf = data.getConference(i); + String partial = "settings?sig=" + conf.getEnclosingSIG().getSIGID() + "&conf=" + conf.getConfID(); + %> + + + + + + + <% } // end for %> +
+ <% if (i==(data.getHotlistSize()-1)) { %> <% } else { %> + "> ALT="Move Down" BORDER=0 WIDTH=16 + HEIGHT=16> + <% } // end if %> + + <% if (i==0) { %> <% } else { %> + "> ALT="Move Up" BORDER=0 WIDTH=16 + HEIGHT=16> + <% } // end if %> + + "> ALT="Remove" BORDER=0 WIDTH=16 + HEIGHT=16> + <%= rdat.getStdFontTag(null,2) %> + <%= StringUtil.encodeHTML(conf.getName()) %> + (<%= StringUtil.encodeHTML(conf.getEnclosingSIG().getName()) %>) +

+ + + + + + + + + + + + + +
+ ALT="Move Down" BORDER=0 WIDTH=16 HEIGHT=16> + <%= rdat.getStdFontTag(null,2) %> + Click this symbol to move the specified conference down in your hotlist. +
+ ALT="Move Up" BORDER=0 WIDTH=16 HEIGHT=16> + <%= rdat.getStdFontTag(null,2) %> + Click this symbol to move the specified conference up in your hotlist. +
+ ALT="Remove" BORDER=0 WIDTH=16 HEIGHT=16> + <%= rdat.getStdFontTag(null,2) %> + Click this symbol to remove the specified conference from your hotlist. +
+<% } else { %> + <%= rdat.getStdFontTag(null,2) %> + You have no conferences in your conference hotlist. You can add conferences to your hotlist + by visiting the conferences and pressing the "Add to Hotlist" button. + +<% } // end if %> +<% rdat.writeFooter(out); %> diff --git a/web/format/siglist.jsp b/web/format/siglist.jsp new file mode 100644 index 0000000..89cb8b7 --- /dev/null +++ b/web/format/siglist.jsp @@ -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 . + + 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 , + for Silverwrist Design Studios. Portions created by Eric J. Bowersox are + Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + + Contributor(s): +--%> +<%@ page import = "java.util.*" %> +<%@ page import = "com.silverwrist.util.StringUtil" %> +<%@ page import = "com.silverwrist.venice.core.*" %> +<%@ page import = "com.silverwrist.venice.servlets.Variables" %> +<%@ page import = "com.silverwrist.venice.servlets.format.*" %> +<% + UserSIGList data = UserSIGList.retrieve(request); + Variables.failIfNull(data); + RenderData rdat = RenderConfig.createRenderData(application,request,response); +%> +<% if (rdat.useHTMLComments()) { %><% } %> +<% rdat.writeContentHeader(out,"Your SIGs",null); %> +<%= rdat.getStdFontTag(null,2) %> + ">Return to Front Page +

+<% if (data.getNumSIGs()>0) { %> + + <% for (int i=0; i + <% SIGContext sig = data.getSIG(i); %> + + + + + <% } // end for %> +
+ <% if (sig.canUnjoin()) { %> + "> ALT="Unjoin" BORDER=0 WIDTH=16 + HEIGHT=16> + <% } else { %> <% } %> + <%= rdat.getStdFontTag(null,2) %> + "><%= StringUtil.encodeHTML(sig.getName()) %> +

+ + + + + + +
+ ALT="Unjoin" BORDER=0 WIDTH=16 HEIGHT=16> + <%= rdat.getStdFontTag(null,2) %> + Click this symbol to unjoin the specified SIG. +
+<% } else { %> + <%= rdat.getStdFontTag(null,2) %>You are not a member of any SIGs. +<% } // end if %> +<% rdat.writeFooter(out); %> diff --git a/web/images/icn_down.gif b/web/images/icn_down.gif new file mode 100644 index 0000000000000000000000000000000000000000..f430a9c1d0ee369af150061c051945d7219bce32 GIT binary patch literal 90 zcmZ?wbh9u|6krfw_{hL8bLRiFv@`$zGyMO5Mu!0iK;jHc#y$O+2j1?xC&2Gw{yO(( t?lnh8Q8Vw3pydvXcbD|(S)YH)x_N_U^Bet149!ly>mLPb@Ut>l0{|5mBL4sY literal 0 HcmV?d00001 diff --git a/web/images/icn_off.gif b/web/images/icn_off.gif new file mode 100644 index 0000000000000000000000000000000000000000..99f4da0cee9a63b630aee1e971283bfd9fba497b GIT binary patch literal 84 zcmZ?wbh9u|6krfw_{hL8bLM{r28Oh>GeA-Yh=HO43=B-VQ~EOxyxli1Wn-&!+)R!X^>M6b{ehrzWYj$Pj_O!kV4Yyz}4y}LX;dD?wP-V>vku%PW4AuZ&NhC1< literal 0 HcmV?d00001 diff --git a/web/images/icn_x.gif b/web/images/icn_x.gif new file mode 100644 index 0000000000000000000000000000000000000000..ed59ba98d95c585585059517ef8b458e66a5910d GIT binary patch literal 96 zcmZ?wbh9u|6krfw_{hL8bLRiFv@`!182%d@>o5QTNSuMmvZp`uz}tPtDtwzXSY&^) zP0I{@ZmM{=bLq^b7oN9hZMJy1XVIq^X1#(%2kR7s*x27BXdIRKytG4#i@_QIc$XyV literal 0 HcmV?d00001