head	1.8;
access;
symbols
	TIGRIS_NOV_12_2000:1.7
	OLDHELM:1.7.0.4
	TIGRIS_NOV_11_2000:1.7
	TIGRIS_SEP_13_2000:1.7.0.2
	TIGRIS_BASELINE:1.7;
locks; strict;
comment	@# @;


1.8
date	2000.11.12.23.10.06;	author dlr;	state dead;
branches;
next	1.7;

1.7
date	2000.09.20.03.13.14;	author brian;	state Exp;
branches;
next	1.6;

1.6
date	2000.08.30.00.51.48;	author leonardr;	state Exp;
branches;
next	1.5;

1.5
date	2000.06.22.23.39.30;	author dlr;	state Exp;
branches;
next	1.4;

1.4
date	2000.05.31.23.33.46;	author ed;	state Exp;
branches;
next	1.3;

1.3
date	2000.04.18.00.10.33;	author jrobbins;	state Exp;
branches;
next	1.2;

1.2
date	2000.02.03.04.21.31;	author jrobbins;	state Exp;
branches;
next	1.1;

1.1
date	2000.01.30.01.59.36;	author jrobbins;	state Exp;
branches;
next	;


desc
@@


1.8
log
@Does not exist--possibly only WRT this location--in newhelm.
@
text
@/* ================================================================
 * Copyright (c) 2000 Collab.Net.  All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 * 
 * 1. Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 * 
 * 2. Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * 
 * 3. The end-user documentation included with the redistribution, if
 * any, must include the following acknowlegement: "This product includes
 * software developed by Collab.Net (http://www.Collab.Net/)."
 * Alternately, this acknowlegement may appear in the software itself, if
 * and wherever such third-party acknowlegements normally appear.
 * 
 * 4. The hosted project names must not be used to endorse or promote
 * products derived from this software without prior written
 * permission. For written permission, please contact info@@collab.net.
 * 
 * 5. Products derived from this software may not use the "Tigris" name
 * nor may "Tigris" appear in their names without prior written
 * permission of Collab.Net.
 * 
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL COLLAB.NET OR ITS CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * ====================================================================
 * 
 * This software consists of voluntary contributions made by many
 * individuals on behalf of Collab.Net.
 */


package org.tigris.helm.admin;

import org.webmacro.util.*;
import org.webmacro.servlet.*;
import org.webmacro.engine.*;
import org.webmacro.broker.*;

import javax.servlet.*;
import javax.servlet.http.*;

import com.sun.java.util.collections.ArrayList;
import com.sun.java.util.collections.Iterator;
import java.sql.*;
import gnu.regexp.RE;

import org.joist.security.PermissionSet;
import org.joist.security.RedirectException;
import org.joist.security.SecureServlet;
import org.joist.session.SessionManager;
import org.joist.database.DataManager;

import org.tigris.helm.database.TUserManager;
import org.tigris.helm.tool.TigrisUpdate;
import org.tigris.helm.tool.UpdateException;
import org.tigris.helm.tool.InnerNavPopulator;
import org.tigris.helm.tool.MailingList;


/**
 * Present a form for the editing of a mailing list
 */
public class ProjMailEdit extends SecureServlet {
    static private Log log = new Log("pmlEdt", "ProjMailEdit");
    static private boolean debug = true;

    static private RE emailRE = null;
    static private RE listnameRE = null;
    
    public void start() throws ServletException {
        super.start();
        try {
            emailRE = new RE("^[\\w\\-\\._=\\!#\\*\\+]+@@([\\w\\-]+\\.)+[a-zA-Z]{2,3}$");
            listnameRE= new RE("^[a-zA-Z0-9_]+$");
        }
        catch (gnu.regexp.REException e) {
            log.exception(e);
        }
    }

