package com.rectang.xsm.pages.nav; import com.rectang.xsm.pages.XSMPage; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.PageParameters; import com.rectang.xsm.io.XSMDocument; import com.rectang.xsm.io.RemoteDocument; import com.rectang.xsm.UserData; import com.rectang.xsm.pages.cms.Page; import com.rectang.xsm.site.HierarchicalPage; import com.rectang.xsm.site.DocumentPage; import com.rectang.xsm.site.Site; import java.io.File; /** * The main CMS contents tab rename page * * @author Andrew Williams * @version $Id: Rename.java 831 2011-09-25 12:59:18Z andy $ * @since 2.0 */ public class Rename extends Page { public Rename( PageParameters parameters ) { super( parameters ); } public void layout() { super.layout(); if ( !canEdit() ) { warn( "You do not have permission to rename this page" ); setResponsePage( Contents.class, getPageNameParams() ); return; } add( new Label( "rename", getString( "newname", new Model( getXSMPage() ) ) ) ); add( new RenameForm( "renameform", getXSMPage().getTitle() ) ); } private class RenameForm extends Form { private String title; public RenameForm( String id, String title ) { super( id ); this.title = title; add( new TextField( "title", new PropertyModel( this, "title" ) ) ); Button cancel = new Button( "cancel" ) { public void onSubmit() { setResponsePage( Contents.class, getPageNameParams() ); } }; cancel.setDefaultFormProcessing( false ); add( cancel ); } protected void onSubmit() { super.onSubmit(); Site site = getXSMSession().getSite(); UserData userdata = getXSMSession().getUser(); boolean wasHidden = getXSMPage().getHidden(); String oldTitle = getXSMPage().getTitle(); String pagePath = getXSMPage().getPath(); String newTitle, escaped, path; if ( title.charAt( 0 ) != '/' ) { newTitle = title; escaped = XSMDocument.encode( newTitle ); path = new File( getXSMPage().getParent().getPath(), escaped ).getPath(); } else { newTitle = (new File( title )).getName(); escaped = XSMDocument.encode( newTitle ); path = new File( (new File( title )).getParent(), escaped ).getPath(); oldTitle = new File( getXSMPage().getParent().getPath(), oldTitle ).getPath(); newTitle = new File( (new File( title )).getParent(), newTitle ).getPath(); } /* check for name sanity */ if ( escaped.charAt( 0 ) == '_' ) { /* spaces already converted */ warn( "Pages names cannot begin with the characters _& ?+/\"'" ); return; /* check for name existance */ } else if ( site.getPage( path ) != null ) { info( "Page \"" + path + "\" already exists" ); return; } else { HierarchicalPage newParent = (HierarchicalPage) site.getPage( (new File( path )).getParent() ); if ( (newParent.equals( site.getRootPage() ) && !userdata.isSiteAdmin()) || (!newParent.equals( site.getRootPage() ) && (!(newParent instanceof DocumentPage) || !(XSMDocument.getXSMDoc( site, (DocumentPage) newParent, false )) .canEdit( userdata ))) ) { warn( "You do not have permission to create the destination page" ); return; } else { boolean renamed = true; com.rectang.xsm.site.Page xsmPage = getXSMPage(); if ( xsmPage instanceof com.rectang.xsm.site.DocumentPage ) { renamed = ((com.rectang.xsm.site.DocumentPage) xsmPage).getXSMDocument() .rename( site, new DocumentPage( site, newParent, escaped ) ); } if ( renamed && xsmPage.rename( newTitle ) ) { (RemoteDocument.getDoc( site, "/data" + pagePath, false )).rename( site, "/data" + path, false ); // this means there is no slug set, so rename the output too if ( xsmPage.getPath().equals( xsmPage.getPublishedPath() ) ) { site.getPublishedDoc( xsmPage.getPath() ).rename( path ); } site.save(); getSession().info( "Page \"" + oldTitle + "\" successfully renamed to \"" + newTitle + "\"" ); if ( !wasHidden ) { site.publish( getXSMSession().getUser() ); } PageParameters newPage = new PageParameters(); newPage.add( "page", path ); setResponsePage( Contents.class, newPage ); } else { getSession().info( "Failed to rename page \"" + oldTitle + "\"" ); setResponsePage( Contents.class, getPageNameParams() ); } } } } public String getTitle() { return title; } public void setTitle( String title ) { this.title = title; } } }