package com.rectang.xsm.pages.cms; import org.apache.wicket.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.model.Model; import org.apache.wicket.model.StringResourceModel; import com.rectang.xsm.UserData; import com.rectang.xsm.site.Site; import com.rectang.xsm.pages.admin.Users; import java.util.List; /** * The main CMS permissions tab * * @author Andrew Williams * @version $Id: Permissions.java 802 2009-05-16 17:25:24Z andy $ * @since 2.0 */ public class Permissions extends DocumentPage { public Permissions( PageParameters parameters ) { super( parameters ); } public void layout() { super.layout(); if ( hasError() ) { return; } final UserData user = getXSMSession().getUser(); Site site = getXSMSession().getSite(); Label owner = new Label( "owner" ); owner.setDefaultModel( new StringResourceModel( "owner", owner, new Model( new UserData( getDoc().getOwner(), site, false ) ) ) ); add( owner ); add( new ListView<UserData>( "editors", Users.getUserList( site ) ) { protected void populateItem( ListItem listItem ) { final UserData next = (UserData) listItem.getModelObject(); CheckBox edit = new CheckBox( "edit" ) { public void onSelectionChanged() { super.onSelectionChanged(); Boolean isEditor = (Boolean) this.getModelObject(); List users = getDoc().getEditors(); if ( isEditor.equals( Boolean.TRUE ) ) { users.add( next.getUsername() ); } else { users.remove( next.getUsername() ); } getDoc().setEditors( users, user ); } protected boolean wantOnSelectionChangedNotifications() { return true; } }; edit.setEnabled( (user.isSiteAdmin() || getDoc().isOwner( user )) && !(next.isSiteAdmin() || next.isSiteEditor()) ); edit.setModel( new Model( Boolean.valueOf( next.isSiteAdmin() || next.isSiteEditor() || getDoc().isOwner( next ) || getDoc().getEditors().contains( next.getUsername() ) ) ) ); listItem.add( edit ); listItem.add( new Label( "username", next.getUsername() ) ); } } ); } }