    protected String processRequest(Connection connection, WebContext context)
        throws HandlerException, RedirectException
    {
        String templateName = super.processRequest(connection, context);
        // super sets $UserName, Cancel

        // Get the userID and permissions of the person who logged in.
        String loginUserID = (String)context.get("loginUserID");
        PermissionSet userPerms = (PermissionSet)context.get("UserPermissions");

        SessionManager sMgr = getSessionManager(context);
        DataManager dMgr = sMgr.getDataManager();
        TUserManager uMgr = (TUserManager)
            dMgr.getManager("org.tigris.helm.database.TUserManager");

        ArrayList missingFields = new ArrayList();
        ArrayList validationErrors = new ArrayList();
        boolean listExists = false;

        String project = context.getForm("project");
        if (project == null)
            redirectToError(context, "ProjMailEdit: No project specified");
        context.put("project", project);
	InnerNavPopulator.Populate(connection,context,false);

        String list = context.getForm("list");
        if (list == null)
            redirectToError(context, "ProjMailEdit: No list specified");
        context.put("listname", list);

        MailingList mList;
        try {
            mList = new MailingList(connection, project, list);
        }
        catch (MailingList.DoesNotExist e) {
            redirectToError(context, "ProjMailEdit: List " + project + '-' +
                    list + " not present in database");
            throw new HandlerException(e.getMessage());
        }
        catch (SQLException e) {
            log.exception(e);
            String message = "ProjMailEdit: " + e.getMessage();
            if (debug) log.debug(message);
                throw new HandlerException(e.getMessage());
        }

        context.put("changed", Boolean.FALSE);

        String owner = context.getForm("owner");
        if (owner != null && owner.equals("")) owner = null;

        if (owner != null && !emailRE.isMatch(owner))
            validationErrors.add("Owner Email Address");
    
        String sublist = context.getForm("sublist");
        if (sublist != null && sublist.equals(""))
            sublist = null;

        if (sublist != null && !listnameRE.isMatch(sublist))
            validationErrors.add("Sublist Name");

        boolean isProjectOwner = false;
        context.put("isProjectOwner", Boolean.FALSE);
    
        try {
            String userID = sMgr.getUserID();
            String loginID = uMgr.getLoginID(connection, userID);
            isProjectOwner = uMgr.isProjectOwner(connection,
                    loginID, project);
            context.put("isProjectOwner",
                    isProjectOwner ? Boolean.TRUE : Boolean.FALSE);
        }
        catch (SQLException e) {
            log.exception(e);
            String message = "ProjectUserEdit: " + e.getMessage();
            if (debug)
                log.debug(message);
            context.put("message", "ProjectUserEdit got an SQLException");
        }
        catch (TUserManager.NoSuchUserException e) {
            log.exception(e);
            String message = "ProjectUserEdit: " + e.getMessage();
            if (debug)
                log.debug(message);
            throw new HandlerException(e.getMessage());
        }
    
        // Determine which button was pushed
        String action = (String) context.get("action");

        if (action.equals("Make Changes") && validationErrors.isEmpty() &&
            userPerms.accessAllowed("ProjMail - Change") && isProjectOwner) {
            if (debug)
                log.debug("Button=Make Changes");
        
            try {
                Iterator i = mList.getPrivNames().iterator();
                while (i.hasNext()) {
                    String opt = (String)i.next();
                    if (debug) log.debug(opt + "=" + context.getForm(opt));
                    String value = context.getForm(opt);
                    if ("".equals(value))
                        value = null;
                    mList.setPrivilege(opt, value != null);;
                }
                mList.setOwner(owner);
                mList.setSubList(sublist);
                // TODO: make updates more specific
                TigrisUpdate.update(connection);
                context.put("changed", Boolean.TRUE);
                if (debug)
                    log.debug("Button=Make Changes 2");
            }
            catch (MailingList.DoesNotExist e) {
                redirectToError(context, "ProjMailEdit: List " + project +
                        '-' + list + " not present in database");
            }
            catch (SQLException e) {
                log.exception(e);
                String message = "ProjMailEdit: " + e.getMessage();
                if (debug)
                    log.debug(message);
                throw new HandlerException(e.getMessage());
            }
            catch (UpdateException e) {
                log.exception(e);
                String message = "ProjMailEdit: " + e.getMessage();
                if (debug)
                    log.debug(message);
                throw new HandlerException(e.getMessage());
            }
        }
    
        if (debug)
            log.debug("step 3");
    
        try {
            mList = new MailingList(connection, project, list);
        }
        catch (MailingList.DoesNotExist e) {
            redirectToError(context, "ProjMailEdit: List " + project + '-' +
                    list + " not present in database");
            throw new HandlerException(e.getMessage());
        }
        catch (SQLException e) {
            log.exception(e);
            String message = "ProjMailEdit: " + e.getMessage();
            if (debug)
                log.debug(message);
            throw new HandlerException(e.getMessage());
        }

        owner = mList.getOwner();
        context.put("owner", owner != null ? owner : "");

        sublist = mList.getSubList();
        context.put("sublist", sublist != null ? sublist : "");

        if (Boolean.TRUE.equals(mList.privValue("digest"))) {
            context.put ("digest_enabled", Boolean.TRUE);
        }
        if (Boolean.TRUE.equals(mList.privValue("message_moderation")) ||
                Boolean.TRUE.equals(mList.privValue("sub_moderation"))) {
            context.put("moderation_enabled", Boolean.TRUE);
        }
    
        String level = (String) context.getForm("level");
        // For now, we always specify the default options - getting
        // the currently-specified ones is a pain
        if ("Advanced".equals(level)) {
            context.put("options", mList.getPrivArray(
                        MailingList.DISPLAY_ADVANCED));
            context.put("alternate_level", "Simple");
        } else {
            context.put("options", mList.getPrivArray(
                        MailingList.DISPLAY_BEGINER));
            context.put("alternate_level", "Advanced");
        }

        if (debug)
            log.debug("step 4 Options="+ mList.getPrivArray());

        context.put("missingFields", missingFields);
        context.put("validationErrors", validationErrors);
    
        return templateName;
    }

} /* end class ProjMailEdit */
@


