From b1d1f8e3819428d4d674ab7345b80ce329c3efd6 Mon Sep 17 00:00:00 2001 From: "Eric J. Bowersox" Date: Sat, 31 May 2003 04:35:38 +0000 Subject: [PATCH] added community find page and some necessary patches to the framework, fixed bugs --- conf/venice-db-init-mysql.sql | 5 +- .../silverwrist/dynamo/db/GroupObject.java | 6 + .../silverwrist/dynamo/db/GroupObjectOps.java | 2 + .../dynamo/db/GroupObjectOps_mysql.java | 32 +++ .../com/silverwrist/dynamo/db/GroupProxy.java | 6 + .../silverwrist/dynamo/iface/DynamoGroup.java | 2 + .../venice/community/CommunityImpl.java | 14 ++ .../venice/community/CommunityOps_mysql.java | 20 +- venice-data/scripts/find_categories.js | 2 +- venice-data/scripts/find_communities.js | 147 ++++++++++++++ venice-data/scripts/find_users.js | 2 +- venice-data/util/session_init.js | 2 +- venice-data/velocity/find_categories.vm | 2 +- venice-data/velocity/find_communities.vm | 186 ++++++++++++++++++ venice-data/velocity/find_users.vm | 2 +- venice-data/velocity/stylesheets/adv_base.vm | 11 ++ .../velocity/stylesheets/normal_base.vm | 6 + 17 files changed, 430 insertions(+), 17 deletions(-) create mode 100644 venice-data/scripts/find_communities.js create mode 100644 venice-data/velocity/find_communities.vm diff --git a/conf/venice-db-init-mysql.sql b/conf/venice-db-init-mysql.sql index 51be039..dbe6259 100644 --- a/conf/venice-db-init-mysql.sql +++ b/conf/venice-db-init-mysql.sql @@ -1130,5 +1130,6 @@ INSERT INTO menuitems (menuid, sequence, itemtype, text, linktype, link, perm_ns INSERT INTO menus (menuid, menu_nsid, menu_name, title, subtitle) VALUES (4, 6, 'find.menu', 'Find', NULL); INSERT INTO menuitems (menuid, sequence, itemtype, text, linktype, link) VALUES - (4, 0, 'TEXT', 'Users', 'SERVLET', 'find_users.js.vs' ), - (4, 1, 'TEXT', 'Categories', 'SERVLET', 'find_categories.js.vs'); + (4, 0, 'TEXT', 'Communities', 'SERVLET', 'find_communities.js.vs'), + (4, 1, 'TEXT', 'Users', 'SERVLET', 'find_users.js.vs' ), + (4, 2, 'TEXT', 'Categories', 'SERVLET', 'find_categories.js.vs' ); diff --git a/src/dynamo-framework/com/silverwrist/dynamo/db/GroupObject.java b/src/dynamo-framework/com/silverwrist/dynamo/db/GroupObject.java index b64ae5e..e93b71e 100644 --- a/src/dynamo-framework/com/silverwrist/dynamo/db/GroupObject.java +++ b/src/dynamo-framework/com/silverwrist/dynamo/db/GroupObject.java @@ -608,4 +608,10 @@ class GroupObject implements DynamoGroup } // end setAcl + public synchronized int getMemberCount() throws DatabaseException + { + return m_ops.getMemberCount(m_gid); + + } // end getMemberCount + } // end class GroupObject diff --git a/src/dynamo-framework/com/silverwrist/dynamo/db/GroupObjectOps.java b/src/dynamo-framework/com/silverwrist/dynamo/db/GroupObjectOps.java index bdf865d..dafb6aa 100644 --- a/src/dynamo-framework/com/silverwrist/dynamo/db/GroupObjectOps.java +++ b/src/dynamo-framework/com/silverwrist/dynamo/db/GroupObjectOps.java @@ -60,4 +60,6 @@ abstract class GroupObjectOps extends OpsBase abstract void setAclID(int gid, int aclid) throws DatabaseException; + abstract int getMemberCount(int gid) throws DatabaseException; + } // end class GroupObjectOps diff --git a/src/dynamo-framework/com/silverwrist/dynamo/db/GroupObjectOps_mysql.java b/src/dynamo-framework/com/silverwrist/dynamo/db/GroupObjectOps_mysql.java index d82b59f..1972722 100644 --- a/src/dynamo-framework/com/silverwrist/dynamo/db/GroupObjectOps_mysql.java +++ b/src/dynamo-framework/com/silverwrist/dynamo/db/GroupObjectOps_mysql.java @@ -553,4 +553,36 @@ class GroupObjectOps_mysql extends GroupObjectOps } // end setAclID + int getMemberCount(int gid) throws DatabaseException + { + Connection conn = null; + PreparedStatement stmt = null; + ResultSet rs = null; + ArrayList tmp = null; + try + { // get a connection + conn = getConnection(); + + // create a query to get all the UIDs + stmt = conn.prepareStatement("SELECT COUNT(*) FROM groupmembers WHERE gid = ?;"); + stmt.setInt(1,gid); + rs = stmt.executeQuery(); + return SQLUtils.getReturnCountInt(rs,1); + + } // end try + catch (SQLException e) + { // translate to a general DatabaseException + throw generalException(e); + + } // end catch + finally + { // shut everything down + SQLUtils.shutdown(rs); + SQLUtils.shutdown(stmt); + SQLUtils.shutdown(conn); + + } // end finally + + } // end getMemberCount + } // end class GroupObjectOps_mysql diff --git a/src/dynamo-framework/com/silverwrist/dynamo/db/GroupProxy.java b/src/dynamo-framework/com/silverwrist/dynamo/db/GroupProxy.java index ae05fa4..391caf2 100644 --- a/src/dynamo-framework/com/silverwrist/dynamo/db/GroupProxy.java +++ b/src/dynamo-framework/com/silverwrist/dynamo/db/GroupProxy.java @@ -235,6 +235,12 @@ abstract class GroupProxy implements DynamoGroup, DynamicWrapper } // end setAcl + public int getMemberCount() throws DatabaseException + { + return getRealGroup().getMemberCount(); + + } // end getMemberCount + /*-------------------------------------------------------------------------------- * Implementations from interface DynamicWrapper *-------------------------------------------------------------------------------- diff --git a/src/dynamo-framework/com/silverwrist/dynamo/iface/DynamoGroup.java b/src/dynamo-framework/com/silverwrist/dynamo/iface/DynamoGroup.java index b080425..b661cb7 100644 --- a/src/dynamo-framework/com/silverwrist/dynamo/iface/DynamoGroup.java +++ b/src/dynamo-framework/com/silverwrist/dynamo/iface/DynamoGroup.java @@ -45,4 +45,6 @@ public interface DynamoGroup extends Group, NamedObject, SecureObjectStore public void setAcl(DynamoUser caller, DynamoAcl acl) throws DatabaseException, DynamoSecurityException; + public int getMemberCount() throws DatabaseException; + } // end interface DynamoGroup diff --git a/src/venice-base/com/silverwrist/venice/community/CommunityImpl.java b/src/venice-base/com/silverwrist/venice/community/CommunityImpl.java index 5d0cc7d..b717a73 100644 --- a/src/venice-base/com/silverwrist/venice/community/CommunityImpl.java +++ b/src/venice-base/com/silverwrist/venice/community/CommunityImpl.java @@ -185,6 +185,8 @@ class CommunityImpl implements VeniceCommunity */ public Object getObject(String namespace, String name) { + if (logger.isDebugEnabled()) + logger.debug("CommunityImpl.getObject: namespace = " + namespace + ", name = " + name); try { // convert the namespace name to an ID here PropertyKey key = new PropertyKey(m_nscache.namespaceNameToId(namespace),name); @@ -196,19 +198,31 @@ class CommunityImpl implements VeniceCommunity { // no use - need to try the database rc = m_ops.getProperty(m_id,key); if (rc!=null) + { // found in the database m_properties.put(key,rc); + logger.debug("value found in database"); + + } // end if } // end if + else + logger.debug("value found in cache"); } // end synchronized block if (rc==null) + { // the object was not found + logger.debug("value not found"); throw new NoSuchObjectException(this.toString(),namespace,name); + + } // end if + return rc; } // end try catch (DatabaseException e) { // translate into our NoSuchObjectException but retain the DatabaseException + logger.debug("Database exception while doing find",e); throw new NoSuchObjectException(this.toString(),namespace,name,e); } // end catch diff --git a/src/venice-base/com/silverwrist/venice/community/CommunityOps_mysql.java b/src/venice-base/com/silverwrist/venice/community/CommunityOps_mysql.java index 11f1df9..e94e508 100644 --- a/src/venice-base/com/silverwrist/venice/community/CommunityOps_mysql.java +++ b/src/venice-base/com/silverwrist/venice/community/CommunityOps_mysql.java @@ -150,7 +150,7 @@ class CommunityOps_mysql extends CommunityOps conn = getConnection(); // look up the property - stmt = conn.prepareStatement("SELECT prop_value FROM commprop WHERE cid = ? AND nsid = ? AND prop_name = ?;"); + stmt = conn.prepareStatement("SELECT prop_value FROM commprops WHERE cid = ? AND nsid = ? AND prop_name = ?;"); stmt.setInt(1,cid); stmt.setInt(2,key.getNamespaceID()); stmt.setString(3,key.getName()); @@ -209,10 +209,10 @@ class CommunityOps_mysql extends CommunityOps // lock the table stmt2 = conn.createStatement(); - stmt2.executeUpdate("LOCK TABLES commprop WRITE, communities WRITE;"); + stmt2.executeUpdate("LOCK TABLES commprops WRITE, communities WRITE;"); // look to see if the property value is already there - stmt = conn.prepareStatement("SELECT prop_value FROM commprop WHERE cid = ? AND nsid = ? AND prop_name = ?;"); + stmt = conn.prepareStatement("SELECT prop_value FROM commprops WHERE cid = ? AND nsid = ? AND prop_name = ?;"); stmt.setInt(1,cid); stmt.setInt(2,key.getNamespaceID()); stmt.setString(3,key.getName()); @@ -225,7 +225,7 @@ class CommunityOps_mysql extends CommunityOps if (old_value!=null) { // prepare the statement to update the existing record - stmt = conn.prepareStatement("UPDATE commprop SET prop_value = ? WHERE cid = ? AND nsid = ? " + stmt = conn.prepareStatement("UPDATE commprops SET prop_value = ? WHERE cid = ? AND nsid = ? " + "AND prop_name = ?;"); stmt.setString(1,serialized_value); stmt.setInt(2,cid); @@ -235,7 +235,7 @@ class CommunityOps_mysql extends CommunityOps } // end if else { // prepare the statement to insert a new record - stmt = conn.prepareStatement("INSERT INTO commprop (cid, nsid, prop_name, prop_value) VALUES (?, ?, ?, ?);"); + stmt = conn.prepareStatement("INSERT INTO commprops (cid, nsid, prop_name, prop_value) VALUES (?, ?, ?, ?);"); stmt.setInt(1,cid); stmt.setInt(2,key.getNamespaceID()); stmt.setString(3,key.getName()); @@ -293,10 +293,10 @@ class CommunityOps_mysql extends CommunityOps // lock the table stmt2 = conn.createStatement(); - stmt2.executeUpdate("LOCK TABLES commprop WRITE, communities WRITE;"); + stmt2.executeUpdate("LOCK TABLES commprops WRITE, communities WRITE;"); // look to see if the property value is already there - stmt = conn.prepareStatement("SELECT prop_value FROM commprop WHERE cid = ? AND nsid = ? AND prop_name = ?;"); + stmt = conn.prepareStatement("SELECT prop_value FROM commprops WHERE cid = ? AND nsid = ? AND prop_name = ?;"); stmt.setInt(1,cid); stmt.setInt(2,key.getNamespaceID()); stmt.setString(3,key.getName()); @@ -311,7 +311,7 @@ class CommunityOps_mysql extends CommunityOps SQLUtils.shutdown(stmt); // delete the database row - stmt = conn.prepareStatement("DELETE FROM commprop WHERE cid = ? AND nsid = ? AND prop_name = ?;"); + stmt = conn.prepareStatement("DELETE FROM commprops WHERE cid = ? AND nsid = ? AND prop_name = ?;"); stmt.setInt(1,cid); stmt.setInt(2,key.getNamespaceID()); stmt.setString(3,key.getName()); @@ -358,7 +358,7 @@ class CommunityOps_mysql extends CommunityOps conn = getConnection(); // execute the query! - stmt = conn.prepareStatement("SELECT DISTINCT nsid FROM commprop WHERE cid = ?;"); + stmt = conn.prepareStatement("SELECT DISTINCT nsid FROM commprops WHERE cid = ?;"); stmt.setInt(1,cid); rs = stmt.executeQuery(); @@ -400,7 +400,7 @@ class CommunityOps_mysql extends CommunityOps conn = getConnection(); // execute the query! - stmt = conn.prepareStatement("SELECT prop_name, prop_value FROM commprop WHERE cid = ? AND nsid = ?;"); + stmt = conn.prepareStatement("SELECT prop_name, prop_value FROM commprops WHERE cid = ? AND nsid = ?;"); stmt.setInt(1,cid); stmt.setInt(2,namespace); rs = stmt.executeQuery(); diff --git a/venice-data/scripts/find_categories.js b/venice-data/scripts/find_categories.js index aa50563..ec4db5e 100644 --- a/venice-data/scripts/find_categories.js +++ b/venice-data/scripts/find_categories.js @@ -90,7 +90,7 @@ if (rc==null) rc.setParameter("results",results); // Load the profile menu. - mprov = vcast.queryMenuProvider(req_help.getRequestObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"venice-menus")); + mprov = vcast.queryMenuProvider(rhelp.getRequestObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"venice-menus")); menu = mprov.getInlineMenu(user,VeniceNamespaces.CONTENT_LAF_NAMESPACE,"find.menu",cast.newIntArray(0)); ndx = menu.getItemContainingLinkText("find_categories.js.vs"); menu.setSelectedIndex(ndx); diff --git a/venice-data/scripts/find_communities.js b/venice-data/scripts/find_communities.js new file mode 100644 index 0000000..314e12d --- /dev/null +++ b/venice-data/scripts/find_communities.js @@ -0,0 +1,147 @@ +// 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) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. +// +// Contributor(s): + +importPackage(java.lang); +importClass(Packages.com.silverwrist.dynamo.Namespaces); +importPackage(Packages.com.silverwrist.dynamo.iface); +importPackage(Packages.com.silverwrist.dynamo.util); +importClass(Packages.com.silverwrist.venice.CommunitySearchField); +importClass(Packages.com.silverwrist.venice.SearchMode); +importClass(Packages.com.silverwrist.venice.VeniceNamespaces); +importPackage(Packages.com.silverwrist.venice.community); +importPackage(Packages.com.silverwrist.venice.content); +importPackage(Packages.com.silverwrist.venice.iface); + +req = bsf.lookupBean("request"); // get request +rhelp = bsf.lookupBean("request_help"); // get request helper +session = rhelp.getSession(); // get the session +user = vlib.getUser(session); // get user + +// Tell the session we visited this page last. +session.setObject("/find.js.vs","last.visited","find_communities.js.vs"); + +// Get the user's configured page size. +pagesize = cast.toInteger(user.getObject(VeniceNamespaces.USER_SETTINGS_NAMESPACE,"search.result.count")); + +field = CommunitySearchField.NAME; +mode = SearchMode.PREFIX; +term = ""; +ofs = 0; +fcount = -1; +results = null; +category = null; +rc = null; + +if (rhelp.isVerb("POST")) +{ // Read the form parameters + field = CommunitySearchField.getEnum(rhelp.getParameter("field")); + mode = SearchMode.getEnum(rhelp.getParameter("mode")); + term = rhelp.getParameter("term"); + ofs = rhelp.getParameterInt("ofs",0); + fcount = rhelp.getParameterInt("fcount",-1); + + if (rhelp.hasParameter("cat")) + { // get the current category + catsvc = vcast.queryCategoryService(rhelp.getRequestObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"categories")); + category = catsvc.getCategory(rhelp.getParameterInt("cat",-1)); + + } // end if + + // Adjust offset based on the button that was clicked. + if (rhelp.isImageButtonClicked("search")) + { // beginning of a new search + ofs = 0; + fcount = -1; + + } // end if + else if (rhelp.isImageButtonClicked("previous")) + ofs = Math.max(ofs - pagesize,0); + else if (rhelp.isImageButtonClicked("next")) + ofs += pagesize; + + // Get the community service object. + commsvc = vcast.queryCommunityService(rhelp.getRequestObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"communities")); + + try + { // search for communities! + if (category!=null) + { // look in the category + if (fcount<0) + fcount = commsvc.getNumCommunitiesInCategory(user,category); + results = commsvc.getCommunitiesInCategory(user,category,ofs,pagesize); + + } // end if + else + { // do a normal search + if (fcount<0) + fcount = commsvc.getSearchCommunityCount(user,field,mode,term); + results = commsvc.searchForCommunities(user,field,mode,term,ofs,pagesize); + + } // end else + + } // end try + catch (e) + { // exception thrown + rc = new ErrorBox("Database Error",e,"SERVLET","find_communities.js.vs"); + + } // end catch + +} // end if +else +{ // get the category we're loading + catsvc = vcast.queryCategoryService(rhelp.getRequestObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"categories")); + commsvc = vcast.queryCommunityService(rhelp.getRequestObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"communities")); + try + { // get the category and listings + category = catsvc.getCategory(rhelp.getParameterInt("cat",-1)); + fcount = commsvc.getNumCommunitiesInCategory(user,category); + results = commsvc.getCommunitiesInCategory(user,category,0,pagesize); + if (results.isEmpty()) + results = null; + + } // end try + catch (e) + { // exception thrown + rc = new ErrorBox("Database Error",e,"SERVLET","find_communities.js.vs"); + + } // end catch + +} // end else + +if (rc==null) +{ // create the VelocityView for the output + rc = new VelocityView("Find Communities","find_communities.vm"); + rc.setParameter("field",field.getName()); + rc.setParameter("mode",mode.getName()); + rc.setParameter("term",term.toString()); + rc.setParameter("ofs",cast.toIntegerObject(ofs)); + rc.setParameter("fcount",cast.toIntegerObject(fcount)); + rc.setParameter("pagesize",cast.toIntegerObject(pagesize)); + if (category!=null) + rc.setParameter("category",category); + if (results!=null) + rc.setParameter("results",results); + + // Load the profile menu. + mprov = vcast.queryMenuProvider(rhelp.getRequestObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"venice-menus")); + menu = mprov.getInlineMenu(user,VeniceNamespaces.CONTENT_LAF_NAMESPACE,"find.menu",cast.newIntArray(0)); + ndx = menu.getItemContainingLinkText("find_communities.js.vs"); + menu.setSelectedIndex(ndx); + rc.setParameter("menu",menu); + +} // end if + +dynamo.scriptOutput(rc); diff --git a/venice-data/scripts/find_users.js b/venice-data/scripts/find_users.js index df420be..2d1ef5c 100644 --- a/venice-data/scripts/find_users.js +++ b/venice-data/scripts/find_users.js @@ -94,7 +94,7 @@ if (rc==null) rc.setParameter("results",results); // Load the profile menu. - mprov = vcast.queryMenuProvider(req_help.getRequestObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"venice-menus")); + mprov = vcast.queryMenuProvider(rhelp.getRequestObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"venice-menus")); menu = mprov.getInlineMenu(user,VeniceNamespaces.CONTENT_LAF_NAMESPACE,"find.menu",cast.newIntArray(0)); ndx = menu.getItemContainingLinkText("find_users.js.vs"); menu.setSelectedIndex(ndx); diff --git a/venice-data/util/session_init.js b/venice-data/util/session_init.js index 9220a3d..c19a80e 100644 --- a/venice-data/util/session_init.js +++ b/venice-data/util/session_init.js @@ -64,7 +64,7 @@ if (rhelp.isRequestType("_SESSION") && rhelp.isVerb("PUT")) // Configure other session attributes. session = rhelp.getSession(); - session.setObject("/find.js.vs","last.visited","find_categories.js.vs"); + session.setObject("/find.js.vs","last.visited","find_communities.js.vs"); } // end if (session is HTTP) diff --git a/venice-data/velocity/find_categories.vm b/venice-data/velocity/find_categories.vm index 662aaaf..01252b0 100644 --- a/venice-data/velocity/find_categories.vm +++ b/venice-data/velocity/find_categories.vm @@ -67,7 +67,7 @@ #comment( "Results display" )
-
+ Search Results #if( $is_form >= 1 ) (Displaying ${ndx_first}-${ndx_last} of ${fcount}) diff --git a/venice-data/velocity/find_communities.vm b/venice-data/velocity/find_communities.vm new file mode 100644 index 0000000..12b1e46 --- /dev/null +++ b/venice-data/velocity/find_communities.vm @@ -0,0 +1,186 @@ +#* + 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) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved. + + Contributor(s): +*# +#* + Parameters: + field = Search field (string equivalent) + mode = Search mode (string equivalent) + term = Search term + ofs = Offset within the search we're at right now + fcount = Total number of items found in current search + pagesize = Number of items to display per page + category = Current category (may be null) + results = Results list from find, a List of DynamoUser objects (may be null) + menu = Tab menu to render across the top +*# +#render( $menu ) +#header1( "Find Communities" ) +
+ + #comment( "Find Communities form" ) +

