libreccm-legacy/ccm-cms/src/com/arsdigita/cms/ui/UserAdminPane.java

200 lines
7.4 KiB
Java
Executable File

/*
* Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package com.arsdigita.cms.ui;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.Link;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.cms.CMS;
import com.arsdigita.cms.ContentSection;
import com.arsdigita.cms.SecurityManager;
import com.arsdigita.cms.UserHomeFolderMap;
import com.arsdigita.cms.util.GlobalizationUtil;
import com.arsdigita.cms.util.SecurityConstants;
import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.kernel.User;
import com.arsdigita.kernel.permissions.PermissionDescriptor;
import com.arsdigita.kernel.permissions.PermissionService;
import com.arsdigita.kernel.permissions.PrivilegeDescriptor;
import com.arsdigita.persistence.DataQuery;
import com.arsdigita.persistence.Filter;
import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.Session;
import com.arsdigita.persistence.SessionManager;
import com.arsdigita.ui.admin.Admin;
import com.arsdigita.web.Application;
import com.arsdigita.web.Web;
import com.arsdigita.xml.Element;
import java.math.BigDecimal;
import org.apache.log4j.Logger;
/**
* A pane that contains user administration details.
*
* @author Tzu-Mainn Chen
* @version $Id: UserAdminPane.java 287 2005-02-22 00:29:02Z sskracic $
*/
public class UserAdminPane extends SimpleContainer {
private static final Logger s_log = Logger.getLogger(UserAdminPane.class);
private final UserSearchForm m_userFolderResetForm;
private final UserFolderResetProcessForm m_userFolderResetProcessForm;
private final Label m_submitLabel;
private final Label m_deniedLabel;
private final Link m_link;
public UserAdminPane() {
m_userFolderResetForm = new UserSearchForm
("userFolderResetForm",
new Label("Reset a user's home folder to none"));
add(m_userFolderResetForm);
m_userFolderResetProcessForm = new UserFolderResetProcessForm();
add(m_userFolderResetProcessForm);
m_submitLabel = new Label("No default folder set for users");
add(m_submitLabel);
m_deniedLabel = new Label("You do not have permission to view this pane.");
add(m_deniedLabel);
Application adminApp = Admin.getInstance();
// Note that if the admin app is remounted after this form has been
// created, the link will be incorrect. Since this never happens in
// practice, we are not going to worry about it. -- 2004-01-27
m_link = new Link("Administer users site-wide",
adminApp==null ?
"not_found" : adminApp.getPrimaryURL());
add(m_link);
}
private static boolean hasSiteWideAdmin(User user) {
Application adminApp = Admin.getInstance();
if ( adminApp == null ) { return false; }
PermissionDescriptor admin = new PermissionDescriptor
(PrivilegeDescriptor.ADMIN, adminApp, user);
return PermissionService.checkPermission(admin);
}
public final void generateXML(final PageState state,
final Element parent) {
if ( !isVisible(state) ) { return; }
SecurityManager sm = CMS.getContext().getSecurityManager();
User user = Web.getContext().getUser();
if ( !sm.canAccess(user,SecurityConstants.STAFF_ADMIN) ) {
m_deniedLabel.generateXML(state, parent);
return;
}
final FormData one = m_userFolderResetForm.getFormData(state);
final FormData two =
m_userFolderResetProcessForm.getForm().getFormData(state);
if (one != null && one.isSubmission()) {
m_userFolderResetForm.generateXML(state, parent);
m_userFolderResetProcessForm.generateXML(state, parent);
} else if (two != null && two.isSubmission()) {
m_userFolderResetForm.generateXML(state, parent);
m_submitLabel.generateXML(state, parent);
} else {
m_userFolderResetForm.generateXML(state, parent);
}
if ( hasSiteWideAdmin(user) ) {
m_link.generateXML(state, parent);
}
}
private class UserFolderResetProcessForm extends UserAddForm {
public UserFolderResetProcessForm() {
super(m_userFolderResetForm.getSearchWidget(),"UserFolderResetProcess","Select the users you wish to reset.", "Set no default folder for users");
}
protected final DataQuery makeQuery(final PageState state) {
final Session session = SessionManager.getSession();
final DataQuery query = session.retrieveQuery
("com.arsdigita.cms.workflow.searchToAddMembers");
final String search = (String) getSearchWidget().getValue(state);
makeFilter(query, search);
query.addOrder("lastName, firstName, email");
final OID oid = CMS.getContext().getContentSection().getOID();
PermissionService.objectFilterQuery
(query, "userId", PrivilegeDescriptor.READ, oid);
return query;
}
private void makeFilter(final DataQuery query, final String search) {
query.clearFilter();
final Filter filter = query.addFilter
("upper(firstName || lastName || email) " +
"like '%' || upper(:search) || '%'");
filter.set("search", search);
}
public final void process(final FormSectionEvent e)
throws FormProcessException {
final FormData data = e.getFormData();
final PageState state = e.getPageState();
final String[] users = (String[]) data.get("users");
if (users == null) {
throw new FormProcessException
(lz("cms.ui.workflow.no_users_were_selected"));
} else {
User user;
ContentSection section = CMS.getContext().getContentSection();
for (int i = 0; i < users.length; i++) {
user = User.retrieve(new BigDecimal(users[i]));
UserHomeFolderMap map = UserHomeFolderMap.findUserHomeFolderMap(user,section);
if ( map != null ) {
map.delete();
}
}
}
}
}
private static GlobalizedMessage gz(final String key) {
return GlobalizationUtil.globalize(key);
}
private static String lz(final String key) {
return (String) gz(key).localize();
}
}