added community logo support and the logo on top of the community left menu;
fixed some bugs with menu handling
This commit is contained in:
parent
f8ddd74223
commit
2aae5c47eb
|
@ -167,7 +167,7 @@
|
||||||
|
|
||||||
<object name="venice-frame" classname="com.silverwrist.venice.frame.FrameAssembler" priority="101">
|
<object name="venice-frame" classname="com.silverwrist.venice.frame.FrameAssembler" priority="101">
|
||||||
<global-properties object="globals"/>
|
<global-properties object="globals"/>
|
||||||
<providers security="srm" menu="venice-menus"/>
|
<providers security="srm" menu="venice-menus" commlogo="venice-communitylogo"/>
|
||||||
</object>
|
</object>
|
||||||
|
|
||||||
<object name="venice-content" classname="com.silverwrist.venice.content.StandardContentSupplier" priority="100">
|
<object name="venice-content" classname="com.silverwrist.venice.content.StandardContentSupplier" priority="100">
|
||||||
|
@ -182,6 +182,10 @@
|
||||||
<global-properties object="globals"/>
|
<global-properties object="globals"/>
|
||||||
</object>
|
</object>
|
||||||
|
|
||||||
|
<object name="venice-communitylogo" classname="com.silverwrist.venice.content.CommunityLogoRenderer" priority="100">
|
||||||
|
<global-properties object="globals"/>
|
||||||
|
</object>
|
||||||
|
|
||||||
<object name="venice-dlg-manager" classname="com.silverwrist.venice.dialog.VeniceDialogManager" priority="101">
|
<object name="venice-dlg-manager" classname="com.silverwrist.venice.dialog.VeniceDialogManager" priority="101">
|
||||||
<providers button="venice-buttons" content="venice-content"/>
|
<providers button="venice-buttons" content="venice-content"/>
|
||||||
</object>
|
</object>
|
||||||
|
|
|
@ -167,7 +167,7 @@
|
||||||
|
|
||||||
<object name="venice-frame" classname="com.silverwrist.venice.frame.FrameAssembler" priority="101">
|
<object name="venice-frame" classname="com.silverwrist.venice.frame.FrameAssembler" priority="101">
|
||||||
<global-properties object="globals"/>
|
<global-properties object="globals"/>
|
||||||
<providers security="srm" menu="venice-menus"/>
|
<providers security="srm" menu="venice-menus" commlogo="venice-communitylogo"/>
|
||||||
</object>
|
</object>
|
||||||
|
|
||||||
<object name="venice-content" classname="com.silverwrist.venice.content.StandardContentSupplier" priority="100">
|
<object name="venice-content" classname="com.silverwrist.venice.content.StandardContentSupplier" priority="100">
|
||||||
|
@ -182,6 +182,10 @@
|
||||||
<global-properties object="globals"/>
|
<global-properties object="globals"/>
|
||||||
</object>
|
</object>
|
||||||
|
|
||||||
|
<object name="venice-communitylogo" classname="com.silverwrist.venice.content.CommunityLogoRenderer" priority="100">
|
||||||
|
<global-properties object="globals"/>
|
||||||
|
</object>
|
||||||
|
|
||||||
<object name="venice-dlg-manager" classname="com.silverwrist.venice.dialog.VeniceDialogManager" priority="101">
|
<object name="venice-dlg-manager" classname="com.silverwrist.venice.dialog.VeniceDialogManager" priority="101">
|
||||||
<providers button="venice-buttons" content="venice-content"/>
|
<providers button="venice-buttons" content="venice-content"/>
|
||||||
</object>
|
</object>
|
||||||
|
|
|
@ -618,7 +618,11 @@ INSERT INTO globalprop (nsid, prop_name, prop_value) VALUES
|
||||||
(15, 'rules', '!Please treat one another with courtesy and respect.'),
|
(15, 'rules', '!Please treat one another with courtesy and respect.'),
|
||||||
(15, 'language', '_LANG:en-US' ),
|
(15, 'language', '_LANG:en-US' ),
|
||||||
(15, 'country', '_CTRY:US' ),
|
(15, 'country', '_CTRY:US' ),
|
||||||
(16, 'options', '_OS:A' );
|
(16, 'options', '_OS:A' ),
|
||||||
|
(16, 'community.logo.width', 'I110' ),
|
||||||
|
(16, 'community.logo.height', 'I65' ),
|
||||||
|
(16, 'community.nologo.url', '!community_other.jpg' ),
|
||||||
|
(16, 'community.nologo.url.type', '!IMAGE' );
|
||||||
|
|
||||||
# Initial global blocks setup
|
# Initial global blocks setup
|
||||||
INSERT INTO globalblock (nsid, block_name, block) VALUES
|
INSERT INTO globalblock (nsid, block_name, block) VALUES
|
||||||
|
@ -842,7 +846,8 @@ INSERT INTO auditevent (eventid, event_nsid, event_name, descr) VALUES
|
||||||
|
|
||||||
# Insert some image types.
|
# Insert some image types.
|
||||||
INSERT INTO imagetype (typecode, nsid, name) VALUES
|
INSERT INTO imagetype (typecode, nsid, name) VALUES
|
||||||
(1, 11, 'user.photo');
|
(1, 11, 'user.photo' ),
|
||||||
|
(2, 15, 'community.logo');
|
||||||
|
|
||||||
# Create the "members" group for the initial community.
|
# Create the "members" group for the initial community.
|
||||||
# (GID 4)
|
# (GID 4)
|
||||||
|
|
|
@ -0,0 +1,318 @@
|
||||||
|
/*
|
||||||
|
* 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) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.content;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
import org.w3c.dom.*;
|
||||||
|
import com.silverwrist.util.xml.*;
|
||||||
|
import com.silverwrist.dynamo.event.*;
|
||||||
|
import com.silverwrist.dynamo.except.*;
|
||||||
|
import com.silverwrist.dynamo.iface.*;
|
||||||
|
import com.silverwrist.dynamo.util.*;
|
||||||
|
import com.silverwrist.venice.VeniceNamespaces;
|
||||||
|
import com.silverwrist.venice.iface.*;
|
||||||
|
|
||||||
|
public class CommunityLogoRenderer
|
||||||
|
implements NamedObject, ComponentInitialize, ComponentShutdown, DynamicUpdateListener, ServiceProvider,
|
||||||
|
RenderImage
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Internal rendering object
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private class RenderObject implements SelfRenderable
|
||||||
|
{
|
||||||
|
/*====================================================================
|
||||||
|
* Attributes
|
||||||
|
*====================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
private String m_url;
|
||||||
|
|
||||||
|
/*====================================================================
|
||||||
|
* Constructor
|
||||||
|
*====================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
RenderObject(String url)
|
||||||
|
{
|
||||||
|
m_url = url;
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*====================================================================
|
||||||
|
* Implementations from interface SelfRenderable
|
||||||
|
*====================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void render(SelfRenderControl control) throws IOException, RenderingException
|
||||||
|
{
|
||||||
|
renderImageTag(control.getTextRender(),m_url);
|
||||||
|
|
||||||
|
} // end render
|
||||||
|
|
||||||
|
} // end class RenderObject
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static data members
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static Logger logger = Logger.getLogger(CommunityLogoRenderer.class);
|
||||||
|
|
||||||
|
private static final String NAMESPACE = VeniceNamespaces.COMMUNITY_GLOBALS_NAMESPACE;
|
||||||
|
private static final String PROP_WIDTH = "community.logo.width";
|
||||||
|
private static final String PROP_HEIGHT = "community.logo.height";
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private String m_name = null; // object name
|
||||||
|
private ObjectProvider m_props; // pointer to global property provider
|
||||||
|
private ComponentShutdown m_shut_event; // event handler shutdown
|
||||||
|
private int m_width; // width for community logos
|
||||||
|
private int m_height; // height for community logos
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructor
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public CommunityLogoRenderer()
|
||||||
|
{ // do nothing
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Internal operations
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private final int getInitInteger(String name) throws ConfigException
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{ // call through to the property provider
|
||||||
|
return ((Integer)(m_props.getObject(NAMESPACE,name))).intValue();
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (NoSuchObjectException e)
|
||||||
|
{ // the property value isn't present? yIkes!
|
||||||
|
ConfigException ce = new ConfigException(CommunityLogoRenderer.class,"ContentMessages","prop.missing",e);
|
||||||
|
ce.setParameter(0,name);
|
||||||
|
throw ce;
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (ClassCastException e)
|
||||||
|
{ // not an Integer? for shame!
|
||||||
|
ConfigException ce = new ConfigException(CommunityLogoRenderer.class,"ContentMessages","prop.wrongType",e);
|
||||||
|
ce.setParameter(0,name);
|
||||||
|
throw ce;
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
} // end getInitInteger
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface NamedObject
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public String getName()
|
||||||
|
{
|
||||||
|
return m_name;
|
||||||
|
|
||||||
|
} // end getName
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface ComponentInitialize
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the component.
|
||||||
|
*
|
||||||
|
* @param config_root Pointer to the section of the Dynamo XML configuration file that configures this
|
||||||
|
* particular component. This is to be considered "read-only" by the component.
|
||||||
|
* @param services An implementation of {@link com.silverwrist.dynamo.iface.ServiceProvider ServiceProvider}
|
||||||
|
* which provides initialization services to the component. This will include an implementation
|
||||||
|
* of {@link com.silverwrist.dynamo.iface.ObjectProvider ObjectProvider} which may be used to
|
||||||
|
* get information about other objects previously initialized by the application.
|
||||||
|
* @exception com.silverwrist.dynamo.except.ConfigException If an error is encountered in the component
|
||||||
|
* configuration.
|
||||||
|
*/
|
||||||
|
public void initialize(Element config_root, ServiceProvider services) throws ConfigException
|
||||||
|
{
|
||||||
|
logger.info("CommunityLogoRenderer initializing");
|
||||||
|
|
||||||
|
XMLLoader loader = XMLLoader.get();
|
||||||
|
String gprops = null;
|
||||||
|
try
|
||||||
|
{ // verify the right node name
|
||||||
|
loader.verifyNodeName(config_root,"object");
|
||||||
|
|
||||||
|
// get the object's name
|
||||||
|
m_name = loader.getAttribute(config_root,"name");
|
||||||
|
|
||||||
|
// get the name of the global properties object
|
||||||
|
DOMElementHelper config_root_h = new DOMElementHelper(config_root);
|
||||||
|
Element foo = loader.getSubElement(config_root_h,"global-properties");
|
||||||
|
gprops = loader.getAttribute(foo,"object");
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (XMLLoadException e)
|
||||||
|
{ // error loading XML config data
|
||||||
|
logger.fatal("XML loader exception in CommunityLogoRenderer",e);
|
||||||
|
throw new ConfigException(e);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
// Get the standard properties provider.
|
||||||
|
ServiceProvider gdm_sp =
|
||||||
|
(ServiceProvider)(GetObjectUtils.getDynamoComponent(services,ServiceProvider.class,gprops));
|
||||||
|
try
|
||||||
|
{ // get the "properties" service from that object
|
||||||
|
m_props = (ObjectProvider)(gdm_sp.queryService(ObjectProvider.class,"properties"));
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (NoSuchServiceException e)
|
||||||
|
{ // this shouldn't happen, but...
|
||||||
|
logger.fatal("Unable to find global properties object \"" + gprops + "\"",e);
|
||||||
|
throw new ConfigException(CommunityLogoRenderer.class,"ContentMessages","init.noProp",e);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
// Get the initial property values for our properties.
|
||||||
|
m_width = getInitInteger(PROP_WIDTH);
|
||||||
|
m_height = getInitInteger(PROP_HEIGHT);
|
||||||
|
|
||||||
|
// Register with the event listener to monitor those property values.
|
||||||
|
EventListenerRegistration reg =
|
||||||
|
(EventListenerRegistration)(services.queryService(EventListenerRegistration.class));
|
||||||
|
m_shut_event = reg.registerDynamicUpdateListener(GlobalPropertyUpdateEvent.class,this);
|
||||||
|
|
||||||
|
} // end initialize
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface ComponentShutdown
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void shutdown()
|
||||||
|
{
|
||||||
|
m_shut_event.shutdown();
|
||||||
|
m_shut_event = null;
|
||||||
|
m_props = null;
|
||||||
|
|
||||||
|
} // end shutdown
|
||||||
|
|
||||||
|
public void updateReceived(DynamicUpdateEvent evt)
|
||||||
|
{
|
||||||
|
GlobalPropertyUpdateEvent event = (GlobalPropertyUpdateEvent)evt;
|
||||||
|
if (NAMESPACE.equals(event.getPropertyNamespace()))
|
||||||
|
{ // see if this is one of the properties we monitor
|
||||||
|
try
|
||||||
|
{ // reuse the "initialization" getters here
|
||||||
|
if (PROP_WIDTH.equals(event.getPropertyName()))
|
||||||
|
{ // process new width
|
||||||
|
int x = getInitInteger(PROP_WIDTH);
|
||||||
|
m_width = x;
|
||||||
|
|
||||||
|
} // end else if
|
||||||
|
else if (PROP_HEIGHT.equals(event.getPropertyName()))
|
||||||
|
{ // process new height
|
||||||
|
int x = getInitInteger(PROP_HEIGHT);
|
||||||
|
m_height = x;
|
||||||
|
|
||||||
|
} // end else if
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (ConfigException ce)
|
||||||
|
{ // property get failed - don't change the value
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end updateReceived
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface ServiceProvider
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Queries this object for a specified service.
|
||||||
|
*
|
||||||
|
* @param klass The class of the object that should be returned as a service.
|
||||||
|
* @return A service object. The service object is guaranteed to be of the class
|
||||||
|
* specified by <CODE>klass</CODE>; that is, if <CODE>queryService(klass)</CODE>
|
||||||
|
* yields some object <CODE>x</CODE>, then the expression <CODE>klass.isInstance(x)</CODE>
|
||||||
|
* is true.
|
||||||
|
* @exception com.silverwrist.dynamo.except.NoSuchServiceException If no service is available in
|
||||||
|
* the specified class.
|
||||||
|
*/
|
||||||
|
public Object queryService(Class klass)
|
||||||
|
{
|
||||||
|
if (klass==RenderImage.class)
|
||||||
|
return (RenderImage)this;
|
||||||
|
throw new NoSuchServiceException(getName(),klass);
|
||||||
|
|
||||||
|
} // end queryService
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Queries this object for a specified service.
|
||||||
|
*
|
||||||
|
* @param klass The class of the object that should be returned as a service.
|
||||||
|
* @param serviceid ID for the service to be requested, to further discriminate between requests.
|
||||||
|
* @return A service object. The service object is guaranteed to be of the class
|
||||||
|
* specified by <CODE>klass</CODE>; that is, if <CODE>queryService(klass)</CODE>
|
||||||
|
* yields some object <CODE>x</CODE>, then the expression <CODE>klass.isInstance(x)</CODE>
|
||||||
|
* is true.
|
||||||
|
* @exception com.silverwrist.dynamo.except.NoSuchServiceException If no service is available in
|
||||||
|
* the specified class.
|
||||||
|
*/
|
||||||
|
public Object queryService(Class klass, String serviceid)
|
||||||
|
{
|
||||||
|
if (klass==RenderImage.class)
|
||||||
|
return (RenderImage)this;
|
||||||
|
throw new NoSuchServiceException(getName(),klass,serviceid);
|
||||||
|
|
||||||
|
} // end queryService
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface RenderImage
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void renderImageTag(TextRenderControl control, String url) throws IOException, RenderingException
|
||||||
|
{
|
||||||
|
PrintWriter wr = control.getWriter();
|
||||||
|
wr.write("<img src=\"" + url + "\" alt=\"\" width=\"" + m_width + "\" height=\"" + m_height
|
||||||
|
+ "\" border=\"0\" />");
|
||||||
|
|
||||||
|
} // end renderImageTag
|
||||||
|
|
||||||
|
public Object getRenderingObject(String url)
|
||||||
|
{
|
||||||
|
return new RenderObject(url);
|
||||||
|
|
||||||
|
} // end getRenderingObject
|
||||||
|
|
||||||
|
} // end class CommunityLogoRenderer
|
|
@ -37,7 +37,7 @@ public class UserPhotoRenderer
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class RenderObject implements SelfRenderable
|
private class RenderObject implements SelfRenderable
|
||||||
{
|
{
|
||||||
/*====================================================================
|
/*====================================================================
|
||||||
* Attributes
|
* Attributes
|
||||||
|
|
|
@ -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) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.dialog;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
import org.w3c.dom.*;
|
||||||
|
import com.silverwrist.util.*;
|
||||||
|
import com.silverwrist.util.xml.*;
|
||||||
|
import com.silverwrist.dynamo.Namespaces;
|
||||||
|
import com.silverwrist.dynamo.dialog.BaseDialogField;
|
||||||
|
import com.silverwrist.dynamo.except.*;
|
||||||
|
import com.silverwrist.dynamo.iface.*;
|
||||||
|
import com.silverwrist.venice.iface.*;
|
||||||
|
|
||||||
|
class CommunityLogoField extends BaseDialogField
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private String m_logo_url = null;
|
||||||
|
private String m_link_url;
|
||||||
|
private String m_link_type;
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructors
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
CommunityLogoField(Element elt) throws DialogException
|
||||||
|
{
|
||||||
|
super(false,elt);
|
||||||
|
XMLLoader loader = XMLLoader.get();
|
||||||
|
try
|
||||||
|
{ // get link URL and link type
|
||||||
|
m_link_url = loader.getAttribute(elt,"link");
|
||||||
|
m_link_type = loader.getAttribute(elt,"type");
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (XMLLoadException e)
|
||||||
|
{ // translate to DialogException
|
||||||
|
throw new DialogException(e);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
// Load caption 2 from messages
|
||||||
|
ResourceBundle b = ResourceBundle.getBundle("com.silverwrist.venice.dialog.VeniceDialogMessages",
|
||||||
|
Locale.getDefault());
|
||||||
|
setCaption2(b.getString("communitylogo.caption2"));
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
protected CommunityLogoField(CommunityLogoField other)
|
||||||
|
{
|
||||||
|
super(other);
|
||||||
|
m_logo_url = null;
|
||||||
|
m_link_url = other.m_link_url;
|
||||||
|
m_link_type = other.m_link_type;
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Abstract implementations from class BaseDialogField
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
protected void renderField(TextRenderControl control, Map render_params)
|
||||||
|
throws IOException, RenderingException
|
||||||
|
{
|
||||||
|
PrintWriter wr = control.getWriter();
|
||||||
|
if (isEnabled())
|
||||||
|
{ // write the opening <A> tag
|
||||||
|
URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class));
|
||||||
|
wr.write("<a href=\""
|
||||||
|
+ rewriter.rewriteURL(m_link_type,StringUtils.replaceAllVariables(m_link_url,render_params))
|
||||||
|
+ "\">");
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
// write the <IMG> tag by running it through the standard communtiy logo renderer
|
||||||
|
ObjectProvider oprov = (ObjectProvider)(control.queryService(ObjectProvider.class));
|
||||||
|
ServiceProvider sp = (ServiceProvider)(oprov.getObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,
|
||||||
|
"venice-communitylogo"));
|
||||||
|
RenderImage rimg = (RenderImage)(sp.queryService(RenderImage.class));
|
||||||
|
rimg.renderImageTag(control,m_logo_url);
|
||||||
|
|
||||||
|
// write the </A> tag
|
||||||
|
if (isEnabled())
|
||||||
|
wr.write("</a>");
|
||||||
|
|
||||||
|
} // end renderField
|
||||||
|
|
||||||
|
protected void validateContents(Request r, Object data) throws ValidationException
|
||||||
|
{ // do nothing
|
||||||
|
} // end validateContents
|
||||||
|
|
||||||
|
public Object clone()
|
||||||
|
{
|
||||||
|
return new CommunityLogoField(this);
|
||||||
|
|
||||||
|
} // end clone
|
||||||
|
|
||||||
|
public Object getValue()
|
||||||
|
{
|
||||||
|
return m_logo_url;
|
||||||
|
|
||||||
|
} // end getValue
|
||||||
|
|
||||||
|
public boolean containsValue()
|
||||||
|
{
|
||||||
|
return (m_logo_url!=null);
|
||||||
|
|
||||||
|
} // end containsValue
|
||||||
|
|
||||||
|
public void setValue(Object obj)
|
||||||
|
{
|
||||||
|
m_logo_url = ((obj==null) ? null : obj.toString());
|
||||||
|
|
||||||
|
} // end setValue
|
||||||
|
|
||||||
|
public void setValueFrom(Request r)
|
||||||
|
{ // do nothing - this doesn't get handled in the usual way
|
||||||
|
} // end setValueFrom
|
||||||
|
|
||||||
|
public void reset()
|
||||||
|
{ // do nothing
|
||||||
|
} // end reset
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Overrides from class BaseDialogField
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
protected boolean isNull(Object value)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
|
||||||
|
} // end isNull
|
||||||
|
|
||||||
|
public int getFlags()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
} // end getFlags
|
||||||
|
|
||||||
|
} // end class CommunityLogoField
|
|
@ -42,6 +42,8 @@ public class VeniceDialogItemFactory implements DialogItemFactory
|
||||||
String tagname = elt.getTagName();
|
String tagname = elt.getTagName();
|
||||||
if (tagname.equals("userphoto"))
|
if (tagname.equals("userphoto"))
|
||||||
return new UserPhotoField(elt);
|
return new UserPhotoField(elt);
|
||||||
|
if (tagname.equals("communitylogo"))
|
||||||
|
return new CommunityLogoField(elt);
|
||||||
|
|
||||||
throw new UnknownDialogFieldException(tagname,elt);
|
throw new UnknownDialogFieldException(tagname,elt);
|
||||||
|
|
||||||
|
|
|
@ -122,6 +122,7 @@ public class VeniceDialogManager implements NamedObject, ComponentInitialize, Co
|
||||||
// Register our own field types.
|
// Register our own field types.
|
||||||
VeniceDialogItemFactory itemfact = new VeniceDialogItemFactory();
|
VeniceDialogItemFactory itemfact = new VeniceDialogItemFactory();
|
||||||
m_shutdown_list.addFirst(dlg_conf.registerDialogItem("userphoto",itemfact));
|
m_shutdown_list.addFirst(dlg_conf.registerDialogItem("userphoto",itemfact));
|
||||||
|
m_shutdown_list.addFirst(dlg_conf.registerDialogItem("communitylogo",itemfact));
|
||||||
|
|
||||||
} // end initialize
|
} // end initialize
|
||||||
|
|
||||||
|
|
|
@ -17,3 +17,4 @@
|
||||||
# This file has been localized for the en_US locale
|
# This file has been localized for the en_US locale
|
||||||
userphoto.caption2=(click to change)
|
userphoto.caption2=(click to change)
|
||||||
cheader.fail=Unable to get content header object: {0}
|
cheader.fail=Unable to get content header object: {0}
|
||||||
|
communitylogo.caption2=(click to change)
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
*/
|
*/
|
||||||
package com.silverwrist.venice.frame;
|
package com.silverwrist.venice.frame;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
import java.security.acl.AclNotFoundException;
|
import java.security.acl.AclNotFoundException;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
@ -26,6 +27,7 @@ import org.w3c.dom.*;
|
||||||
import com.silverwrist.util.*;
|
import com.silverwrist.util.*;
|
||||||
import com.silverwrist.util.xml.*;
|
import com.silverwrist.util.xml.*;
|
||||||
import com.silverwrist.dynamo.DynamoVersion;
|
import com.silverwrist.dynamo.DynamoVersion;
|
||||||
|
import com.silverwrist.dynamo.Namespaces;
|
||||||
import com.silverwrist.dynamo.RequestType;
|
import com.silverwrist.dynamo.RequestType;
|
||||||
import com.silverwrist.dynamo.event.*;
|
import com.silverwrist.dynamo.event.*;
|
||||||
import com.silverwrist.dynamo.except.*;
|
import com.silverwrist.dynamo.except.*;
|
||||||
|
@ -36,6 +38,7 @@ import com.silverwrist.dynamo.velocity.VelocityParamSupplier;
|
||||||
import com.silverwrist.dynamo.velocity.VelocityRendererConfig;
|
import com.silverwrist.dynamo.velocity.VelocityRendererConfig;
|
||||||
import com.silverwrist.venice.VeniceNamespaces;
|
import com.silverwrist.venice.VeniceNamespaces;
|
||||||
import com.silverwrist.venice.VeniceVersion;
|
import com.silverwrist.venice.VeniceVersion;
|
||||||
|
import com.silverwrist.venice.community.CommunityService;
|
||||||
import com.silverwrist.venice.iface.*;
|
import com.silverwrist.venice.iface.*;
|
||||||
import com.silverwrist.venice.session.SessionInfoParams;
|
import com.silverwrist.venice.session.SessionInfoParams;
|
||||||
|
|
||||||
|
@ -107,6 +110,110 @@ public class FrameAssembler
|
||||||
|
|
||||||
} // end class VelocityOps
|
} // end class VelocityOps
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Internal class that "wraps" the community menu to insert the logo
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private class MyMenuObject implements MenuRenderObject, SelfRenderable
|
||||||
|
{
|
||||||
|
/*====================================================================
|
||||||
|
* Attributes
|
||||||
|
*====================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
private MenuRenderObject m_menu; // inner menu object
|
||||||
|
private String m_url; // URL of community logo
|
||||||
|
private String m_urltype = null; // URL type for communtiy logo
|
||||||
|
|
||||||
|
/*====================================================================
|
||||||
|
* Constructor
|
||||||
|
*====================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
MyMenuObject(MenuRenderObject menu, VeniceCommunity comm)
|
||||||
|
{
|
||||||
|
m_menu = menu;
|
||||||
|
m_url = StringUtils.stringize(PropertyUtils.getPropertyNoErr(comm,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,
|
||||||
|
"url.logo"));
|
||||||
|
if (m_url==null)
|
||||||
|
{ // load "no logo" URL from the global properties store
|
||||||
|
m_url = StringUtils.stringize(m_props.getObject(VeniceNamespaces.COMMUNITY_GLOBALS_NAMESPACE,
|
||||||
|
"community.nologo.url"));
|
||||||
|
m_urltype = StringUtils.stringize(m_props.getObject(VeniceNamespaces.COMMUNITY_GLOBALS_NAMESPACE,
|
||||||
|
"community.nologo.url.type"));
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*====================================================================
|
||||||
|
* Implementations from interface MenuRenderObject
|
||||||
|
*====================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
public int getItemCount()
|
||||||
|
{
|
||||||
|
return m_menu.getItemCount();
|
||||||
|
|
||||||
|
} // end getItemCount
|
||||||
|
|
||||||
|
public int getItemContainingLinkText(String text)
|
||||||
|
{
|
||||||
|
return m_menu.getItemContainingLinkText(text);
|
||||||
|
|
||||||
|
} // end getItemContainingLinkText
|
||||||
|
|
||||||
|
public void setVariable(String name, String value)
|
||||||
|
{
|
||||||
|
m_menu.setVariable(name,value);
|
||||||
|
|
||||||
|
} // end setVariable
|
||||||
|
|
||||||
|
public void setSelectedIndex(int index)
|
||||||
|
{
|
||||||
|
m_menu.setSelectedIndex(index);
|
||||||
|
|
||||||
|
} // end setSelectedIndex
|
||||||
|
|
||||||
|
/*====================================================================
|
||||||
|
* Implementations from interface SelfRenderable
|
||||||
|
*====================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders this object to the output.
|
||||||
|
*
|
||||||
|
* @param control A rendering control object that provides the means to render this object to the output, as
|
||||||
|
* well as providing "output services" (through the
|
||||||
|
* {@link com.silverwrist.dynamo.iface.ServiceProvider ServiceProvider} interface) for the
|
||||||
|
* rendering process to use.
|
||||||
|
* @exception java.io.IOException If an I/O error occurs while writing the output.
|
||||||
|
* @exception com.silverwrist.dynamo.except.RenderingException If the rendering process fails.
|
||||||
|
*/
|
||||||
|
public void render(SelfRenderControl control) throws IOException, RenderingException
|
||||||
|
{
|
||||||
|
// figure out the final image URL
|
||||||
|
String image_url = null;
|
||||||
|
if (m_urltype!=null)
|
||||||
|
{ // need to use the URL rewriter on this
|
||||||
|
URLRewriter rewriter = (URLRewriter)(control.queryService(URLRewriter.class));
|
||||||
|
image_url = rewriter.rewriteURL(m_urltype,m_url);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else // just use this URL
|
||||||
|
image_url = m_url;
|
||||||
|
|
||||||
|
TextRenderControl tctl = control.getTextRender();
|
||||||
|
m_commlogo_render.renderImageTag(tctl,image_url);
|
||||||
|
PrintWriter wr = tctl.getWriter();
|
||||||
|
wr.write("<br />");
|
||||||
|
tctl.renderSubObject(m_menu);
|
||||||
|
|
||||||
|
} // end render
|
||||||
|
|
||||||
|
} // end class MyMenuObject
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Static data members
|
* Static data members
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
@ -129,6 +236,7 @@ public class FrameAssembler
|
||||||
private ObjectProvider m_blocks; // global blocks
|
private ObjectProvider m_blocks; // global blocks
|
||||||
private SecurityReferenceMonitor m_srm; // security reference monitor
|
private SecurityReferenceMonitor m_srm; // security reference monitor
|
||||||
private MenuProvider m_menu_prov; // menu provider
|
private MenuProvider m_menu_prov; // menu provider
|
||||||
|
private RenderImage m_commlogo_render; // community logo renderer
|
||||||
private String m_frame_template; // frame template parameter
|
private String m_frame_template; // frame template parameter
|
||||||
private HashMap m_globals = new HashMap(); // globals fed to Velocity
|
private HashMap m_globals = new HashMap(); // globals fed to Velocity
|
||||||
private BaseParams m_base_params; // base parameters object
|
private BaseParams m_base_params; // base parameters object
|
||||||
|
@ -237,7 +345,7 @@ public class FrameAssembler
|
||||||
logger.info("FrameAssembler initializing");
|
logger.info("FrameAssembler initializing");
|
||||||
|
|
||||||
XMLLoader loader = XMLLoader.get();
|
XMLLoader loader = XMLLoader.get();
|
||||||
String gprops = null, name_srm = null, name_menu = null;
|
String gprops = null, name_srm = null, name_menu = null, name_commlogo = null;
|
||||||
try
|
try
|
||||||
{ // verify the right node name
|
{ // verify the right node name
|
||||||
loader.verifyNodeName(config_root,"object");
|
loader.verifyNodeName(config_root,"object");
|
||||||
|
@ -254,6 +362,7 @@ public class FrameAssembler
|
||||||
foo = loader.getSubElement(config_root_h,"providers");
|
foo = loader.getSubElement(config_root_h,"providers");
|
||||||
name_srm = loader.getAttribute(foo,"security");
|
name_srm = loader.getAttribute(foo,"security");
|
||||||
name_menu = loader.getAttribute(foo,"menu");
|
name_menu = loader.getAttribute(foo,"menu");
|
||||||
|
name_commlogo = loader.getAttribute(foo,"commlogo");
|
||||||
|
|
||||||
} // end try
|
} // end try
|
||||||
catch (XMLLoadException e)
|
catch (XMLLoadException e)
|
||||||
|
@ -278,6 +387,20 @@ public class FrameAssembler
|
||||||
|
|
||||||
} // end catch
|
} // end catch
|
||||||
|
|
||||||
|
// Get the community logo provider.
|
||||||
|
ServiceProvider commlogo_sp =
|
||||||
|
(ServiceProvider)(GetObjectUtils.getDynamoComponent(services,ServiceProvider.class,name_commlogo));
|
||||||
|
try
|
||||||
|
{ // get the RenderImage provider
|
||||||
|
m_commlogo_render = (RenderImage)(commlogo_sp.queryService(RenderImage.class));
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (NoSuchServiceException e)
|
||||||
|
{ // this shouldn't happen, but...
|
||||||
|
throw new ConfigException(FrameAssembler.class,"FrameMessages","init.nocommlogo",e);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
// Set up the initial values of the global properties.
|
// Set up the initial values of the global properties.
|
||||||
Iterator it = PROP_TO_VELOCITY.entrySet().iterator();
|
Iterator it = PROP_TO_VELOCITY.entrySet().iterator();
|
||||||
while (it.hasNext())
|
while (it.hasNext())
|
||||||
|
@ -334,6 +457,7 @@ public class FrameAssembler
|
||||||
m_shut_event.shutdown();
|
m_shut_event.shutdown();
|
||||||
m_shut_event = null;
|
m_shut_event = null;
|
||||||
m_base_params = null;
|
m_base_params = null;
|
||||||
|
m_commlogo_render = null;
|
||||||
m_menu_prov = null;
|
m_menu_prov = null;
|
||||||
m_props = null;
|
m_props = null;
|
||||||
m_blocks = null;
|
m_blocks = null;
|
||||||
|
@ -387,10 +511,40 @@ public class FrameAssembler
|
||||||
{ // get the current menu selector
|
{ // get the current menu selector
|
||||||
Object curr_menusel = PropertyUtils.getPropertyNoErr(session,SessionInfoParams.NAMESPACE,
|
Object curr_menusel = PropertyUtils.getPropertyNoErr(session,SessionInfoParams.NAMESPACE,
|
||||||
SessionInfoParams.ATTR_MENU_SELECTOR);
|
SessionInfoParams.ATTR_MENU_SELECTOR);
|
||||||
if ((curr_menusel==null) || !(menusel_full.equals(curr_menusel.toString())))
|
if ( (curr_menusel==null) || !(menusel_full.equals(curr_menusel.toString()))
|
||||||
|
|| !(PropertyUtils.hasProperty(session,SessionInfoParams.NAMESPACE,SessionInfoParams.ATTR_MENU)))
|
||||||
reload = true; // need to reload the menu
|
reload = true; // need to reload the menu
|
||||||
|
|
||||||
} // end if
|
} // end if
|
||||||
|
else
|
||||||
|
{ // no menu selector specified...but do we have to reload the menu anyway?
|
||||||
|
if (!(PropertyUtils.hasProperty(session,SessionInfoParams.NAMESPACE,SessionInfoParams.ATTR_MENU)))
|
||||||
|
{ // look to see if there's an actual menu selector present
|
||||||
|
String curr_menusel =
|
||||||
|
StringUtils.stringize(PropertyUtils.getPropertyNoErr(session,SessionInfoParams.NAMESPACE,
|
||||||
|
SessionInfoParams.ATTR_MENU_SELECTOR));
|
||||||
|
if (curr_menusel!=null)
|
||||||
|
{ // OK, synthesize menu selector elements from the current one
|
||||||
|
reload = true;
|
||||||
|
menusel_full = curr_menusel;
|
||||||
|
if (curr_menusel.startsWith("community:"))
|
||||||
|
{ // strip off the community ID, get the community
|
||||||
|
int cid = Integer.parseInt(curr_menusel.substring(10));
|
||||||
|
ObjectProvider op = (ObjectProvider)(r.queryService(ObjectProvider.class));
|
||||||
|
CommunityService csvc = (CommunityService)(op.getObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,
|
||||||
|
"communities"));
|
||||||
|
comm = csvc.getCommunity(cid);
|
||||||
|
menusel = "community";
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else // normal "top"
|
||||||
|
menusel = menusel_full;
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end else
|
||||||
|
|
||||||
MenuRenderObject floating_menu = null;
|
MenuRenderObject floating_menu = null;
|
||||||
String floating_selector = null;
|
String floating_selector = null;
|
||||||
|
@ -412,6 +566,7 @@ public class FrameAssembler
|
||||||
floating_menu.setVariable("alias",comm.getAlias());
|
floating_menu.setVariable("alias",comm.getAlias());
|
||||||
floating_menu.setVariable("cid",String.valueOf(comm.getCID()));
|
floating_menu.setVariable("cid",String.valueOf(comm.getCID()));
|
||||||
floating_menu.setVariable("name",comm.getName());
|
floating_menu.setVariable("name",comm.getName());
|
||||||
|
floating_menu = new MyMenuObject(floating_menu,comm);
|
||||||
|
|
||||||
} // end else if
|
} // end else if
|
||||||
|
|
||||||
|
|
|
@ -23,3 +23,4 @@ ss.noTemplate=No stylesheet template name found for property "{0}".
|
||||||
ss.renderFail=Unable to render stylesheet template {0}: {1}
|
ss.renderFail=Unable to render stylesheet template {0}: {1}
|
||||||
generator=Venice Web Communities System {0}; Dynamo Application Framework {1}
|
generator=Venice Web Communities System {0}; Dynamo Application Framework {1}
|
||||||
frame.noACL=Unable to locate ACL for menu generation.
|
frame.noACL=Unable to locate ACL for menu generation.
|
||||||
|
init.nocommlogo=Unable to find the community logo renderer.
|
||||||
|
|
138
src/venice-base/com/silverwrist/venice/frame/FrameWrapper.java
Normal file
138
src/venice-base/com/silverwrist/venice/frame/FrameWrapper.java
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
/*
|
||||||
|
* 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-03 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.frame;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import com.silverwrist.dynamo.except.*;
|
||||||
|
import com.silverwrist.dynamo.iface.*;
|
||||||
|
|
||||||
|
public class FrameWrapper implements FramedContent, SelfRenderable
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private FramedContent m_content; // the actual content
|
||||||
|
private String m_menu_sel; // menu selector
|
||||||
|
private String m_page_title; // page title
|
||||||
|
private String m_page_qid; // page QID
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructor
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public FrameWrapper(FramedContent content)
|
||||||
|
{
|
||||||
|
m_content = content;
|
||||||
|
m_menu_sel = content.getMenuSelector();
|
||||||
|
m_page_title = content.getPageTitle();
|
||||||
|
m_page_qid = content.getPageQID();
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface FramedContent
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the desired menu selector for this page. The <EM>menu selector</EM> is a string that specifies
|
||||||
|
* which menu is to be displayed on the left menu bar, in addition to the "global menu." This value may
|
||||||
|
* be <CODE>null</CODE>, in which case the current menu selector is not changed.
|
||||||
|
*
|
||||||
|
* @return The desired menu selector.
|
||||||
|
*/
|
||||||
|
public String getMenuSelector()
|
||||||
|
{
|
||||||
|
return m_menu_sel;
|
||||||
|
|
||||||
|
} // end getMenuSelector
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the desired title for the page. This title is concatenated with the <EM>site title</EM> (set in
|
||||||
|
* global properties) to form the actual page title that gets sent to the browser.
|
||||||
|
*
|
||||||
|
* @return The desired page title.
|
||||||
|
*/
|
||||||
|
public String getPageTitle()
|
||||||
|
{
|
||||||
|
return m_page_title;
|
||||||
|
|
||||||
|
} // end getPageTitle
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the desired quick ID for the page. The <EM>page quick ID</EM> is a small text string which can be used
|
||||||
|
* to "tag" the page with a unique identifier, for use with external tools such as offsite hit counters.
|
||||||
|
* If this value is <CODE>null</CODE>, the quick ID is not used for this page.
|
||||||
|
*
|
||||||
|
* @return The desired page quick ID.
|
||||||
|
*/
|
||||||
|
public String getPageQID()
|
||||||
|
{
|
||||||
|
return m_page_qid;
|
||||||
|
|
||||||
|
} // end getPageQID
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface SelfRenderable
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders this object to the output.
|
||||||
|
*
|
||||||
|
* @param control A rendering control object that provides the means to render this object to the output, as
|
||||||
|
* well as providing "output services" (through the
|
||||||
|
* {@link com.silverwrist.dynamo.iface.ServiceProvider ServiceProvider} interface) for the
|
||||||
|
* rendering process to use.
|
||||||
|
* @exception java.io.IOException If an I/O error occurs while writing the output.
|
||||||
|
* @exception com.silverwrist.dynamo.except.RenderingException If the rendering process fails.
|
||||||
|
*/
|
||||||
|
public void render(SelfRenderControl control) throws IOException, RenderingException
|
||||||
|
{
|
||||||
|
TextRenderControl ctl = control.getTextRender();
|
||||||
|
ctl.renderSubObject(m_content);
|
||||||
|
|
||||||
|
} // end render
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External operations
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void setMenuSelector(String s)
|
||||||
|
{
|
||||||
|
m_menu_sel = s;
|
||||||
|
|
||||||
|
} // end setMenuSelector
|
||||||
|
|
||||||
|
public void setPageTitle(String s)
|
||||||
|
{
|
||||||
|
m_page_title = s;
|
||||||
|
|
||||||
|
} // end setPageTitle
|
||||||
|
|
||||||
|
public void setPageQID(String s)
|
||||||
|
{
|
||||||
|
m_page_qid = s;
|
||||||
|
|
||||||
|
} // end setPageQID
|
||||||
|
|
||||||
|
} // end class FrameWrapper
|
|
@ -136,7 +136,6 @@ public class LibraryVenice
|
||||||
|
|
||||||
public void forceReloadMenu(SessionInfo session)
|
public void forceReloadMenu(SessionInfo session)
|
||||||
{
|
{
|
||||||
session.removeObject(SessionInfoParams.NAMESPACE,SessionInfoParams.ATTR_MENU_SELECTOR);
|
|
||||||
session.removeObject(SessionInfoParams.NAMESPACE,SessionInfoParams.ATTR_MENU);
|
session.removeObject(SessionInfoParams.NAMESPACE,SessionInfoParams.ATTR_MENU);
|
||||||
|
|
||||||
} // end forceReloadMenu
|
} // end forceReloadMenu
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
<dialog name="community_profile" defaultbutton="update">
|
<dialog name="community_profile" defaultbutton="update">
|
||||||
<title>Edit Community Profile:</title>
|
<title>Edit Community Profile:</title>
|
||||||
<action>comm/admin/profile.js.vs</action>
|
<action>comm/admin/profile.js.vs</action>
|
||||||
|
<render-param name="cid"/>
|
||||||
<hidden name="cc" value=""/>
|
<hidden name="cc" value=""/>
|
||||||
|
|
||||||
<header name="basic_hdr" caption="Basic Information"/>
|
<header name="basic_hdr" caption="Basic Information"/>
|
||||||
|
@ -28,7 +29,7 @@
|
||||||
<text name="rules" caption="Rules" size="32" maxlength="254"/>
|
<text name="rules" caption="Rules" size="32" maxlength="254"/>
|
||||||
<languagelist name="language" caption="Primary Language" required="true"/>
|
<languagelist name="language" caption="Primary Language" required="true"/>
|
||||||
<text name="url" caption="Home Page" size="32" maxlength="254"/>
|
<text name="url" caption="Home Page" size="32" maxlength="254"/>
|
||||||
<!-- <communitylogo name="logo" caption="Community Logo" link="comm/photo.js.vs" type="servlet"/> -->
|
<communitylogo name="logo" caption="Community Logo" link="comm/admin/profile_logo.js.vs?cc=${cid}" type="servlet"/>
|
||||||
|
|
||||||
<header name="location_hdr" caption="Location"/>
|
<header name="location_hdr" caption="Location"/>
|
||||||
<text name="company" caption="Company" size="32" maxlength="254"/>
|
<text name="company" caption="Company" size="32" maxlength="254"/>
|
||||||
|
|
|
@ -57,7 +57,16 @@ if (req_help.isVerb("GET"))
|
||||||
dlg.setValue("rules",PropertyUtils.getPropertyNoErr(comm,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"rules"));
|
dlg.setValue("rules",PropertyUtils.getPropertyNoErr(comm,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"rules"));
|
||||||
dlg.setValue("language",comm.getObject(VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"language"));
|
dlg.setValue("language",comm.getObject(VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"language"));
|
||||||
dlg.setValue("url",PropertyUtils.getPropertyNoErr(comm,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"url.homepage"));
|
dlg.setValue("url",PropertyUtils.getPropertyNoErr(comm,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"url.homepage"));
|
||||||
// TODO: set community logo here
|
dlg.setValue("logo",PropertyUtils.getPropertyNoErr(comm,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"url.logo"));
|
||||||
|
if (dlg.getValue("logo")==null)
|
||||||
|
{ // fill in the "no logo" URL
|
||||||
|
globals = vcast.getGlobalPropertiesStore(req);
|
||||||
|
url = globals.getObject(VeniceNamespaces.COMMUNITY_GLOBALS_NAMESPACE,"community.nologo.url");
|
||||||
|
urltype = globals.getObject(VeniceNamespaces.COMMUNITY_GLOBALS_NAMESPACE,"community.nologo.url.type");
|
||||||
|
rewriter = cast.queryURLRewriter(req);
|
||||||
|
dlg.setValue("logo",rewriter.rewriteURL(urltype,url));
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
dlg.setValue("company",PropertyUtils.getPropertyNoErr(comm,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,
|
dlg.setValue("company",PropertyUtils.getPropertyNoErr(comm,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,
|
||||||
"company.name"));
|
"company.name"));
|
||||||
|
@ -94,7 +103,7 @@ else
|
||||||
comm.setObject(user,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"language",dlg.getValue("language"));
|
comm.setObject(user,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"language",dlg.getValue("language"));
|
||||||
PropertyUtils.setOrRemove(comm,user,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"url.homepage",
|
PropertyUtils.setOrRemove(comm,user,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"url.homepage",
|
||||||
dlg.getValue("url"));
|
dlg.getValue("url"));
|
||||||
// TODO: deal with community logo
|
// N.B.: community logo is handled elsewhere
|
||||||
|
|
||||||
PropertyUtils.setOrRemove(comm,user,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"company.name",
|
PropertyUtils.setOrRemove(comm,user,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"company.name",
|
||||||
dlg.getValue("company"));
|
dlg.getValue("company"));
|
||||||
|
@ -123,7 +132,23 @@ else
|
||||||
etype = dynamo.exceptionType(e) + "";
|
etype = dynamo.exceptionType(e) + "";
|
||||||
logger.error("Caught exception of type " + etype);
|
logger.error("Caught exception of type " + etype);
|
||||||
if (etype.match(/ValidationException/))
|
if (etype.match(/ValidationException/))
|
||||||
|
{ // validation error...
|
||||||
dlg.setErrorMessage(dynamo.exceptionMessage(e) + " Please try again.");
|
dlg.setErrorMessage(dynamo.exceptionMessage(e) + " Please try again.");
|
||||||
|
|
||||||
|
// have to re-prep the community logo
|
||||||
|
dlg.setValue("logo",PropertyUtils.getPropertyNoErr(comm,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,
|
||||||
|
"url.logo"));
|
||||||
|
if (dlg.getValue("logo")==null)
|
||||||
|
{ // fill in the "no logo" URL
|
||||||
|
globals = vcast.getGlobalPropertiesStore(req);
|
||||||
|
url = globals.getObject(VeniceNamespaces.COMMUNITY_GLOBALS_NAMESPACE,"community.nologo.url");
|
||||||
|
urltype = globals.getObject(VeniceNamespaces.COMMUNITY_GLOBALS_NAMESPACE,"community.nologo.url.type");
|
||||||
|
rewriter = cast.queryURLRewriter(req);
|
||||||
|
dlg.setValue("logo",rewriter.rewriteURL(urltype,url));
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end if
|
||||||
else if (etype.match(/DatabaseException/))
|
else if (etype.match(/DatabaseException/))
|
||||||
rc = new ErrorBox("Database Error",e,"SERVLET",return_URL);
|
rc = new ErrorBox("Database Error",e,"SERVLET",return_URL);
|
||||||
else if (etype.match(/DynamoSecurityException/))
|
else if (etype.match(/DynamoSecurityException/))
|
||||||
|
@ -140,7 +165,10 @@ else
|
||||||
if (rc==null)
|
if (rc==null)
|
||||||
{ // output dialog if we don't have another value
|
{ // output dialog if we don't have another value
|
||||||
dlg.setSubtitle(comm.getName());
|
dlg.setSubtitle(comm.getName());
|
||||||
|
dlg.setRenderParam("cid",comm.getCID() + "");
|
||||||
rc = new FrameDialog(dlg);
|
rc = new FrameDialog(dlg);
|
||||||
|
rc.menuSelector = "community";
|
||||||
|
|
||||||
} // end if
|
} // end if
|
||||||
|
|
||||||
dynamo.scriptOutput(rc);
|
dynamo.scriptOutput(rc);
|
||||||
|
|
103
venice-data/scripts/comm/admin/profile_logo.js
Normal file
103
venice-data/scripts/comm/admin/profile_logo.js
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
// 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) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Contributor(s):
|
||||||
|
|
||||||
|
importPackage(Packages.com.silverwrist.util);
|
||||||
|
importClass(Packages.com.silverwrist.dynamo.Namespaces);
|
||||||
|
importClass(Packages.com.silverwrist.dynamo.db.ImageStore);
|
||||||
|
importPackage(Packages.com.silverwrist.dynamo.iface);
|
||||||
|
importPackage(Packages.com.silverwrist.dynamo.util);
|
||||||
|
importClass(Packages.com.silverwrist.venice.VeniceNamespaces);
|
||||||
|
importPackage(Packages.com.silverwrist.venice.content);
|
||||||
|
importPackage(Packages.com.silverwrist.venice.iface);
|
||||||
|
|
||||||
|
req = bsf.lookupBean("request");
|
||||||
|
req_help = bsf.lookupBean("request_help");
|
||||||
|
user = vlib.getUser(req);
|
||||||
|
comm = vlib.getCommunity(req);
|
||||||
|
|
||||||
|
return_URL = "comm/admin/profile.js.vs?cc=" + comm.getCID();
|
||||||
|
|
||||||
|
// Make sure we can actually edit the profile logo.
|
||||||
|
acl = comm.getAcl();
|
||||||
|
if (!(acl.testPermission(user,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"set.property")))
|
||||||
|
dynamo.scriptReturn(vlib.stdErrorBox(req,"Security Error",
|
||||||
|
"You are not permitted to modify this community's logo."));
|
||||||
|
|
||||||
|
if (req_help.isVerb("GET"))
|
||||||
|
{ // on GET, display the form
|
||||||
|
view = new VelocityView("Set Community Logo","comm/community_logo.vm");
|
||||||
|
view.setParameter("community",comm);
|
||||||
|
dynamo.scriptReturn(view);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
// everything from this point on is a POST operation
|
||||||
|
if (req_help.isImageButtonClicked("cancel"))
|
||||||
|
dynamo.scriptReturn(new Redirect("SERVLET",return_URL));
|
||||||
|
|
||||||
|
// get the image provider object
|
||||||
|
imgprov = cast.queryImageStore(req_help.getRequestObject(Namespaces.DYNAMO_OBJECT_NAMESPACE,"images"));
|
||||||
|
|
||||||
|
// figure out which image ID we have
|
||||||
|
imgid = imgprov.findImageID(VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"community.logo",comm.getHostGroup());
|
||||||
|
|
||||||
|
selector = req_help.getParameterString("selector") + "";
|
||||||
|
if (selector=="none")
|
||||||
|
{ // take out the image property and the image
|
||||||
|
if (PropertyUtils.hasProperty(comm,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"url.logo"))
|
||||||
|
comm.removeObject(user,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"url.logo");
|
||||||
|
if (imgid!=-1)
|
||||||
|
imgprov.deleteImage(user,imgid);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else if (selector=="set")
|
||||||
|
{ // set the image URL directly, delete the image
|
||||||
|
s = req_help.getParameterString("url");
|
||||||
|
if (stringutils.isEmpty(s))
|
||||||
|
dynamo.scriptReturn(new ErrorBox(null,"No logo URL specified.",return_URL));
|
||||||
|
comm.setObject(user,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"url.logo",s);
|
||||||
|
if (imgid!=-1)
|
||||||
|
imgprov.deleteImage(user,imgid);
|
||||||
|
|
||||||
|
} // end else if
|
||||||
|
else if (selector=="upload")
|
||||||
|
{ // take the uploaded image, reformat it, and save it off, then set the image URL
|
||||||
|
input_di = req_help.getDataItem("image");
|
||||||
|
if (input_di==null)
|
||||||
|
dynamo.scriptReturn(new ErrorBox(null,"No uploaded logo specified.",return_URL));
|
||||||
|
mtype = input_di.getMimeType();
|
||||||
|
if (!(mtype.startsWith("image/")))
|
||||||
|
dynamo.scriptReturn(new ErrorBox(null,"Uploaded data item is not an image.",return_URL));
|
||||||
|
globals = vcast.getGlobalPropertiesStore(req);
|
||||||
|
width = cast.toInteger(globals.getObject(VeniceNamespaces.COMMUNITY_GLOBALS_NAMESPACE,"community.logo.width"));
|
||||||
|
height = cast.toInteger(globals.getObject(VeniceNamespaces.COMMUNITY_GLOBALS_NAMESPACE,"community.logo.height"));
|
||||||
|
di = imgprov.normalizeImage(input_di,width,height,"image/jpeg");
|
||||||
|
if (imgid!=-1)
|
||||||
|
imgprov.replaceImage(user,imgid,di);
|
||||||
|
else
|
||||||
|
imgid = imgprov.saveNewImage(VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"community.logo",comm.getHostGroup(),di);
|
||||||
|
rewriter = cast.queryURLRewriter(req);
|
||||||
|
comm.setObject(user,VeniceNamespaces.COMMUNITY_PROFILE_NAMESPACE,"url.logo",
|
||||||
|
rewriter.rewriteURL("IMAGEDATA",imgid + ""));
|
||||||
|
|
||||||
|
} // end else if
|
||||||
|
else // return a "No Content" and just leave the dialog box up
|
||||||
|
dynamo.scriptReturn(new NoContent());
|
||||||
|
|
||||||
|
vlib.forceReloadMenu(req); // force the menu to be reloaded
|
||||||
|
|
||||||
|
// All done - bounce back to the Profile dialog
|
||||||
|
dynamo.scriptOutput(new Redirect("SERVLET",return_URL));
|
43
venice-data/velocity/comm/community_logo.vm
Normal file
43
venice-data/velocity/comm/community_logo.vm
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
#*
|
||||||
|
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) 2003 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
|
||||||
|
Contributor(s):
|
||||||
|
*#
|
||||||
|
#*
|
||||||
|
Parameters:
|
||||||
|
community = Community we're setting the logo for.
|
||||||
|
*#
|
||||||
|
#header2( "Set Community Logo:" "${community.Name}" )
|
||||||
|
<form method="POST" enctype="multipart/form-data" action="#formatURL( "SERVLET" "comm/admin/profile_logo.js.vs" )">
|
||||||
|
<input type="hidden" name="cc" value="${community.getCID()}" />
|
||||||
|
<table border="0" cellpadding="2" cellspacing="0">
|
||||||
|
<tr>
|
||||||
|
<td align="center"><input type="radio" name="selector" value="none" /></td>
|
||||||
|
<td align="left">No logo</td>
|
||||||
|
<td> </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center"><input type="radio" name="selector" value="set" /></td>
|
||||||
|
<td align="left">Set logo URL:</td>
|
||||||
|
<td align="left"><input type="text" name="url" value="" size="64" maxlength="254" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center"><input type="radio" name="selector" value="upload" /></td>
|
||||||
|
<td align="left">Upload logo:</td>
|
||||||
|
<td align="left"><input type="file" name="image" value="" size="64" maxlength="254" /></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
#button( "INPUT" "set" ) #button( "INPUT" "cancel" )
|
||||||
|
</form>
|
|
@ -15,6 +15,10 @@
|
||||||
|
|
||||||
Contributor(s):
|
Contributor(s):
|
||||||
*#
|
*#
|
||||||
|
#*
|
||||||
|
Parameters:
|
||||||
|
target = Target URL.
|
||||||
|
*#
|
||||||
#header1( "Set User Photo" )
|
#header1( "Set User Photo" )
|
||||||
<form method="POST" enctype="multipart/form-data" action="#formatURL( "SERVLET" "profile_photo.js.vs" )">
|
<form method="POST" enctype="multipart/form-data" action="#formatURL( "SERVLET" "profile_photo.js.vs" )">
|
||||||
<input type="hidden" name="tgt" value="$target" />
|
<input type="hidden" name="tgt" value="$target" />
|
||||||
|
|
BIN
venice-web/images/community_other.jpg
Normal file
BIN
venice-web/images/community_other.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.7 KiB |
Loading…
Reference in New Issue
Block a user