added administrative control of user photos - ability to replace or clear
a user's photo, keep the user from uploading a new one
This commit is contained in:
parent
239321bb61
commit
004dcaf7ec
13
etc/web.xml
13
etc/web.xml
|
@ -262,6 +262,14 @@
|
||||||
<servlet-class>com.silverwrist.venice.servlets.MemberRedirect</servlet-class>
|
<servlet-class>com.silverwrist.venice.servlets.MemberRedirect</servlet-class>
|
||||||
</servlet>
|
</servlet>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>adminuserphoto</servlet-name>
|
||||||
|
<description>
|
||||||
|
Changes the photo in a user's profile (uploads a new one).
|
||||||
|
</description>
|
||||||
|
<servlet-class>com.silverwrist.venice.servlets.AdminUserPhoto</servlet-class>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
<!-- the following are test servlets, they should go away -->
|
<!-- the following are test servlets, they should go away -->
|
||||||
|
|
||||||
<servlet>
|
<servlet>
|
||||||
|
@ -400,6 +408,11 @@
|
||||||
<url-pattern>/members</url-pattern>
|
<url-pattern>/members</url-pattern>
|
||||||
</servlet-mapping>
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>adminuserphoto</servlet-name>
|
||||||
|
<url-pattern>/adminuserphoto</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
<!-- the following are test servlets, they should go away -->
|
<!-- the following are test servlets, they should go away -->
|
||||||
<servlet-mapping>
|
<servlet-mapping>
|
||||||
<servlet-name>testformdata</servlet-name>
|
<servlet-name>testformdata</servlet-name>
|
||||||
|
|
|
@ -69,4 +69,8 @@ public interface AdminUserContext
|
||||||
|
|
||||||
public abstract Date getLastAccessDate();
|
public abstract Date getLastAccessDate();
|
||||||
|
|
||||||
|
public abstract AdminUserProperties getProperties() throws DataException;
|
||||||
|
|
||||||
|
public abstract void setProperties(AdminUserProperties props) throws DataException;
|
||||||
|
|
||||||
} // end interface AdminUserContext
|
} // end interface AdminUserContext
|
||||||
|
|
58
src/com/silverwrist/venice/core/AdminUserProperties.java
Normal file
58
src/com/silverwrist/venice/core/AdminUserProperties.java
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* 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) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.core;
|
||||||
|
|
||||||
|
public class AdminUserProperties extends UserProperties
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private boolean disallow_photo;
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructor
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public AdminUserProperties()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
disallow_photo = false;
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Public getters/setters
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public final boolean getDisallowPhoto()
|
||||||
|
{
|
||||||
|
return disallow_photo;
|
||||||
|
|
||||||
|
} // end getDisplayPostPictures
|
||||||
|
|
||||||
|
public final void setDisallowPhoto(boolean b)
|
||||||
|
{
|
||||||
|
disallow_photo = b;
|
||||||
|
|
||||||
|
} // end setDisplayPostPictures
|
||||||
|
|
||||||
|
} // end class AdminUserProperties
|
|
@ -126,4 +126,6 @@ public interface ContactInfo
|
||||||
|
|
||||||
public abstract void importVCard(VCard vc);
|
public abstract void importVCard(VCard vc);
|
||||||
|
|
||||||
|
public abstract boolean canSetPhoto();
|
||||||
|
|
||||||
} // end interface ContactInfo
|
} // end interface ContactInfo
|
||||||
|
|
|
@ -121,4 +121,6 @@ public interface UserContext extends SearchMode
|
||||||
|
|
||||||
public abstract void setProperties(UserProperties props) throws DataException;
|
public abstract void setProperties(UserProperties props) throws DataException;
|
||||||
|
|
||||||
|
public abstract boolean canSetUserPhoto() throws DataException;
|
||||||
|
|
||||||
} // end interface UserContext
|
} // end interface UserContext
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
*/
|
*/
|
||||||
package com.silverwrist.venice.core;
|
package com.silverwrist.venice.core;
|
||||||
|
|
||||||
public final class UserProperties
|
public class UserProperties
|
||||||
{
|
{
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Attributes
|
* Attributes
|
||||||
|
|
|
@ -21,6 +21,7 @@ import java.sql.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import org.apache.log4j.*;
|
import org.apache.log4j.*;
|
||||||
import com.silverwrist.util.International;
|
import com.silverwrist.util.International;
|
||||||
|
import com.silverwrist.util.OptionSet;
|
||||||
import com.silverwrist.venice.core.*;
|
import com.silverwrist.venice.core.*;
|
||||||
import com.silverwrist.venice.core.internals.*;
|
import com.silverwrist.venice.core.internals.*;
|
||||||
import com.silverwrist.venice.db.*;
|
import com.silverwrist.venice.db.*;
|
||||||
|
@ -53,13 +54,14 @@ class AdminUserContextImpl implements AdminUserContext
|
||||||
private String description; // personal description
|
private String description; // personal description
|
||||||
private Locale my_locale; // my default locale (cached)
|
private Locale my_locale; // my default locale (cached)
|
||||||
private TimeZone my_tz; // my default timezone (cached)
|
private TimeZone my_tz; // my default timezone (cached)
|
||||||
|
private OptionSet flags = null; // option flags
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Constructor
|
* Constructor
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
protected AdminUserContextImpl(EnvUser env, ResultSet rs) throws SQLException
|
protected AdminUserContextImpl(Connection conn, EnvUser env, ResultSet rs) throws SQLException
|
||||||
{
|
{
|
||||||
this.env = env;
|
this.env = env;
|
||||||
this.uid = rs.getInt("uid");
|
this.uid = rs.getInt("uid");
|
||||||
|
@ -74,8 +76,91 @@ class AdminUserContextImpl implements AdminUserContext
|
||||||
this.my_locale = International.get().createLocale(rs.getString("localeid"));
|
this.my_locale = International.get().createLocale(rs.getString("localeid"));
|
||||||
this.my_tz = TimeZone.getTimeZone(rs.getString("tzid"));
|
this.my_tz = TimeZone.getTimeZone(rs.getString("tzid"));
|
||||||
|
|
||||||
|
Statement stmt = conn.createStatement();
|
||||||
|
ResultSet rs2 = stmt.executeQuery("SELECT ndx, data FROM propuser WHERE uid = " + this.uid + ";");
|
||||||
|
while (rs2.next())
|
||||||
|
{ // load the properties...
|
||||||
|
switch (rs2.getInt(1))
|
||||||
|
{ // based on the property, do what is needed
|
||||||
|
case UserContextImpl.PROP_FLAGS:
|
||||||
|
flags = new OptionSet(rs2.getString(2));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
|
||||||
|
} // end switch
|
||||||
|
|
||||||
|
} // end while
|
||||||
|
|
||||||
} // end constructor
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Internal operations
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private final void updateProperties(BitSet delta) throws DataException
|
||||||
|
{
|
||||||
|
Connection conn = null;
|
||||||
|
try
|
||||||
|
{ // get a connection and create a statement
|
||||||
|
conn = env.getConnection();
|
||||||
|
Statement stmt = conn.createStatement();
|
||||||
|
StringBuffer sql = new StringBuffer();
|
||||||
|
|
||||||
|
if (delta.get(UserContextImpl.PROP_FLAGS))
|
||||||
|
{ // store the flags
|
||||||
|
sql.append("UPDATE propuser SET data = '").append(flags.asString()).append("' WHERE uid = ");
|
||||||
|
sql.append(uid).append(" AND ndx = ").append(UserContextImpl.PROP_FLAGS).append(';');
|
||||||
|
stmt.executeUpdate(sql.toString());
|
||||||
|
sql.setLength(0);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (SQLException e)
|
||||||
|
{ // database error - this is a DataException
|
||||||
|
logger.error("DB error storing user properties: " + e.getMessage(),e);
|
||||||
|
throw new DataException("unable to save user properties: " + e.getMessage(),e);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
finally
|
||||||
|
{ // make sure the connection is released before we go
|
||||||
|
env.releaseConnection(conn);
|
||||||
|
|
||||||
|
} // end finally
|
||||||
|
|
||||||
|
} // end updateProperties
|
||||||
|
|
||||||
|
private final void updateProperties() throws DataException
|
||||||
|
{
|
||||||
|
updateProperties(UserContextImpl.ALL_PROPS);
|
||||||
|
|
||||||
|
} // end updateProperties
|
||||||
|
|
||||||
|
private final AdminUserProperties createProperties()
|
||||||
|
{
|
||||||
|
AdminUserProperties rc = new AdminUserProperties();
|
||||||
|
rc.setDisplayPostPictures(flags.get(UserContextImpl.BF_POSTPICTURES));
|
||||||
|
rc.setDisallowPhoto(flags.get(UserContextImpl.BF_ADM_NOPHOTO));
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
} // end createProperties
|
||||||
|
|
||||||
|
private final BitSet storeProperties(AdminUserProperties props)
|
||||||
|
{
|
||||||
|
BitSet rc = new BitSet();
|
||||||
|
|
||||||
|
if (flags.assign(UserContextImpl.BF_POSTPICTURES,props.getDisplayPostPictures()))
|
||||||
|
rc.set(UserContextImpl.PROP_FLAGS);
|
||||||
|
if (flags.assign(UserContextImpl.BF_ADM_NOPHOTO,props.getDisallowPhoto()))
|
||||||
|
rc.set(UserContextImpl.PROP_FLAGS);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
} // end storeProperties
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Implementations from interface AdminUserContext
|
* Implementations from interface AdminUserContext
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
@ -282,9 +367,9 @@ class AdminUserContextImpl implements AdminUserContext
|
||||||
|
|
||||||
ContactInfoImpl rc;
|
ContactInfoImpl rc;
|
||||||
if (contactid>=0)
|
if (contactid>=0)
|
||||||
rc = new ContactInfoImpl(env,contactid);
|
rc = new ContactInfoImpl(env,contactid,true);
|
||||||
else
|
else
|
||||||
rc = new ContactInfoImpl(uid);
|
rc = new ContactInfoImpl(uid,true);
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
} // end getContactInfo
|
} // end getContactInfo
|
||||||
|
@ -477,6 +562,35 @@ class AdminUserContextImpl implements AdminUserContext
|
||||||
|
|
||||||
} // end getLastAccessDate
|
} // end getLastAccessDate
|
||||||
|
|
||||||
|
public AdminUserProperties getProperties() throws DataException
|
||||||
|
{
|
||||||
|
return createProperties();
|
||||||
|
|
||||||
|
} // end getProperties
|
||||||
|
|
||||||
|
public void setProperties(AdminUserProperties props) throws DataException
|
||||||
|
{
|
||||||
|
AdminUserProperties orig = createProperties();
|
||||||
|
BitSet delta = storeProperties(props);
|
||||||
|
if (delta.length()==0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
boolean succeeded = false;
|
||||||
|
try
|
||||||
|
{ // update the properties in the database
|
||||||
|
updateProperties(delta);
|
||||||
|
succeeded = true;
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
finally
|
||||||
|
{ // make sure the connection is released before we go
|
||||||
|
if (!succeeded)
|
||||||
|
storeProperties(orig);
|
||||||
|
|
||||||
|
} // end finally
|
||||||
|
|
||||||
|
} // end setProperties
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Package-level static operations
|
* Package-level static operations
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
@ -497,7 +611,7 @@ class AdminUserContextImpl implements AdminUserContext
|
||||||
if (rs.getBoolean("is_anon"))
|
if (rs.getBoolean("is_anon"))
|
||||||
throw new DataException("Cannot modify the defaults for the anonymous user.");
|
throw new DataException("Cannot modify the defaults for the anonymous user.");
|
||||||
|
|
||||||
return new AdminUserContextImpl(env,rs);
|
return new AdminUserContextImpl(conn,env,rs);
|
||||||
|
|
||||||
} // end try
|
} // end try
|
||||||
catch (SQLException e)
|
catch (SQLException e)
|
||||||
|
@ -530,7 +644,7 @@ class AdminUserContextImpl implements AdminUserContext
|
||||||
if (rs.getBoolean("is_anon"))
|
if (rs.getBoolean("is_anon"))
|
||||||
throw new DataException("Cannot modify the defaults for the anonymous user.");
|
throw new DataException("Cannot modify the defaults for the anonymous user.");
|
||||||
|
|
||||||
return new AdminUserContextImpl(env,rs);
|
return new AdminUserContextImpl(conn,env,rs);
|
||||||
|
|
||||||
} // end try
|
} // end try
|
||||||
catch (SQLException e)
|
catch (SQLException e)
|
||||||
|
|
|
@ -468,9 +468,9 @@ class CommunityUserContextImpl implements CommunityContext, CommunityBackend
|
||||||
int id = getData().getContactID();
|
int id = getData().getContactID();
|
||||||
ContactInfo rc;
|
ContactInfo rc;
|
||||||
if (id>=0)
|
if (id>=0)
|
||||||
rc = new ContactInfoImpl(env,id);
|
rc = new ContactInfoImpl(env,id,true);
|
||||||
else
|
else
|
||||||
rc = new ContactInfoImpl(getData().getHostUID(),cid);
|
rc = new ContactInfoImpl(getData().getHostUID(),cid,true);
|
||||||
getData().touch();
|
getData().touch();
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
|
|
@ -138,6 +138,7 @@ class ContactInfoImpl implements ContactInfo, Stashable
|
||||||
private java.util.Date last_update; // date of last update
|
private java.util.Date last_update; // date of last update
|
||||||
private boolean is_modified = false; // have we modified this ContactInfo?
|
private boolean is_modified = false; // have we modified this ContactInfo?
|
||||||
private ImageHook image_hook = null; // image hook object
|
private ImageHook image_hook = null; // image hook object
|
||||||
|
private boolean can_set_photo; // can we set the user photo?
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Constructors
|
* Constructors
|
||||||
|
@ -149,10 +150,11 @@ class ContactInfoImpl implements ContactInfo, Stashable
|
||||||
*
|
*
|
||||||
* @param owner_uid UID that owns this object.
|
* @param owner_uid UID that owns this object.
|
||||||
*/
|
*/
|
||||||
ContactInfoImpl(int owner_uid)
|
ContactInfoImpl(int owner_uid, boolean can_set_photo)
|
||||||
{
|
{
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
logger.debug("new ContactInfoImpl (empty) for UID = " + owner_uid);
|
logger.debug("new ContactInfoImpl (empty) for UID = " + owner_uid);
|
||||||
|
this.can_set_photo = can_set_photo;
|
||||||
makeEmpty(owner_uid,-1);
|
makeEmpty(owner_uid,-1);
|
||||||
|
|
||||||
} // end constructor
|
} // end constructor
|
||||||
|
@ -163,10 +165,11 @@ class ContactInfoImpl implements ContactInfo, Stashable
|
||||||
* @param owner_uid UID that owns this object.
|
* @param owner_uid UID that owns this object.
|
||||||
* @param owner_cid Community ID that owns this object.
|
* @param owner_cid Community ID that owns this object.
|
||||||
*/
|
*/
|
||||||
ContactInfoImpl(int owner_uid, int owner_cid)
|
ContactInfoImpl(int owner_uid, int owner_cid, boolean can_set_photo)
|
||||||
{
|
{
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
logger.debug("new ContactInfoImpl (empty) for UID = " + owner_uid + ", Community ID = " + owner_cid);
|
logger.debug("new ContactInfoImpl (empty) for UID = " + owner_uid + ", Community ID = " + owner_cid);
|
||||||
|
this.can_set_photo = can_set_photo;
|
||||||
makeEmpty(owner_uid,owner_cid);
|
makeEmpty(owner_uid,owner_cid);
|
||||||
|
|
||||||
} // end constructor
|
} // end constructor
|
||||||
|
@ -178,10 +181,11 @@ class ContactInfoImpl implements ContactInfo, Stashable
|
||||||
* @param contactid ID of the contact to load.
|
* @param contactid ID of the contact to load.
|
||||||
* @exception DataException The contact could not be loaded for some reason.
|
* @exception DataException The contact could not be loaded for some reason.
|
||||||
*/
|
*/
|
||||||
ContactInfoImpl(EnvEngine env, int contactid) throws DataException
|
ContactInfoImpl(EnvEngine env, int contactid, boolean can_set_photo) throws DataException
|
||||||
{
|
{
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
logger.debug("new ContactInfoImpl (loading CID " + contactid + ")");
|
logger.debug("new ContactInfoImpl (loading CID " + contactid + ")");
|
||||||
|
this.can_set_photo = can_set_photo;
|
||||||
Connection conn = null;
|
Connection conn = null;
|
||||||
|
|
||||||
try
|
try
|
||||||
|
@ -571,6 +575,8 @@ class ContactInfoImpl implements ContactInfo, Stashable
|
||||||
|
|
||||||
public void setPhotoURL(String addr)
|
public void setPhotoURL(String addr)
|
||||||
{
|
{
|
||||||
|
if (!can_set_photo)
|
||||||
|
return;
|
||||||
if ((addr!=null) && (addr.length()>255))
|
if ((addr!=null) && (addr.length()>255))
|
||||||
photo_url = addr.substring(0,255);
|
photo_url = addr.substring(0,255);
|
||||||
else
|
else
|
||||||
|
@ -582,6 +588,8 @@ class ContactInfoImpl implements ContactInfo, Stashable
|
||||||
|
|
||||||
public void setPhotoData(String prefix, String mimetype, int length, InputStream data)
|
public void setPhotoData(String prefix, String mimetype, int length, InputStream data)
|
||||||
{
|
{
|
||||||
|
if (!can_set_photo)
|
||||||
|
return;
|
||||||
if ((photo_url!=null) && (photo_url.startsWith(prefix)))
|
if ((photo_url!=null) && (photo_url.startsWith(prefix)))
|
||||||
{ // extract the image ID and create an image hook object
|
{ // extract the image ID and create an image hook object
|
||||||
int img_id = Integer.parseInt(photo_url.substring(prefix.length()));
|
int img_id = Integer.parseInt(photo_url.substring(prefix.length()));
|
||||||
|
@ -908,6 +916,12 @@ class ContactInfoImpl implements ContactInfo, Stashable
|
||||||
|
|
||||||
} // end importVCard
|
} // end importVCard
|
||||||
|
|
||||||
|
public boolean canSetPhoto()
|
||||||
|
{
|
||||||
|
return can_set_photo;
|
||||||
|
|
||||||
|
} // end canSetPhoto
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Implementations from interface Stashable
|
* Implementations from interface Stashable
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
|
|
@ -36,12 +36,13 @@ class UserContextImpl implements UserContext, UserBackend
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Property set indexes
|
// Property set indexes
|
||||||
private static final int PROP_FLAGS = 0; // flags
|
static final int PROP_FLAGS = 0; // flags
|
||||||
|
|
||||||
private static final BitSet ALL_PROPS; // BitSet representing all properties
|
static final BitSet ALL_PROPS; // BitSet representing all properties
|
||||||
|
|
||||||
// Boolean flag indexes
|
// Boolean flag indexes
|
||||||
private static final int BF_POSTPICTURES = 0;
|
static final int BF_POSTPICTURES = 0;
|
||||||
|
static final int BF_ADM_NOPHOTO = 1;
|
||||||
|
|
||||||
private static Category logger = Category.getInstance(UserContextImpl.class);
|
private static Category logger = Category.getInstance(UserContextImpl.class);
|
||||||
|
|
||||||
|
@ -288,8 +289,8 @@ class UserContextImpl implements UserContext, UserBackend
|
||||||
} // end try
|
} // end try
|
||||||
catch (SQLException e)
|
catch (SQLException e)
|
||||||
{ // database error - this is a DataException
|
{ // database error - this is a DataException
|
||||||
logger.error("DB error storing community properties: " + e.getMessage(),e);
|
logger.error("DB error storing user properties: " + e.getMessage(),e);
|
||||||
throw new DataException("unable to save community properties: " + e.getMessage(),e);
|
throw new DataException("unable to save user properties: " + e.getMessage(),e);
|
||||||
|
|
||||||
} // end catch
|
} // end catch
|
||||||
finally
|
finally
|
||||||
|
@ -581,11 +582,13 @@ class UserContextImpl implements UserContext, UserBackend
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
logger.debug("getContactInfo() for UID " + uid);
|
logger.debug("getContactInfo() for UID " + uid);
|
||||||
|
|
||||||
|
if (flags==null)
|
||||||
|
loadPrefs();
|
||||||
ContactInfoImpl rc;
|
ContactInfoImpl rc;
|
||||||
if (contactid>=0)
|
if (contactid>=0)
|
||||||
rc = new ContactInfoImpl(env,contactid);
|
rc = new ContactInfoImpl(env,contactid,!(flags.get(BF_ADM_NOPHOTO)));
|
||||||
else
|
else
|
||||||
rc = new ContactInfoImpl(uid);
|
rc = new ContactInfoImpl(uid,!(flags.get(BF_ADM_NOPHOTO)));
|
||||||
if (my_email==null)
|
if (my_email==null)
|
||||||
my_email = rc.getEmail();
|
my_email = rc.getEmail();
|
||||||
if (full_name==null)
|
if (full_name==null)
|
||||||
|
@ -1416,6 +1419,14 @@ class UserContextImpl implements UserContext, UserBackend
|
||||||
|
|
||||||
} // end setProperties
|
} // end setProperties
|
||||||
|
|
||||||
|
public boolean canSetUserPhoto() throws DataException
|
||||||
|
{
|
||||||
|
if (flags==null)
|
||||||
|
loadPrefs();
|
||||||
|
return !(flags.get(BF_ADM_NOPHOTO));
|
||||||
|
|
||||||
|
} // end canSetUserPhoto
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Implementations from interface UserBackend
|
* Implementations from interface UserBackend
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
|
|
@ -489,8 +489,10 @@ public class Account extends VeniceServlet
|
||||||
{ // we're ready to update the user profile
|
{ // we're ready to update the user profile
|
||||||
dlg.loadValues(request); // load field values
|
dlg.loadValues(request); // load field values
|
||||||
|
|
||||||
|
boolean photo_flag = true;
|
||||||
try
|
try
|
||||||
{ // validate the dialog and reset profile info
|
{ // validate the dialog and reset profile info
|
||||||
|
photo_flag = user.canSetUserPhoto();
|
||||||
if (dlg.doDialog(user)) // need to reconfirm email address
|
if (dlg.doDialog(user)) // need to reconfirm email address
|
||||||
throw new RedirectResult("account?cmd=V&tgt=" + URLEncoder.encode(tgt));
|
throw new RedirectResult("account?cmd=V&tgt=" + URLEncoder.encode(tgt));
|
||||||
else
|
else
|
||||||
|
@ -499,7 +501,7 @@ public class Account extends VeniceServlet
|
||||||
} // end try
|
} // end try
|
||||||
catch (ValidationException ve)
|
catch (ValidationException ve)
|
||||||
{ // there was a validation error...
|
{ // there was a validation error...
|
||||||
dlg.resetOnError(ve.getMessage() + " Please try again.");
|
dlg.resetOnError(photo_flag,ve.getMessage() + " Please try again.");
|
||||||
|
|
||||||
} // end catch
|
} // end catch
|
||||||
catch (DataException de)
|
catch (DataException de)
|
||||||
|
|
203
src/com/silverwrist/venice/servlets/AdminUserPhoto.java
Normal file
203
src/com/silverwrist/venice/servlets/AdminUserPhoto.java
Normal file
|
@ -0,0 +1,203 @@
|
||||||
|
/*
|
||||||
|
* 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) 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.util.StringUtil;
|
||||||
|
import com.silverwrist.util.ServletMultipartHandler;
|
||||||
|
import com.silverwrist.util.ServletMultipartException;
|
||||||
|
import com.silverwrist.util.image.*;
|
||||||
|
import com.silverwrist.venice.core.*;
|
||||||
|
import com.silverwrist.venice.except.*;
|
||||||
|
import com.silverwrist.venice.servlets.format.*;
|
||||||
|
|
||||||
|
public class AdminUserPhoto extends VeniceServlet
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static data members
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static Category logger = Category.getInstance(AdminUserPhoto.class);
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Overrides from class HttpServlet
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public String getServletInfo()
|
||||||
|
{
|
||||||
|
String rc = "AdminUserPhoto servlet - changes the user photo for a user\n"
|
||||||
|
+ "Part of the Venice Web Communities System\n";
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
} // end getServletInfo
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Overrides from class VeniceServlet
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
protected VeniceContent doVeniceGet(HttpServletRequest request, VeniceEngine engine,
|
||||||
|
UserContext user, RenderData rdat)
|
||||||
|
throws ServletException, IOException, VeniceServletResult
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{ // get the user to be modified
|
||||||
|
AdminOperations adm = user.getAdminInterface();
|
||||||
|
String s_uid = request.getParameter("uid");
|
||||||
|
if (s_uid==null)
|
||||||
|
throw new ErrorBox(null,"User ID parameter not found.","sysadmin?cmd=UF");
|
||||||
|
AdminUserContext admuser = adm.getUserContext(Integer.parseInt(s_uid));
|
||||||
|
|
||||||
|
if (request.getParameter("null")!=null)
|
||||||
|
{ // null the photo out and return
|
||||||
|
ContactInfo ci = admuser.getContactInfo();
|
||||||
|
ci.setPhotoURL(null);
|
||||||
|
admuser.putContactInfo(ci);
|
||||||
|
throw new RedirectResult("sysadmin?cmd=UM&uid=" + admuser.getUID());
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
return new AdminUserPhotoData(engine,admuser,rdat);
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (AccessError ae)
|
||||||
|
{ // an access error generally means we're not an administrator
|
||||||
|
return new ErrorBox("Access Error","You do not have permission to administer the system.",null);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (DataException de)
|
||||||
|
{ // error pulling the audit records
|
||||||
|
return new ErrorBox("Database Error","Unable to retrieve user information: " + de.getMessage(),
|
||||||
|
"sysadmin?cmd=UF");
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (NumberFormatException nfe)
|
||||||
|
{ // this is if we get a bogus UID
|
||||||
|
return new ErrorBox(null,"Invalid user ID parameter.","sysadmin?cmd=UF");
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
} // end doVeniceGet
|
||||||
|
|
||||||
|
protected VeniceContent doVenicePost(HttpServletRequest request, ServletMultipartHandler mphandler,
|
||||||
|
VeniceEngine engine, UserContext user, RenderData rdat)
|
||||||
|
throws ServletException, IOException, VeniceServletResult
|
||||||
|
{
|
||||||
|
AdminUserContext admuser;
|
||||||
|
try
|
||||||
|
{ // get the user to be modified
|
||||||
|
AdminOperations adm = user.getAdminInterface();
|
||||||
|
String s_uid = mphandler.getValue("uid");
|
||||||
|
if (s_uid==null)
|
||||||
|
throw new ErrorBox(null,"User ID parameter not found.","sysadmin?cmd=UF");
|
||||||
|
admuser = adm.getUserContext(Integer.parseInt(s_uid));
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (AccessError ae)
|
||||||
|
{ // an access error generally means we're not an administrator
|
||||||
|
return new ErrorBox("Access Error","You do not have permission to administer the system.",null);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (DataException de)
|
||||||
|
{ // error pulling the audit records
|
||||||
|
return new ErrorBox("Database Error","Unable to retrieve user information: " + de.getMessage(),
|
||||||
|
"sysadmin?cmd=UF");
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (NumberFormatException nfe)
|
||||||
|
{ // this is if we get a bogus UID
|
||||||
|
return new ErrorBox(null,"Invalid user ID parameter.","sysadmin?cmd=UF");
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
if (isImageButtonClicked(mphandler,"cancel"))
|
||||||
|
throw new RedirectResult("sysadmin?cmd=UM&uid=" + admuser.getUID());
|
||||||
|
|
||||||
|
if (isImageButtonClicked(mphandler,"upload"))
|
||||||
|
{ // uploading the image here!
|
||||||
|
// also check on file parameter status
|
||||||
|
if (!(mphandler.isFileParam("thepic")))
|
||||||
|
{ // bogus file parameter
|
||||||
|
logger.error("Internal Error: 'thepic' should be a file param");
|
||||||
|
return new ErrorBox(null,"Internal Error: 'thepic' should be a file param",
|
||||||
|
"sysadmin?cmd=UM&uid=" + admuser.getUID());
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
if (!(mphandler.getContentType("thepic").startsWith("image/")))
|
||||||
|
{ // must be an image type we uploaded!
|
||||||
|
logger.error("Error: 'thepic' not an image type");
|
||||||
|
return new ErrorBox(null,"You did not upload an image file. Try again.",
|
||||||
|
"sysadmin?cmd=UM&uid=" + admuser.getUID());
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
try
|
||||||
|
{ // get the real picture (normalized to 100x100 size)
|
||||||
|
ImageLengthPair real_pic = ImageNormalizer.normalizeImage(mphandler.getFileContentStream("thepic"),
|
||||||
|
engine.getUserPhotoSize(),"jpeg");
|
||||||
|
|
||||||
|
// set the user photo data!
|
||||||
|
ContactInfo ci = admuser.getContactInfo();
|
||||||
|
ci.setPhotoData(request.getContextPath() + "/imagedata/","image/jpeg",real_pic.getLength(),
|
||||||
|
real_pic.getData());
|
||||||
|
admuser.putContactInfo(ci);
|
||||||
|
|
||||||
|
// Jump back to the profile form.
|
||||||
|
throw new RedirectResult("sysadmin?cmd=UM&uid=" + admuser.getUID());
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (ServletMultipartException smpe)
|
||||||
|
{ // the servlet multipart parser screwed up
|
||||||
|
logger.error("Servlet multipart error:",smpe);
|
||||||
|
return new ErrorBox(null,"Internal Error: " + smpe.getMessage(),
|
||||||
|
"sysadmin?cmd=UM&uid=" + admuser.getUID());
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (ImageNormalizerException ine)
|
||||||
|
{ // the image was not valid
|
||||||
|
logger.error("Image normalizer error:",ine);
|
||||||
|
return new ErrorBox(null,ine.getMessage(),"admuserphoto?uid=" + admuser.getUID());
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (DataException de)
|
||||||
|
{ // error in the database!
|
||||||
|
logger.error("DataException:",de);
|
||||||
|
return new ErrorBox("Database Error","Database error storing user photo: " + de.getMessage(),
|
||||||
|
"sysadmin?cmd=UM&uid=" + admuser.getUID());
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
else
|
||||||
|
{ // the button must be wrong!
|
||||||
|
logger.error("no known button click on AdminUserPhoto.doPost");
|
||||||
|
return new ErrorBox("Internal Error","Unknown command button pressed",
|
||||||
|
"sysadmin?cmd=UM&uid=" + admuser.getUID());
|
||||||
|
|
||||||
|
} // end else
|
||||||
|
|
||||||
|
} // end doVenicePost
|
||||||
|
|
||||||
|
} // end class AdminUserPhoto
|
|
@ -17,6 +17,8 @@
|
||||||
*/
|
*/
|
||||||
package com.silverwrist.venice.servlets.format;
|
package com.silverwrist.venice.servlets.format;
|
||||||
|
|
||||||
|
import java.io.Writer;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import com.silverwrist.util.*;
|
import com.silverwrist.util.*;
|
||||||
import com.silverwrist.venice.core.*;
|
import com.silverwrist.venice.core.*;
|
||||||
|
@ -25,6 +27,74 @@ import com.silverwrist.venice.security.Role;
|
||||||
|
|
||||||
public class AdminModifyUserDialog extends ContentDialog
|
public class AdminModifyUserDialog extends ContentDialog
|
||||||
{
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* The photo URL control class.
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
static class CDUserPhotoControl extends CDBaseFormField
|
||||||
|
{
|
||||||
|
private String linkURL;
|
||||||
|
|
||||||
|
public CDUserPhotoControl(String name, String caption, String linkURL)
|
||||||
|
{
|
||||||
|
super(name,caption,"(click to change)",false);
|
||||||
|
this.linkURL = linkURL;
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
protected CDUserPhotoControl(CDUserPhotoControl other)
|
||||||
|
{
|
||||||
|
super(other);
|
||||||
|
this.linkURL = other.linkURL;
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
protected void renderActualField(Writer out, RenderData rdat) throws IOException
|
||||||
|
{
|
||||||
|
if (isEnabled())
|
||||||
|
out.write("<A HREF=\"" + rdat.getEncodedServletPath(linkURL) + "\">");
|
||||||
|
String photo = getValue();
|
||||||
|
if (StringUtil.isStringEmpty(photo))
|
||||||
|
photo = rdat.getPhotoNotAvailURL();
|
||||||
|
out.write("<IMG SRC=\"" + photo + "\" ALT=\"\" BORDER=0 WIDTH=100 HEIGHT=100></A>");
|
||||||
|
if (isEnabled())
|
||||||
|
out.write("</A>");
|
||||||
|
|
||||||
|
} // end renderActualField
|
||||||
|
|
||||||
|
protected void validateContents(String value) throws ValidationException
|
||||||
|
{ // this is a do-nothing value
|
||||||
|
} // end validateContents
|
||||||
|
|
||||||
|
public CDFormField duplicate()
|
||||||
|
{
|
||||||
|
return new CDUserPhotoControl(this);
|
||||||
|
|
||||||
|
} // end clone
|
||||||
|
|
||||||
|
public void setLinkURL(String s)
|
||||||
|
{
|
||||||
|
linkURL = s;
|
||||||
|
|
||||||
|
} // end setLinkURL
|
||||||
|
|
||||||
|
} // end class CDUserPhotoControl
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static data members
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static final String YES = "Y";
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private CDUserPhotoControl photo_control;
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Constructors
|
* Constructors
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
@ -43,8 +113,9 @@ public class AdminModifyUserDialog extends ContentDialog
|
||||||
addFormField(new CDTextFormField("remind","Password reminder phrase",null,false,32,255));
|
addFormField(new CDTextFormField("remind","Password reminder phrase",null,false,32,255));
|
||||||
addFormField(new CDRoleListFormField("base_lvl","Base security level",null,true,
|
addFormField(new CDRoleListFormField("base_lvl","Base security level",null,true,
|
||||||
Collections.EMPTY_LIST));
|
Collections.EMPTY_LIST));
|
||||||
addFormField(new CDCheckBoxFormField("verify_email","E-mail address verified",null,"Y"));
|
addFormField(new CDCheckBoxFormField("verify_email","E-mail address verified",null,YES));
|
||||||
addFormField(new CDCheckBoxFormField("lockout","Account locked out",null,"Y"));
|
addFormField(new CDCheckBoxFormField("lockout","Account locked out",null,YES));
|
||||||
|
addFormField(new CDCheckBoxFormField("nophoto","Disallow photo uploads for this user",null,YES));
|
||||||
addFormField(new CDFormCategoryHeader("Name"));
|
addFormField(new CDFormCategoryHeader("Name"));
|
||||||
addFormField(new CDTextFormField("prefix","Prefix","(Mr., Ms., etc.)",false,8,8));
|
addFormField(new CDTextFormField("prefix","Prefix","(Mr., Ms., etc.)",false,8,8));
|
||||||
addFormField(new CDTextFormField("first","First name",null,true,32,64));
|
addFormField(new CDTextFormField("first","First name",null,true,32,64));
|
||||||
|
@ -55,7 +126,7 @@ public class AdminModifyUserDialog extends ContentDialog
|
||||||
addFormField(new CDTextFormField("company","Company",null,false,32,255));
|
addFormField(new CDTextFormField("company","Company",null,false,32,255));
|
||||||
addFormField(new CDTextFormField("addr1","Address",null,false,32,255));
|
addFormField(new CDTextFormField("addr1","Address",null,false,32,255));
|
||||||
addFormField(new CDTextFormField("addr2","Address","(line 2)",false,32,255));
|
addFormField(new CDTextFormField("addr2","Address","(line 2)",false,32,255));
|
||||||
addFormField(new CDCheckBoxFormField("pvt_addr","Hide address in profile",null,"Y"));
|
addFormField(new CDCheckBoxFormField("pvt_addr","Hide address in profile",null,YES));
|
||||||
addFormField(new CDTextFormField("loc","City",null,true,32,64));
|
addFormField(new CDTextFormField("loc","City",null,true,32,64));
|
||||||
addFormField(new CDTextFormField("reg","State/Province",null,true,32,64));
|
addFormField(new CDTextFormField("reg","State/Province",null,true,32,64));
|
||||||
addFormField(new CDTextFormField("pcode","Zip/Postal Code",null,true,32,64));
|
addFormField(new CDTextFormField("pcode","Zip/Postal Code",null,true,32,64));
|
||||||
|
@ -63,16 +134,20 @@ public class AdminModifyUserDialog extends ContentDialog
|
||||||
addFormField(new CDFormCategoryHeader("Phone Numbers"));
|
addFormField(new CDFormCategoryHeader("Phone Numbers"));
|
||||||
addFormField(new CDTextFormField("phone","Telephone",null,false,32,32));
|
addFormField(new CDTextFormField("phone","Telephone",null,false,32,32));
|
||||||
addFormField(new CDTextFormField("mobile","Mobile/cellphone",null,false,32,32));
|
addFormField(new CDTextFormField("mobile","Mobile/cellphone",null,false,32,32));
|
||||||
addFormField(new CDCheckBoxFormField("pvt_phone","Hide phone/mobile numbers in profile",null,"Y"));
|
addFormField(new CDCheckBoxFormField("pvt_phone","Hide phone/mobile numbers in profile",null,YES));
|
||||||
addFormField(new CDTextFormField("fax","Fax",null,false,32,32));
|
addFormField(new CDTextFormField("fax","Fax",null,false,32,32));
|
||||||
addFormField(new CDCheckBoxFormField("pvt_fax","Hide fax number in profile",null,"Y"));
|
addFormField(new CDCheckBoxFormField("pvt_fax","Hide fax number in profile",null,YES));
|
||||||
addFormField(new CDFormCategoryHeader("Internet"));
|
addFormField(new CDFormCategoryHeader("Internet"));
|
||||||
addFormField(new CDEmailAddressFormField("email","E-mail address",null,true,32,255));
|
addFormField(new CDEmailAddressFormField("email","E-mail address",null,true,32,255));
|
||||||
addFormField(new CDCheckBoxFormField("pvt_email","Hide e-mail address in profile",null,"Y"));
|
addFormField(new CDCheckBoxFormField("pvt_email","Hide e-mail address in profile",null,YES));
|
||||||
addFormField(new CDTextFormField("url","Home page","(URL)",false,32,255));
|
addFormField(new CDTextFormField("url","Home page","(URL)",false,32,255));
|
||||||
addFormField(new CDFormCategoryHeader("Personal"));
|
addFormField(new CDFormCategoryHeader("Personal"));
|
||||||
addFormField(new CDTextFormField("descr","Personal description",null,false,32,255));
|
addFormField(new CDTextFormField("descr","Personal description",null,false,32,255));
|
||||||
|
photo_control = new CDUserPhotoControl("photo","User Photo","userphoto");
|
||||||
|
addFormField(photo_control);
|
||||||
addFormField(new CDFormCategoryHeader("User Preferences"));
|
addFormField(new CDFormCategoryHeader("User Preferences"));
|
||||||
|
addFormField(new CDCheckBoxFormField("pic_in_post","Display user photos next to conference posts",
|
||||||
|
"(where applicable)",YES));
|
||||||
addFormField(new CDLocaleListFormField("locale","Default locale","(for formatting dates/times)",true));
|
addFormField(new CDLocaleListFormField("locale","Default locale","(for formatting dates/times)",true));
|
||||||
addFormField(new CDTimeZoneListFormField("tz","Default time zone",null,true));
|
addFormField(new CDTimeZoneListFormField("tz","Default time zone",null,true));
|
||||||
addCommandButton(new CDImageButton("update","bn_update.gif","Update",80,24));
|
addCommandButton(new CDImageButton("update","bn_update.gif","Update",80,24));
|
||||||
|
@ -83,6 +158,7 @@ public class AdminModifyUserDialog extends ContentDialog
|
||||||
protected AdminModifyUserDialog(AdminModifyUserDialog other)
|
protected AdminModifyUserDialog(AdminModifyUserDialog other)
|
||||||
{
|
{
|
||||||
super(other);
|
super(other);
|
||||||
|
photo_control = (CDUserPhotoControl)modifyField("photo");
|
||||||
|
|
||||||
} // end AdminModifyUserDialog
|
} // end AdminModifyUserDialog
|
||||||
|
|
||||||
|
@ -172,12 +248,15 @@ public class AdminModifyUserDialog extends ContentDialog
|
||||||
|
|
||||||
setFieldValue("base_lvl",String.valueOf(admuser.getBaseLevel()));
|
setFieldValue("base_lvl",String.valueOf(admuser.getBaseLevel()));
|
||||||
if (admuser.isEmailVerified())
|
if (admuser.isEmailVerified())
|
||||||
setFieldValue("verify_email","Y");
|
setFieldValue("verify_email",YES);
|
||||||
if (admuser.isLockedOut())
|
if (admuser.isLockedOut())
|
||||||
setFieldValue("lockout","Y");
|
setFieldValue("lockout",YES);
|
||||||
|
|
||||||
ContactInfo ci = admuser.getContactInfo(); // get the main contact info
|
ContactInfo ci = admuser.getContactInfo(); // get the main contact info
|
||||||
|
AdminUserProperties props = admuser.getProperties();
|
||||||
|
|
||||||
|
if (props.getDisallowPhoto())
|
||||||
|
setFieldValue("nophoto",YES);
|
||||||
setFieldValue("prefix",ci.getNamePrefix());
|
setFieldValue("prefix",ci.getNamePrefix());
|
||||||
setFieldValue("first",ci.getGivenName());
|
setFieldValue("first",ci.getGivenName());
|
||||||
char init = ci.getMiddleInitial();
|
char init = ci.getMiddleInitial();
|
||||||
|
@ -189,7 +268,7 @@ public class AdminModifyUserDialog extends ContentDialog
|
||||||
setFieldValue("addr1",ci.getAddressLine1());
|
setFieldValue("addr1",ci.getAddressLine1());
|
||||||
setFieldValue("addr2",ci.getAddressLine2());
|
setFieldValue("addr2",ci.getAddressLine2());
|
||||||
if (ci.getPrivateAddress())
|
if (ci.getPrivateAddress())
|
||||||
setFieldValue("pvt_addr","Y");
|
setFieldValue("pvt_addr",YES);
|
||||||
setFieldValue("loc",ci.getLocality());
|
setFieldValue("loc",ci.getLocality());
|
||||||
setFieldValue("reg",ci.getRegion());
|
setFieldValue("reg",ci.getRegion());
|
||||||
setFieldValue("pcode",ci.getPostalCode());
|
setFieldValue("pcode",ci.getPostalCode());
|
||||||
|
@ -197,15 +276,19 @@ public class AdminModifyUserDialog extends ContentDialog
|
||||||
setFieldValue("phone",ci.getPhone());
|
setFieldValue("phone",ci.getPhone());
|
||||||
setFieldValue("mobile",ci.getMobile());
|
setFieldValue("mobile",ci.getMobile());
|
||||||
if (ci.getPrivatePhone())
|
if (ci.getPrivatePhone())
|
||||||
setFieldValue("pvt_phone","Y");
|
setFieldValue("pvt_phone",YES);
|
||||||
setFieldValue("fax",ci.getFax());
|
setFieldValue("fax",ci.getFax());
|
||||||
if (ci.getPrivateFax())
|
if (ci.getPrivateFax())
|
||||||
setFieldValue("pvt_fax","Y");
|
setFieldValue("pvt_fax",YES);
|
||||||
setFieldValue("email",ci.getEmail());
|
setFieldValue("email",ci.getEmail());
|
||||||
if (ci.getPrivateEmail())
|
if (ci.getPrivateEmail())
|
||||||
setFieldValue("pvt_email","Y");
|
setFieldValue("pvt_email",YES);
|
||||||
setFieldValue("url",ci.getURL());
|
setFieldValue("url",ci.getURL());
|
||||||
setFieldValue("descr",admuser.getDescription());
|
setFieldValue("descr",admuser.getDescription());
|
||||||
|
setFieldValue("photo",ci.getPhotoURL());
|
||||||
|
photo_control.setLinkURL("adminuserphoto?uid=" + admuser.getUID());
|
||||||
|
if (props.getDisplayPostPictures())
|
||||||
|
setFieldValue("pic_in_post",YES);
|
||||||
setFieldValue("locale",admuser.getLocale().toString());
|
setFieldValue("locale",admuser.getLocale().toString());
|
||||||
setFieldValue("tz",admuser.getTimeZone().getID());
|
setFieldValue("tz",admuser.getTimeZone().getID());
|
||||||
|
|
||||||
|
@ -215,8 +298,6 @@ public class AdminModifyUserDialog extends ContentDialog
|
||||||
{
|
{
|
||||||
validate(); // validate the dialog
|
validate(); // validate the dialog
|
||||||
|
|
||||||
final String yes = "Y"; // the "yes" string
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{ // reset the base level
|
{ // reset the base level
|
||||||
admuser.setBaseLevel(Integer.parseInt(getFieldValue("base_lvl")));
|
admuser.setBaseLevel(Integer.parseInt(getFieldValue("base_lvl")));
|
||||||
|
@ -233,12 +314,14 @@ public class AdminModifyUserDialog extends ContentDialog
|
||||||
if (!StringUtil.isStringEmpty(foo))
|
if (!StringUtil.isStringEmpty(foo))
|
||||||
admuser.setPassword(foo,getFieldValue("remind"));
|
admuser.setPassword(foo,getFieldValue("remind"));
|
||||||
|
|
||||||
admuser.setEmailVerified(yes.equals(getFieldValue("verify_email")));
|
admuser.setEmailVerified(YES.equals(getFieldValue("verify_email")));
|
||||||
admuser.setLockedOut(yes.equals(getFieldValue("lockout")));
|
admuser.setLockedOut(YES.equals(getFieldValue("lockout")));
|
||||||
|
|
||||||
ContactInfo ci = admuser.getContactInfo(); // get the main contact info
|
ContactInfo ci = admuser.getContactInfo(); // get the main contact info
|
||||||
|
AdminUserProperties props = admuser.getProperties();
|
||||||
|
|
||||||
// Reset all the contact info fields.
|
// Reset all the contact info fields.
|
||||||
|
props.setDisallowPhoto(YES.equals(getFieldValue("nophoto")));
|
||||||
ci.setNamePrefix(getFieldValue("prefix"));
|
ci.setNamePrefix(getFieldValue("prefix"));
|
||||||
ci.setGivenName(getFieldValue("first"));
|
ci.setGivenName(getFieldValue("first"));
|
||||||
foo = getFieldValue("mid");
|
foo = getFieldValue("mid");
|
||||||
|
@ -251,22 +334,24 @@ public class AdminModifyUserDialog extends ContentDialog
|
||||||
ci.setCompany(getFieldValue("company"));
|
ci.setCompany(getFieldValue("company"));
|
||||||
ci.setAddressLine1(getFieldValue("addr1"));
|
ci.setAddressLine1(getFieldValue("addr1"));
|
||||||
ci.setAddressLine2(getFieldValue("addr2"));
|
ci.setAddressLine2(getFieldValue("addr2"));
|
||||||
ci.setPrivateAddress(yes.equals(getFieldValue("pvt_addr")));
|
ci.setPrivateAddress(YES.equals(getFieldValue("pvt_addr")));
|
||||||
ci.setLocality(getFieldValue("loc"));
|
ci.setLocality(getFieldValue("loc"));
|
||||||
ci.setRegion(getFieldValue("reg"));
|
ci.setRegion(getFieldValue("reg"));
|
||||||
ci.setPostalCode(getFieldValue("pcode"));
|
ci.setPostalCode(getFieldValue("pcode"));
|
||||||
ci.setCountry(getFieldValue("country"));
|
ci.setCountry(getFieldValue("country"));
|
||||||
ci.setPhone(getFieldValue("phone"));
|
ci.setPhone(getFieldValue("phone"));
|
||||||
ci.setMobile(getFieldValue("mobile"));
|
ci.setMobile(getFieldValue("mobile"));
|
||||||
ci.setPrivatePhone(yes.equals(getFieldValue("pvt_phone")));
|
ci.setPrivatePhone(YES.equals(getFieldValue("pvt_phone")));
|
||||||
ci.setFax(getFieldValue("fax"));
|
ci.setFax(getFieldValue("fax"));
|
||||||
ci.setPrivateFax(yes.equals(getFieldValue("pvt_fax")));
|
ci.setPrivateFax(YES.equals(getFieldValue("pvt_fax")));
|
||||||
ci.setEmail(getFieldValue("email"));
|
ci.setEmail(getFieldValue("email"));
|
||||||
ci.setPrivateEmail(yes.equals(getFieldValue("pvt_email")));
|
ci.setPrivateEmail(YES.equals(getFieldValue("pvt_email")));
|
||||||
ci.setURL(getFieldValue("url"));
|
ci.setURL(getFieldValue("url"));
|
||||||
|
props.setDisplayPostPictures(YES.equals(getFieldValue("pic_in_post")));
|
||||||
|
|
||||||
// Store the completed contact info.
|
// Store the completed contact info.
|
||||||
admuser.putContactInfo(ci);
|
admuser.putContactInfo(ci);
|
||||||
|
admuser.setProperties(props);
|
||||||
|
|
||||||
// Save off the user's description and preferences.
|
// Save off the user's description and preferences.
|
||||||
admuser.setDescription(getFieldValue("descr"));
|
admuser.setDescription(getFieldValue("descr"));
|
||||||
|
|
|
@ -0,0 +1,135 @@
|
||||||
|
/*
|
||||||
|
* 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) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
*/
|
||||||
|
package com.silverwrist.venice.servlets.format;
|
||||||
|
|
||||||
|
import java.awt.Dimension;
|
||||||
|
import javax.servlet.*;
|
||||||
|
import javax.servlet.http.*;
|
||||||
|
import com.silverwrist.util.StringUtil;
|
||||||
|
import com.silverwrist.venice.core.*;
|
||||||
|
import com.silverwrist.venice.except.*;
|
||||||
|
|
||||||
|
public class AdminUserPhotoData implements JSPRender
|
||||||
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static data members
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Attribute name for request attribute
|
||||||
|
protected static final String ATTR_NAME = "com.silverwrist.venice.content.AdminUserPhotoData";
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Attributes
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private Dimension photo_dims;
|
||||||
|
private String photo_url;
|
||||||
|
private int uid;
|
||||||
|
private String user_name;
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Constructor
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public AdminUserPhotoData(VeniceEngine engine, AdminUserContext admuser, RenderData rdat)
|
||||||
|
throws DataException
|
||||||
|
{
|
||||||
|
photo_dims = engine.getUserPhotoSize();
|
||||||
|
photo_url = admuser.getContactInfo().getPhotoURL();
|
||||||
|
if (StringUtil.isStringEmpty(photo_url))
|
||||||
|
photo_url = rdat.getPhotoNotAvailURL();
|
||||||
|
this.uid = admuser.getUID();
|
||||||
|
this.user_name = admuser.getUserName();
|
||||||
|
|
||||||
|
} // end constructor
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External static functions
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static AdminUserPhotoData retrieve(ServletRequest request)
|
||||||
|
{
|
||||||
|
return (AdminUserPhotoData)(request.getAttribute(ATTR_NAME));
|
||||||
|
|
||||||
|
} // end retrieve
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface VeniceContent
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public String getPageTitle(RenderData rdat)
|
||||||
|
{
|
||||||
|
return "Set User Photo";
|
||||||
|
|
||||||
|
} // end getPageTitle
|
||||||
|
|
||||||
|
public String getPageQID()
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
|
||||||
|
} // end getPageQID
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Implementations from interface JSPRender
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void store(ServletRequest request)
|
||||||
|
{
|
||||||
|
request.setAttribute(ATTR_NAME,this);
|
||||||
|
|
||||||
|
} // end store
|
||||||
|
|
||||||
|
public String getTargetJSPName()
|
||||||
|
{
|
||||||
|
return "admin_user_photo.jsp";
|
||||||
|
|
||||||
|
} // end getTargetJSPName
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External operations
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
public int getUID()
|
||||||
|
{
|
||||||
|
return uid;
|
||||||
|
|
||||||
|
} // end getUID
|
||||||
|
|
||||||
|
public String getUserName()
|
||||||
|
{
|
||||||
|
return user_name;
|
||||||
|
|
||||||
|
} // end getUserName
|
||||||
|
|
||||||
|
public String getPhotoTag(RenderData rdat)
|
||||||
|
{
|
||||||
|
StringBuffer buf = new StringBuffer("<IMG SRC=\"");
|
||||||
|
buf.append(photo_url).append("\" ALT=\"\" ALIGN=LEFT WIDTH=").append(photo_dims.width).append(" HEIGHT=");
|
||||||
|
buf.append(photo_dims.height).append(" HSPACE=6 VSPACE=0 BORDER=0>");
|
||||||
|
return buf.toString();
|
||||||
|
|
||||||
|
} // end getPhotoTag
|
||||||
|
|
||||||
|
} // end class AdminUserPhotoData
|
|
@ -208,6 +208,7 @@ public class EditProfileDialog extends ContentDialog
|
||||||
ContactInfo ci = uc.getContactInfo(); // get the main contact info
|
ContactInfo ci = uc.getContactInfo(); // get the main contact info
|
||||||
UserProperties props = uc.getProperties(); // get the properties
|
UserProperties props = uc.getProperties(); // get the properties
|
||||||
|
|
||||||
|
setFieldEnabled("photo",ci.canSetPhoto());
|
||||||
setFieldValue("prefix",ci.getNamePrefix());
|
setFieldValue("prefix",ci.getNamePrefix());
|
||||||
setFieldValue("first",ci.getGivenName());
|
setFieldValue("first",ci.getGivenName());
|
||||||
char init = ci.getMiddleInitial();
|
char init = ci.getMiddleInitial();
|
||||||
|
@ -300,11 +301,12 @@ public class EditProfileDialog extends ContentDialog
|
||||||
|
|
||||||
} // end doDialog
|
} // end doDialog
|
||||||
|
|
||||||
public void resetOnError(String message)
|
public void resetOnError(boolean photo_flag, String message)
|
||||||
{
|
{
|
||||||
setErrorMessage(message);
|
setErrorMessage(message);
|
||||||
setFieldValue("pass1",null);
|
setFieldValue("pass1",null);
|
||||||
setFieldValue("pass2",null);
|
setFieldValue("pass2",null);
|
||||||
|
setFieldEnabled("photo",photo_flag);
|
||||||
|
|
||||||
} // end resetOnError
|
} // end resetOnError
|
||||||
|
|
||||||
|
|
43
web/format/admin_user_photo.jsp
Normal file
43
web/format/admin_user_photo.jsp
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) 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.*" %>
|
||||||
|
<%
|
||||||
|
AdminUserPhotoData data = AdminUserPhotoData.retrieve(request);
|
||||||
|
Variables.failIfNull(data);
|
||||||
|
RenderData rdat = RenderConfig.createRenderData(application,request,response);
|
||||||
|
%>
|
||||||
|
<% rdat.writeContentHeader(out,"Change User Photo","User: " + data.getUserName()); %>
|
||||||
|
|
||||||
|
<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="<%= rdat.getEncodedServletPath("adminuserphoto") %>">
|
||||||
|
<DIV CLASS="content"><%= rdat.getStdFontTag(ColorSelectors.CONTENT_FOREGROUND,2) %>
|
||||||
|
<INPUT TYPE=HIDDEN NAME="uid" VALUE="<%= data.getUID() %>">
|
||||||
|
<%= data.getPhotoTag(rdat) %>
|
||||||
|
New user photo:<BR>
|
||||||
|
<INPUT TYPE="FILE" NAME="thepic"><P>
|
||||||
|
<INPUT TYPE=IMAGE SRC="<%= rdat.getFullImagePath("bn_upload.gif") %>" NAME="upload" ALT="Upload"
|
||||||
|
WIDTH=80 HEIGHT=24 BORDER=0>
|
||||||
|
<INPUT TYPE=IMAGE SRC="<%= rdat.getFullImagePath("bn_cancel.gif") %>" NAME="cancel" ALT="Cancel"
|
||||||
|
WIDTH=80 HEIGHT=24 BORDER=0><BR CLEAR=LEFT><P>
|
||||||
|
<B><A HREF="<%= rdat.getEncodedServletPath("adminuserphoto?null=true&uid=" + data.getUID()) %>">Click
|
||||||
|
here to clear user's photo</A></B>
|
||||||
|
</FONT></DIV>
|
||||||
|
</FORM>
|
Loading…
Reference in New Issue
Block a user