package com.rectang.xsm.pages.cms; import com.rectang.xsm.Locale; import com.rectang.xsm.UserData; import com.rectang.xsm.XSM; import com.rectang.xsm.pages.XSMPage; import com.rectang.xsm.site.Site; import com.rectang.xsm.util.EmailUtils; import com.rectang.xsm.io.XSMDocument; import org.apache.wicket.ResourceReference; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.PageParameters; import org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar; import org.apache.wicket.markup.html.form.SubmitLink; import org.apache.wicket.markup.html.image.Image; import org.apache.wicket.util.lang.Bytes; import org.apache.wicket.model.CompoundPropertyModel; import java.net.URLEncoder; import java.util.Iterator; /** * The main CMS edit tab * * @author Andrew Williams * @version $Id: Edit.java 818 2010-05-30 14:04:21Z andy $ * @since 2.0 */ public class Edit extends DocumentPage { EditForm form; public Edit( PageParameters parameters ) { super( parameters ); add( form = new EditForm( "editform", getDoc() ) ); } public void layout() { super.layout(); if ( hasError() ) { return; } if ( !getDoc().lock( getXSMSession().getUser() ) ) { getSession().warn( "Could not lock file :(\n Perhaps you do not have suffcient permissions" ); setResponsePage( View.class, getPageParameters() ); } add( new Label( "activateEditor", activateEditor() ).setEscapeModelStrings( false ) .setVisible( !getXSMSession().getUser().getHtmlEditor().equals( "textarea" ) ) ); } private String activateEditor() { UserData user = getXSMSession().getUser(); return " tinyMCE.init({\n" + " mode : \"textareas\",\n" + " editor_selector : \"mceEditor\", \n" + " theme : \"advanced\",\n" + " theme_advanced_toolbar_location : \"top\",\n" + " theme_advanced_statusbar_location : \"bottom\",\n" + " skin : \"o2k7\",\n" + " skin_variant : \"black\",\n" + " content_css : \"" + XSM.getConfig().getUrl() + "sitetheme/style.css\",\n" + " language : \"" + Locale.getString( user, "tinymce.lang" ) + "\",\n" + " document_base_url : \"" + getDocumentPage().getLink() + "\",\n" + " convert_urls : true,\n" + " relative_urls : false,\n" + " remove_linebreaks : \"false\",\n" + " plugins : \"table,advimage,advlink,contextmenu,autosave,fullscreen,inlinepopups,style,insertdatetime,safari,visualchars,xhtmlxtras,searchreplace\", \n" + " theme_advanced_buttons1_add : \"ins,del,abbr,acronym\", \n" + " theme_advanced_buttons2_add : \"|,forecolor,backcolor,|,styleprops,|,insertdate,inserttime\", \n" + " theme_advanced_buttons3_add_before : \"tablecontrols,|\", \n" + " theme_advanced_buttons3_add : \"|,search,replace,|,visualchars,fullscreen\", \n" + " theme_advanced_resizing : true, \n" + " plugin_insertdate_dateFormat : \"%Y-%m-%d\",\n" + " plugin_insertdate_timeFormat : \"%H:%M:%S\",\n" + " external_image_list_url : \"" + XSM.getConfig().getUrl() + "page-imagelist?page=" + URLEncoder.encode( getDocumentPage().getPath() ) + "\",\n" + " external_link_list_url : \"" + XSM.getConfig().getUrl() + "page-linklist/?page=" + URLEncoder.encode( getDocumentPage().getPath() ) + "\",\n" + " valid_elements : \"*[*]\",\n" + " extended_valid_elements : \"table[border=0|cellspacing|cellpadding|width|height|class],tr[class|rowspan|width|height],td[class|colspan|rowspan|width|height]\",\n" + " });\n"; } private class EditForm extends Form { private XSMDocument doc; public EditForm( String id, XSMDocument doc ) { super( id ); this.setMultiPart( true ); this.setMaxSize( Bytes.megabytes( 50 ) ); this.doc = doc; setModel( new CompoundPropertyModel( doc ) ); add( new UploadProgressBar( "progress", this ) ); add( getDoc().edit( "content", "", getXSMSession().getUser() ) ); SubmitLink submit = new SubmitLink( "saveButton" ); submit.add( new Image( "saveImage", new ResourceReference( XSMPage.class, "buttons/save.png" ) ) ); add( submit.setVisible( isCMSPageEditing() ) ); } protected void onSubmit() { if ( this.hasError() ) { return; } Site site = getXSMSession().getSite(); String pagePath = getDocumentPage().getPath(); if ( doc.save( getXSMSession().getUser() ) ) { /* inform watching users of the update */ Iterator watchers = doc.getWatchers().iterator(); while ( watchers.hasNext() ) { UserData user = new UserData( (String) watchers.next(), site, false ); String email = user.getEmail(); if ( email != null && !email.equals( "" ) ) { EmailUtils.emailTo( "XSM Page " + pagePath + " updated", "Page " + pagePath + " on site " + site.getId() + " has been updated.\n\n" + "We hope to contain the differences in future versions of XSM!", email ); } } if ( pagePath.equals( site.getNewsSource() ) ) { // TODO perhaps report status on failure? site.publish( getXSMSession().getUser() ); } else { // TODO perhaps report status on failure? getDocumentPage().publish( getXSMSession().getUser() ); } setResponsePage( View.class, getPageNameParams() ); } else { error( "Failed to save page " + getDocumentPage().getTitle() ); } } } public Form getEditForm() { return form; } }