+ Display all communities whose  +   +    +

+

#button( "INPUT" "search" )

+
+ #comment( "end Find Communities form" ) +
+ +#if( $category ) + #comment( "Category Name" ) +
+
+ Category: + #if ( $category.getCategoryID()<0 ) + Top + #else + Top + #set( $limit = $category.getNumLevels() - 1 ) + #foreach( $i in [0..$limit] ) + #if( $i < $limit ) + : #encodeHTML( $category.getTitleAtLevel($i) ) + #else + : #encodeHTML( $category.getTitleAtLevel($i) ) + #end + #end + #end +

+ + #set( $list = $category.getSubCategories() ) + #if( $list.size() > 0 ) + #comment( "Begin Category List" ) +
+ Subcategories: + #foreach( $subcat in $category.getSubCategories() ) + #set( $endpt = $subcat.getNumLevels() - 1 ) +
#bullet() + #encodeHTML( $subcat.getTitleAtLevel($endpt) ) + #if( $subcat.isSymbolicLink() )@#end + #end +
+ #comment( "End Category List" ) + #end +#end + +#if( $results ) + ## Do a tricky set of computations here to figure out what we need to display in terms of the search results + ## and the form to the right that lets us page through results. + #set( $resultcount = $results.size() ) + #set( $is_next = 0 ) + #set( $is_prev = 0 ) + #if( $resultcount > $pagesize ) + #set( $resultcount = $pagesize ) + #set( $is_next = 1 ) + #end + #if( $ofs > 0 ) + #set( $is_prev = 1 ) + #end + #set( $is_form = $is_next + $is_prev ) + #set( $ndx_first = $ofs + 1 ) + #set( $ndx_last = $ofs + $pagesize ) + #if( $ndx_last > $fcount ) + #set( $ndx_last = $fcount ) + #end + + #comment( "Results display" ) +
+ + + +
+ #if( $category ) + Communities In Category + #else + Search Results + #end + #if( $is_form >= 1 ) + (Displaying ${ndx_first}-${ndx_last} of ${fcount}) + #end + + #if( $is_form >= 1 ) + #comment( "Results navigation form" ) +
+ #if( $category ) + + #end + + + + + + #if( $is_prev == 1 ) + #button( "INPUT" "previous" ) + #else + #button( "IMAGE" "0transparent" ) + #end +    + #if( $is_next == 1 ) + #button( "INPUT" "next" ) + #else + #button( "IMAGE" "0transparent" ) + #end +
+ #else +   + #end +
+ + #if( $fcount > 0 ) + #set( $prof_ns = "http://www.silverwrist.com/NS/venice/2003/05/29/community.profile" ) + #set( $i = $resultcount ) + + #foreach( $comm in $results ) + #set( $i = $i - 1 ) + #if( $i >= 0 ) + #set( $descr = $std.getProperty($comm,$prof_ns,"synopsis") ) + #set( $mcount = $comm.getMemberGroup().getMemberCount() ) + + + + + #end + #end +
#bullet() + #encodeHTML( $comm.Name )
+ Host: #encodeHTML( $comm.HostUser.Name ) + - $mcount + #if( $mcount == 1 ) + member + #else + members + #end +
Latest activity: #formatActivity( $comm.LastUpdateDate ) + #if( $descr ) +
#encodeHTML( $descr ) + #end +
+ #else + No communities found. + #end + + #comment( "End results display" ) +#end diff --git a/venice-data/velocity/find_users.vm b/venice-data/velocity/find_users.vm index f15c3c9..724bf3e 100644 --- a/venice-data/velocity/find_users.vm +++ b/venice-data/velocity/find_users.vm @@ -74,7 +74,7 @@ #comment( "Results display" )
-
+ Search Results #if( $is_form >= 1 ) (Displaying ${ndx_first}-${ndx_last} of ${fcount}) diff --git a/venice-data/velocity/stylesheets/adv_base.vm b/venice-data/velocity/stylesheets/adv_base.vm index 8369092..c7b25f5 100644 --- a/venice-data/velocity/stylesheets/adv_base.vm +++ b/venice-data/velocity/stylesheets/adv_base.vm @@ -38,6 +38,13 @@ body td.smcontent, body div.smcontent, body p.smcontent { font-size: x-small; } +body td.subhead, body div.subhead, body p.subhead { + font-size: small; + voice-family: "\"}\""; + voice-family: inherit; + font-size: medium; + } + body td.framefooter, body div.framefooter, body p.framefooter { font-size: xx-small; voice-family: "\"}\""; @@ -85,6 +92,10 @@ html>body td.smcontent, html>body div.smcontent, html>body p.smcontent { font-size: x-small; } +html>body td.subhead, html>body div.subhead, html>body p.subhead { + font-size: medium; + } + html>body td.framefooter, html>body div.framefooter, html>body p.framefooter { font-size: x-small; } diff --git a/venice-data/velocity/stylesheets/normal_base.vm b/venice-data/velocity/stylesheets/normal_base.vm index f10bf5a..592afbd 100644 --- a/venice-data/velocity/stylesheets/normal_base.vm +++ b/venice-data/velocity/stylesheets/normal_base.vm @@ -68,6 +68,12 @@ div.frametopright { font-size: 9px; } +.subhead { + color: #000000; + background-color: #ffffff; + font-size: 15px; + } + .framefooter { color: #000000; background-color: #ffffff;