1.7
log
@
Obtained from:
Submitted by:
Reviewed by:

Moved from org.helm to org.tigris.helm
Moved from org/helm to org/tigris/helm

perl -pi.bak -e, how I love thee

note: this update was done POST-CVS-REPOSITORY surgury.  In order to
get this right, you may need to remove the directories

$CVSROOT/helm/java/org/helm
$CVSROOT/helm/data/htdoc/look/www/org/helm
$CVSROOT/helm/templates/org/helm

before doing the "CVS update" call, since those directories don't
exist anymore and CVS will try to create lockfiles for you in them,
giving you an error.
@
text
@@


1.6
log
@Initial commit.
PR:
Obtained from:
Submitted by:
Reviewed by:
@
text
@d48 1
a48 1
package org.helm.admin;
d69 5
a73 5
import org.helm.database.TUserManager;
import org.helm.tool.TigrisUpdate;
import org.helm.tool.UpdateException;
import org.helm.tool.InnerNavPopulator;
import org.helm.tool.MailingList;
d110 1
a110 1
            dMgr.getManager("org.helm.database.TUserManager");
@


1.5
log
@Switched from DataManager.getXxxManger() API to DataManager.getManager("xxx.xxx.xxx").  Please note that this has the possiblity of introducing minor bugs if I did not type all the fully qualified class names properly.
@
text
@d72 1
d120 1
@


1.4
log
@These have been updated to allow either Simple or Advanced editing.

Indentation has been standardized (and tabs removed) in them.  In
ProjMailEdit, I changed the indentation to the style I prefer: 4 spaces.

ProjMailAdd has been changed to validate the owner e-mail address in the
same way that ProjMailEdit does.
PR:
Obtained from:
Submitted by:	Ed Korthof <ed@@apache.org>
Reviewed by:
@
text
@d108 2
a109 1
        TUserManager uMgr = (TUserManager) dMgr.getUserManager();
@


