Author: agilliland
Date: Wed May 23 18:16:08 2007
New Revision: 541128
URL: http://svn.apache.org/viewvc?view=rev&rev=541128
Log:
adding some better validation for template editor and a few other little fixes.
Added:
roller/trunk/src/org/apache/roller/ui/struts2/editor/TemplateEdit-validation.xml
Modified:
roller/trunk/src/org/apache/roller/ui/struts2/editor/TemplateEdit.java
roller/trunk/src/org/apache/roller/ui/struts2/editor/TemplateEditBean.java
roller/trunk/web/WEB-INF/classes/struts.xml
roller/trunk/web/WEB-INF/jsps/editor/TemplateEdit.jsp
Added:
roller/trunk/src/org/apache/roller/ui/struts2/editor/TemplateEdit-validation.xml
URL:
http://svn.apache.org/viewvc/roller/trunk/src/org/apache/roller/ui/struts2/editor/TemplateEdit-validation.xml?view=auto&rev=541128
==============================================================================
---
roller/trunk/src/org/apache/roller/ui/struts2/editor/TemplateEdit-validation.xml
(added)
+++
roller/trunk/src/org/apache/roller/ui/struts2/editor/TemplateEdit-validation.xml
Wed May 23 18:16:08 2007
@@ -0,0 +1,30 @@
+<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
+ "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
+<validators>
+
+ <field name="bean.name">
+ <field-validator type="requiredstring">
+ <message key="TemplateEdit.error.nameNull">unspecified
key</message>
+ </field-validator>
+
+ <field-validator type="stringlength">
+ <param name="maxLength">255</param>
+ <message key="TemplateEdit.error.nameSize">unspecified
key</message>
+ </field-validator>
+ </field>
+
+ <field name="bean.link">
+ <field-validator type="stringlength">
+ <param name="maxLength">255</param>
+ <message key="TemplateEdit.error.linkSize">unspecified
key</message>
+ </field-validator>
+ </field>
+
+ <field name="bean.description">
+ <field-validator type="stringlength">
+ <param name="maxLength">255</param>
+ <message key="TemplateEdit.error.descriptionSize">unspecified
key</message>
+ </field-validator>
+ </field>
+
+</validators>
\ No newline at end of file
Modified: roller/trunk/src/org/apache/roller/ui/struts2/editor/TemplateEdit.java
URL:
http://svn.apache.org/viewvc/roller/trunk/src/org/apache/roller/ui/struts2/editor/TemplateEdit.java?view=diff&rev=541128&r1=541127&r2=541128
==============================================================================
--- roller/trunk/src/org/apache/roller/ui/struts2/editor/TemplateEdit.java
(original)
+++ roller/trunk/src/org/apache/roller/ui/struts2/editor/TemplateEdit.java Wed
May 23 18:16:08 2007
@@ -29,14 +29,11 @@
import org.apache.roller.business.UserManager;
import org.apache.roller.config.RollerConfig;
import org.apache.roller.pojos.PermissionsData;
-import org.apache.roller.pojos.UserData;
import org.apache.roller.pojos.WeblogTemplate;
-import org.apache.roller.pojos.WebsiteData;
-import org.apache.roller.ui.core.util.menu.Menu;
-import org.apache.roller.ui.core.util.menu.MenuHelper;
import org.apache.roller.ui.struts2.util.UIAction;
import org.apache.roller.util.Utilities;
import org.apache.roller.util.cache.CacheManager;
+import org.apache.struts2.interceptor.validation.SkipValidation;
/**
@@ -79,6 +76,7 @@
/**
* Show template edit page.
*/
+ @SkipValidation
public String execute() {
if(getTemplate() == null) {
@@ -98,7 +96,7 @@
getBean().setManualContentType(page.getOutputContentType());
}
- return SUCCESS;
+ return INPUT;
}
@@ -118,28 +116,28 @@
if(!hasActionErrors()) try {
- WeblogTemplate page = getTemplate();
- getBean().copyTo(page);
- page.setLastModified(new Date());
+ WeblogTemplate template = getTemplate();
+ getBean().copyTo(template);
+ template.setLastModified(new Date());
if (getBean().getAutoContentType() == null ||
!getBean().getAutoContentType().booleanValue()) {
- page.setOutputContentType(getBean().getManualContentType());
+
template.setOutputContentType(getBean().getManualContentType());
} else {
- // empty content-type indicates that page uses auto
content-type detection
- page.setOutputContentType(null);
+ // empty content-type indicates that template uses auto
content-type detection
+ template.setOutputContentType(null);
}
// save template and flush
UserManager mgr = RollerFactory.getRoller().getUserManager();
- mgr.savePage(page);
+ mgr.savePage(template);
RollerFactory.getRoller().flush();
// notify caches
- CacheManager.invalidate(page);
+ CacheManager.invalidate(template);
// success message
- addMessage("pageForm.save.success", page.getName());
+ addMessage("pageForm.save.success", template.getName());
} catch (RollerException ex) {
log.error("Error updating page - "+getBean().getId(), ex);
@@ -147,7 +145,7 @@
addError("Error saving template");
}
- return SUCCESS;
+ return INPUT;
}
@@ -158,17 +156,30 @@
private void myValidate() {
- // make sure that we have an appropriate name value
-
- // make sure that we have an appropriate action value
-
- // first off, check if template already exists
-// WeblogTemplate existingPage = mgr.getPageByName(website,
getNewTmplName());
-// if(existingPage != null) {
-// addError("pagesForm.error.alreadyExists", getNewTmplName());
-// return INPUT;
-// }
+ // if name changed make sure there isn't a conflict
+ if(!getTemplate().getName().equals(getBean().getName())) {
+ try {
+ UserManager umgr = RollerFactory.getRoller().getUserManager();
+ if(umgr.getPageByName(getActionWeblog(), getBean().getName())
!= null) {
+ addError("pagesForm.error.alreadyExists",
getBean().getName());
+ }
+ } catch (RollerException ex) {
+ log.error("Error checking page name uniqueness", ex);
+ }
+ }
+ // if link changed make sure there isn't a conflict
+ if(!StringUtils.isEmpty(getBean().getLink()) &&
+ !getBean().getLink().equals(getTemplate().getLink())) {
+ try {
+ UserManager umgr = RollerFactory.getRoller().getUserManager();
+ if(umgr.getPageByLink(getActionWeblog(), getBean().getLink())
!= null) {
+ addError("pagesForm.error.alreadyExists",
getBean().getLink());
+ }
+ } catch (RollerException ex) {
+ log.error("Error checking page link uniqueness", ex);
+ }
+ }
}
Modified:
roller/trunk/src/org/apache/roller/ui/struts2/editor/TemplateEditBean.java
URL:
http://svn.apache.org/viewvc/roller/trunk/src/org/apache/roller/ui/struts2/editor/TemplateEditBean.java?view=diff&rev=541128&r1=541127&r2=541128
==============================================================================
--- roller/trunk/src/org/apache/roller/ui/struts2/editor/TemplateEditBean.java
(original)
+++ roller/trunk/src/org/apache/roller/ui/struts2/editor/TemplateEditBean.java
Wed May 23 18:16:08 2007
@@ -28,17 +28,14 @@
*/
public class TemplateEditBean {
- private String id;
- private String action;
- private String name;
- private String description;
- private String link;
- private String contents;
- private String templateLanguage;
- private boolean navbar;
- private boolean hidden;
- private String outputContentType;
-
+ private String id = null;
+ private String name = null;
+ private String description = null;
+ private String link = null;
+ private String contents = null;
+ private String templateLanguage = null;
+ private boolean navbar= false;
+ private boolean hidden = false;
private Boolean autoContentType = Boolean.TRUE;
private String manualContentType = null;
@@ -51,14 +48,6 @@
this.id = id;
}
- public String getAction() {
- return this.action;
- }
-
- public void setAction( String action ) {
- this.action = action;
- }
-
public String getName() {
return this.name;
}
@@ -115,14 +104,6 @@
this.hidden = hidden;
}
- public String getOutputContentType() {
- return this.outputContentType;
- }
-
- public void setOutputContentType( String outputContentType ) {
- this.outputContentType = outputContentType;
- }
-
public Boolean getAutoContentType() {
return autoContentType;
}
@@ -142,33 +123,36 @@
public void copyTo(WeblogTemplate dataHolder) {
- // only custom templates get to modify name, description, and link
- if(WeblogTemplate.ACTION_CUSTOM.equals(dataHolder.getAction())) {
- dataHolder.setName(this.name);
- dataHolder.setDescription(this.description);
- dataHolder.setLink(this.link);
- }
+ dataHolder.setContents(getContents());
- dataHolder.setContents(this.contents);
- dataHolder.setTemplateLanguage(this.templateLanguage);
- dataHolder.setNavbar(this.navbar);
- dataHolder.setHidden(this.hidden);
- dataHolder.setOutputContentType(this.outputContentType);
+ // the rest of the template properties can only be modified when
+ // dealing with a CUSTOM weblog template
+ if(dataHolder.isCustom()) {
+ dataHolder.setName(getName());
+ dataHolder.setDescription(getDescription());
+ dataHolder.setLink(getLink());
+ dataHolder.setNavbar(isNavbar());
+ dataHolder.setHidden(isHidden());
+ dataHolder.setTemplateLanguage(getTemplateLanguage());
+ }
}
public void copyFrom(WeblogTemplate dataHolder) {
this.id = dataHolder.getId();
- this.action = dataHolder.getAction();
this.name = dataHolder.getName();
this.description = dataHolder.getDescription();
this.link = dataHolder.getLink();
this.contents = dataHolder.getContents();
- this.templateLanguage = dataHolder.getTemplateLanguage();
this.navbar = dataHolder.isNavbar();
this.hidden = dataHolder.isHidden();
- this.outputContentType = dataHolder.getOutputContentType();
+ this.templateLanguage = dataHolder.getTemplateLanguage();
+
+ setManualContentType(dataHolder.getOutputContentType());
+ if(getManualContentType() != null) {
+ setAutoContentType(Boolean.FALSE);
+ }
}
}
Modified: roller/trunk/web/WEB-INF/classes/struts.xml
URL:
http://svn.apache.org/viewvc/roller/trunk/web/WEB-INF/classes/struts.xml?view=diff&rev=541128&r1=541127&r2=541128
==============================================================================
--- roller/trunk/web/WEB-INF/classes/struts.xml (original)
+++ roller/trunk/web/WEB-INF/classes/struts.xml Wed May 23 18:16:08 2007
@@ -347,7 +347,7 @@
<action name="templateEdit!*" method="{1}"
class="org.apache.roller.ui.struts2.editor.TemplateEdit">
<result name="list" type="chain">templates</result>
- <result name="success" type="tiles">.TemplateEdit</result>
+ <result name="input" type="tiles">.TemplateEdit</result>
<result name="cancel" type="redirect-action">templates</result>
</action>
Modified: roller/trunk/web/WEB-INF/jsps/editor/TemplateEdit.jsp
URL:
http://svn.apache.org/viewvc/roller/trunk/web/WEB-INF/jsps/editor/TemplateEdit.jsp?view=diff&rev=541128&r1=541127&r2=541128
==============================================================================
--- roller/trunk/web/WEB-INF/jsps/editor/TemplateEdit.jsp (original)
+++ roller/trunk/web/WEB-INF/jsps/editor/TemplateEdit.jsp Wed May 23 18:16:08
2007
@@ -34,7 +34,6 @@
<s:form action="templateEdit!save" id="template">
<s:hidden name="weblog" />
<s:hidden name="bean.id"/>
- <s:hidden name="bean.action" />
<%-- ==================================================================
--%>
<%-- Name, link and desription: disabled when page is a required page --%>
@@ -61,9 +60,9 @@
// Update page URL when user changes link
function updatePageURLDisplay() {
- var previewSpan = document.getElementById("handlePreview");
+ var previewSpan = document.getElementById('linkPreview');
var n1 = previewSpan.firstChild;
- var n2 =
document.createTextNode(document.weblogTemplateFormEx.link.value);
+ var n2 =
document.createTextNode(document.getElementById('template_bean_link').value);
if (n1 == null) {
previewSpan.appendChild(n2);
} else {
@@ -72,25 +71,16 @@
}
// Don't launch page if user has changed link, it'll be a 404
function launchPage() {
- if (originalLink != document.weblogTemplateFormEx.link.value) {
+ if (originalLink !=
document.getElementById('template_bean_link').value) {
window.alert("Link changed, not launching page");
} else {
window.open(weblogURL + '/page/' + originalLink, '_blank');
}
}
- // Only highlight launch link user hasn't changed link
- function highlightLaunchLink() {
- if (originalLink == document.weblogTemplateFormEx.link.value) {
- document.getElementById('launchLink').style.textDecoration =
'underline';
- }
- }
- function unhighlightLaunchLink() {
- document.getElementById('launchLink').style.textDecoration =
'none';
- }
-->
</script>
- <s:if test="!template.required">
+ <s:if test="!template.required && template.custom">
<tr>
<td class="label" valign="top"><s:text name="pageForm.link"
/> </td>
<td class="field">
@@ -102,9 +92,8 @@
<s:textfield name="bean.link" size="50"
onkeyup="updatePageURLDisplay()" />
</s:else>
<br />
- <s:property value="actionWeblog.absoluteURL" />/page/<span
id="handlePreview" style="color:red"><s:property value="bean.link" /></span>
- [<span id="launchLink" class="fakelink"
- onClick="launchPage()"
onMouseOver="highlightLaunchLink()"
onMouseOut="unhighlightLaunchLink()"><s:text name="pageForm.launch" /></span>]
+ <s:property value="actionWeblog.absoluteURL" />/page/<span
id="linkPreview" style="color:red"><s:property value="bean.link" /></span>
+ <s:if test="template.link != null">[<a id="launchLink"
onClick="launchPage()"><s:text name="pageForm.launch" /></a>]</s:if>
</td>
<td class="description"></td>
</tr>
@@ -171,123 +160,86 @@
<%-- ==================================================================
--%>
<%-- Advanced settings inside a control toggle --%>
- <br />
- <br />
- <div id="advancedControlToggle" class="controlToggle">
- <span id="iadvancedControl">+</span>
- <a class="controlToggle"
onclick="javascript:toggleControl('advancedControlToggle','advancedControl')">
- <s:text name="pageForm.advancedSettings" /></a>
- </div>
- <div id="advancedControl" class="advancedControl" style="display:none">
+ <s:if test="template.custom">
+ <br />
+ <div id="advancedControlToggle" class="controlToggle">
+ <span id="iadvancedControl">+</span>
+ <a class="controlToggle"
onclick="javascript:toggleControl('advancedControlToggle','advancedControl')">
+ <s:text name="pageForm.advancedSettings" /></a>
+ </div>
- <table cellspacing="0">
+ <div id="advancedControl" class="advancedControl" style="display:none">
- <tr>
- <script type="text/javascript"><!--
- function showContentTypeField() {
- if
(document.getElementById('template_bean_autoContentType1').checked) {
-
document.getElementById('template_bean_manualContentType').readOnly = true;
-
document.getElementById('template_bean_manualContentType').style.background =
'#e5e5e5';
- } else {
-
document.getElementById('template_bean_manualContentType').readOnly = false;
-
document.getElementById('template_bean_manualContentType').style.background =
'#ffffff';
+ <table cellspacing="6">
+ <tr>
+ <td class="label" valign="top"><s:text
name="pageForm.outputContentType" /> </td>
+ <td class="field">
+ <script type="text/javascript"><!--
+ function showContentTypeField() {
+ if
(document.getElementById('template_bean_autoContentType1').checked) {
+
document.getElementById('template_bean_manualContentType').readOnly = true;
+
document.getElementById('template_bean_manualContentType').style.background =
'#e5e5e5';
+ } else {
+
document.getElementById('template_bean_manualContentType').readOnly = false;
+
document.getElementById('template_bean_manualContentType').style.background =
'#ffffff';
+ }
}
- }
- // --></script>
- <td class="field">
- <tr>
- <td class="label" valign="top"><s:text
name="pageForm.outputContentType" /> </td>
- <td class="field">
- <s:if test="bean.autoContentType">
- <input type="radio"
name="bean.autoContentType" value="true" checked="true"
onchange="showContentTypeField()" id="template_bean_autoContentType1"/>
- <s:text name="pageForm.useAutoContentType"
/><br />
-
- <input type="radio"
name="bean.autoContentType" value="false" onchange="showContentTypeField()"
id="template_bean_autoContentType2"/>
- <s:text name="pageForm.useManualContentType" />
- <s:textfield name="bean.manualContentType" />
- </s:if>
- <s:else>
- <input type="radio"
name="bean.autoContentType" value="true" onchange="showContentTypeField()"
id="template_bean_autoContentType1"/>
- <s:text name="pageForm.useAutoContentType"
/><br />
-
- <input type="radio"
name="bean.autoContentType" value="false" checked="true"
onchange="showContentTypeField()" id="template_bean_autoContentType2"/>
- <s:text name="pageForm.useManualContentType" />
- <s:textfield name="bean.manualContentType" />
- </s:else>
+ // --></script>
+ <s:if test="bean.autoContentType">
+ <input type="radio" name="bean.autoContentType"
value="true" checked="true" onchange="showContentTypeField()"
id="template_bean_autoContentType1"/>
+ <s:text name="pageForm.useAutoContentType" /><br />
- <br />
- <br />
-
- </td>
- <td class="description"></td>
- </tr>
- </td>
- <td class="description"></td>
- <script type="text/javascript"><!--
- showContentTypeField();
- // --></script>
- </tr>
-
- <tr>
- <td class="field">
- <s:if test="template.required">
- <s:hidden name="bean.navbar" />
- </s:if>
- <s:else>
- <tr>
- <td class="label"><s:text name="pageForm.navbar"
/> </td>
- <td class="field"><s:checkbox name="bean.navbar"
/>
- <s:text name="pageForm.navbar.tip" />
- </td>
- <td class="description"></td>
- </tr>
- </s:else>
- </td>
- <td class="description"></td>
- </tr>
-
- <td class="field">
- <s:if test="template.required">
- <s:hidden name="bean.hidden" />
- </s:if>
- <s:else>
- <tr>
- <td class="label"><s:text name="pageForm.hidden"
/> </td>
- <td class="field"><s:checkbox name="bean.hidden" />
- <s:text name="pageForm.hidden.tip" />
- </td>
- <td class="description"></td>
- </tr>
- </s:else>
- <br />
- <br />
-
- </td>
- <td class="description"></td>
- </tr>
+ <input type="radio" name="bean.autoContentType"
value="false" onchange="showContentTypeField()"
id="template_bean_autoContentType2"/>
+ <s:text name="pageForm.useManualContentType" />
+ <s:textfield name="bean.manualContentType" />
+ </s:if>
+ <s:else>
+ <input type="radio" name="bean.autoContentType"
value="true" onchange="showContentTypeField()"
id="template_bean_autoContentType1"/>
+ <s:text name="pageForm.useAutoContentType" /><br />
+
+ <input type="radio" name="bean.autoContentType"
value="false" checked="true" onchange="showContentTypeField()"
id="template_bean_autoContentType2"/>
+ <s:text name="pageForm.useManualContentType" />
+ <s:textfield name="bean.manualContentType" />
+ </s:else>
- <tr>
- <td class="field">
- <s:if test="template.required || !userIsAdmin}">
- <s:hidden name="bean.templateLanguage" />
- </s:if>
- <s:else>
- <tr>
- <td class="label"><s:text
name="pageForm.templateLanguage" /> </td>
- <td class="field">
- <s:select name="bean.templateLanguage"
list="templateLanguages" size="1" />
- </td>
- <td class="description"></td>
- </tr>
- </s:else>
- </td>
- <td class="description"></td>
- </tr>
+ <br />
+ <br />
- </table>
- <br />
-
- </div>
- <br />
+ <script type="text/javascript"><!--
+ showContentTypeField();
+ // --></script>
+
+ </td>
+ <td class="description"></td>
+ </tr>
+
+ <tr>
+ <td class="label"><s:text name="pageForm.navbar"
/> </td>
+ <td class="field"><s:checkbox name="bean.navbar" />
+ <s:text name="pageForm.navbar.tip" />
+ </td>
+ <td class="description"></td>
+ </tr>
+
+ <tr>
+ <td class="label"><s:text name="pageForm.hidden"
/> </td>
+ <td class="field"><s:checkbox name="bean.hidden" />
+ <s:text name="pageForm.hidden.tip" />
+ </td>
+ <td class="description"></td>
+ </tr>
+
+ <tr>
+ <td class="label"><s:text name="pageForm.templateLanguage"
/> </td>
+ <td class="field">
+ <s:select name="bean.templateLanguage"
list="templateLanguages" size="1" />
+ </td>
+ <td class="description"></td>
+ </tr>
+
+ </table>
+
+ </div>
+ </s:if>
</s:form>