1.3
log
@switched from collections2.jar to collections.jar
@
text
@d86 186
a271 55
	super.start();
	try {
	    emailRE = new RE("^[\\w\\-\\._=\\!#\\*\\+]+@@([\\w\\-]+\\.)+[a-zA-Z]{2,3}$");
	    listnameRE= new RE("^[a-zA-Z0-9_]+$");
	}
	catch (gnu.regexp.REException e) {
	    log.exception(e);
	}
    }

  protected String processRequest(Connection connection, WebContext context)
    throws HandlerException, RedirectException
  {
    String templateName = super.processRequest(connection, context);
    // super sets $UserName, Cancel

    // Get the userID and permissions of the person who logged in.
    String loginUserID = (String)context.get("loginUserID");
    PermissionSet userPerms = (PermissionSet)context.get("UserPermissions");

    SessionManager sMgr = getSessionManager(context);
    DataManager dMgr = sMgr.getDataManager();
    TUserManager uMgr = (TUserManager) dMgr.getUserManager();

    ArrayList missingFields = new ArrayList();
    ArrayList validationErrors = new ArrayList();
    boolean listExists = false;

    String project = context.getForm("project");
    if (project == null)
	    redirectToError(context, "ProjMailEdit: No project specified");
    context.put("project", project);

    String list = context.getForm("list");
    if (list == null)
	    redirectToError(context, "ProjMailEdit: No list specified");
    context.put("listname", list);

    MailingList mList;
    try {
	mList = new MailingList(connection, project, list);
    }
    catch (MailingList.DoesNotExist e) {
	redirectToError(context, "ProjMailEdit: List " + project + '-' + list +
			" not present in database");
	throw new HandlerException(e.getMessage());
    }
    catch (SQLException e) {
	log.exception(e);
	String message = "ProjMailEdit: " + e.getMessage();
	if (debug) log.debug(message);
	throw new HandlerException(e.getMessage());
    }

    context.put("changed", Boolean.FALSE);
d273 2
a274 2
    String owner = context.getForm("owner");
    if (owner != null && owner.equals("")) owner = null;
d276 2
a277 2
    if (owner != null && !emailRE.isMatch(owner))
	validationErrors.add("Owner Email Address");
d279 1
a279 17
    String sublist = context.getForm("sublist");
    if (sublist != null && sublist.equals("")) sublist = null;

    if (sublist != null && !listnameRE.isMatch(sublist))
	validationErrors.add("Sublist Name");

    boolean isProjectOwner = false;
    context.put("isProjectOwner", Boolean.FALSE);
    
    try {
	String userID = sMgr.getUserID();
	String loginID = uMgr.getLoginID(connection, userID);
	isProjectOwner = uMgr.isProjectOwner(connection,
						     loginID,
						     project);
	context.put("isProjectOwner",
		    isProjectOwner ? Boolean.TRUE : Boolean.FALSE);
a280 86
    catch (SQLException e) {
      log.exception(e);
      String message = "ProjectUserEdit: " + e.getMessage();
      if (debug) log.debug(message);
      context.put("message", "ProjectUserEdit got an SQLException");
    }
    catch (TUserManager.NoSuchUserException e) {
	log.exception(e);
	String message = "ProjectUserEdit: " + e.getMessage();
	if (debug) log.debug(message);
	throw new HandlerException(e.getMessage());
    }
    
    // Determine which button was pushed
    String action = (String) context.get("action");

    if (action.equals("Make Changes") && validationErrors.isEmpty() &&
	userPerms.accessAllowed("ProjMail - Change") && isProjectOwner) {
	if (debug) log.debug("Button=Make Changes");
	
	try {
	    Iterator i = mList.getPrivNames().iterator();
	    while (i.hasNext()) {
		String opt = (String)i.next();
		if (debug) log.debug(opt + "=" + context.getForm(opt));
		mList.setPrivilege(opt, context.getForm(opt) != null);
	    }
	    mList.setOwner(owner);
	    mList.setSubList(sublist);
	    // TODO: make updates more specific
	    TigrisUpdate.update(connection);
	    context.put("changed", Boolean.TRUE);
	    if (debug) log.debug("Button=Make Changes 2");
	}
	catch (MailingList.DoesNotExist e) {
	    redirectToError(context, "ProjMailEdit: List " + project + '-' + list +
			    " not present in database");
	}
	catch (SQLException e) {
	    log.exception(e);
	    String message = "ProjMailEdit: " + e.getMessage();
	    if (debug) log.debug(message);
	    throw new HandlerException(e.getMessage());
	}
	catch (UpdateException e) {
	    log.exception(e);
	    String message = "ProjMailEdit: " + e.getMessage();
	    if (debug) log.debug(message);
	    throw new HandlerException(e.getMessage());
	}
    }
    
    if (debug) log.debug("step 3");
    
    try {
	    mList = new MailingList(connection, project, list);
    }
    catch (MailingList.DoesNotExist e) {
	redirectToError(context, "ProjMailEdit: List " + project + '-' + list +
                      " not present in database");
      throw new HandlerException(e.getMessage());
    }
    catch (SQLException e) {
      log.exception(e);
      String message = "ProjMailEdit: " + e.getMessage();
      if (debug) log.debug(message);
      throw new HandlerException(e.getMessage());
    }

    owner = mList.getOwner();
    context.put("owner", owner != null ? owner : "");

    sublist = mList.getSubList();
    context.put("sublist", sublist != null ? sublist : "");


    
    // TODO: finish, why don't List's work with webmacro?
    context.put("options", mList.getPrivArray());
    if (debug) log.debug("step 4 Options="+ mList.getPrivArray());

    context.put("missingFields", missingFields);
    context.put("validationErrors", validationErrors);
    
    return templateName;
  }
@


1.2
log
@Added tigris.org license
PR:
Obtained from:
Submitted by:
Reviewed by:
@
text
@d58 2
a59 2
import java.util.ArrayList;
import java.util.Iterator;
@


1.1
log
@initial checking
@
text
@d1 46
a46 1
// Copyright (c) 2000 Collab.Net, Inc. All Rights Reserved.
@

