Author: jleroux
Date: Mon Apr 11 14:17:30 2016
New Revision: 1738588
URL: http://svn.apache.org/viewvc?rev=1738588&view=rev
Log:
A modified patch from James Young based on a an original patch from Christoph
Neuroth for "Improved CMS tree: more functionality and faster for large trees"
- https://issues.apache.org/jira/browse/OFBIZ-4502
jleroux: I made few changes
* Use of UtilGenerics.cast() in new ContentJsonEvents.java rather than
@SuppressWarnings("unchecked")
* Removal of the commented out block "Lusini: disable RTE". I see no reasons
why we would not use elRTE. Notably in relation with adding errors where it's
currently used in trunk demo
* I changed the line
var unmovableSubtrees = [false, "categoryChildren_LusiniBrowseRoot",
"homeContentsRoot", "merchantContentsRoot"];
We have no such subtrees OOTB but it's good to keep the idea, I just
renamed categoryChildren_LusiniBrowseRoot to categoryChildren and put an
explaining comment
* I have roughly added the labels ContentWebSiteErrors,
ContentWebSiteAddNewErrors and ContentWebSiteAddError, though I have a doubt
about how this works. At least it's different than on trunk demo where it seems
to works better (despite having uncommented out elRTE in this commit). ALso I
don't remember how to add a menu worked (if it worked).
* I checked the version of jstree we use is the same than in the original patch
from Christoph Neuroth. BTW at r1559769 I tried to update jstree to jstree 3
but gave up.
* I removed the jquery.cookie.js implemnentation and replaced link in
WebSiteCMSNav.ftl. I already updted to jquery.cookie-1.4.0 at r1559769
Added:
ofbiz/trunk/applications/content/src/org/ofbiz/content/cms/ContentJsonEvents.java
(with props)
Modified:
ofbiz/trunk/applications/content/config/ContentUiLabels.xml
ofbiz/trunk/applications/content/servicedef/secas.xml
ofbiz/trunk/applications/content/servicedef/services_content.xml
ofbiz/trunk/applications/content/src/org/ofbiz/content/cms/CmsEvents.java
ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentMapFacade.java
ofbiz/trunk/applications/content/webapp/content/WEB-INF/actions/website/WebSitePublishPoint.groovy
ofbiz/trunk/applications/content/webapp/content/WEB-INF/controller.xml
ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSContent.ftl
ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSMeta.ftl
ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSNav.ftl
ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSPathAlias.ftl
ofbiz/trunk/applications/content/widget/WebSiteScreens.xml
ofbiz/trunk/applications/content/widget/website/WebSiteForms.xml
ofbiz/trunk/applications/datamodel/entitydef/content-entitymodel.xml
ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderLookupServices.java
ofbiz/trunk/framework/images/webapp/images/jquery/plugins/jsTree/jquery.jstree.js
Modified: ofbiz/trunk/applications/content/config/ContentUiLabels.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/config/ContentUiLabels.xml?rev=1738588&r1=1738587&r2=1738588&view=diff
==============================================================================
--- ofbiz/trunk/applications/content/config/ContentUiLabels.xml (original)
+++ ofbiz/trunk/applications/content/config/ContentUiLabels.xml Mon Apr 11
14:17:30 2016
@@ -29,6 +29,11 @@
<value xml:lang="zh">æ æ³æ¾å°cmsformï¼</value>
<value xml:lang="zh-TW">ç¡æ³æ¾å°cmsformï¼</value>
</property>
+ <property key="ConfirmDeleteContent">
+ <value xml:lang="de">Wollen Sie den Inhalt wirklich löschen?</value>
+ <value xml:lang="en">Do you really want to delete this content?</value>
+ <value xml:lang="fr">Voulez-vous vraiment supprimer ce document
?</value>
+ </property>
<property key="ContenCommEventContentAssocNotFoundForDelete">
<value xml:lang="en">CommEventContentAssoc entity not found for
delete, communicationEventId: ${parameters.communicationEventId} and contentId:
${parameters.contentId}</value>
<value xml:lang="fr">L'association avec la communication
${parameters.communicationEventId} et le document ${parameters.contentId} pour
la suppression n'a pas été trouvée</value>
@@ -3721,6 +3726,15 @@
<value xml:lang="zh">ç½ç«å
容</value>
<value xml:lang="zh-TW">ç¶²ç«å
§å®¹</value>
</property>
+ <property key="ContentWebSiteErrors">
+ <value xml:lang="en">Web Site Errors</value>
+ </property>
+ <property key="ContentWebSiteAddNewErrors">
+ <value xml:lang="en">Web Site Add New Errors</value>
+ </property>
+ <property key="ContentWebSiteAddError">
+ <value xml:lang="en">Web Site Add Error</value>
+ </property>
<property key="ContentWebSiteGenerateMissingSeoUrl">
<value xml:lang="en">Generate missing seo url's</value>
<value xml:lang="ja">SEO URLã®çæã«å¤±æãã¾ãã</value>
@@ -3772,7 +3786,7 @@
<value xml:lang="zh-TW">æ¡è¿ä½¿ç¨å
§å®¹ç®¡çç¨å¼ï¼</value>
</property>
<property key="ErrorLoadingContent">
- <value xml:lang="de">Ein Fehler beim Laden des Inhaltes ist
aufgetrete!</value>
+ <value xml:lang="de">Ein Fehler beim Laden des Inhaltes ist
aufgetreten!</value>
<value xml:lang="en">An error occurred loading content!</value>
<value xml:lang="fr">Erreur dans le chargement du document !</value>
<value
xml:lang="ja">ã³ã³ãã³ãã®ãã¼ãä¸ã«ã¨ã©ã¼ãçºçãã¾ãã!</value>
@@ -3781,6 +3795,11 @@
<value xml:lang="zh">è½½å
¥å
容æ¶åçé误ï¼</value>
<value xml:lang="zh-TW">è¼å
¥å
§å®¹æç¼çé¯èª¤ï¼</value>
</property>
+ <property key="ErrorMovingContent">
+ <value xml:lang="de">Ein Fehler beim Verschieben des Inhaltes ist
aufgetreten!</value>
+ <value xml:lang="en">An error occured moving content!</value>
+ <value xml:lang="fr">Erreur durant le déplacement du document
!</value>
+ </property>
<property key="FormFieldTitle_acroFormContentId">
<value xml:lang="ar">AcroForm (PDF) Content ID</value>
<value xml:lang="da">AcroForm (PDF) indholds ID</value>
Modified: ofbiz/trunk/applications/content/servicedef/secas.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/servicedef/secas.xml?rev=1738588&r1=1738587&r2=1738588&view=diff
==============================================================================
--- ofbiz/trunk/applications/content/servicedef/secas.xml (original)
+++ ofbiz/trunk/applications/content/servicedef/secas.xml Mon Apr 11 14:17:30
2016
@@ -135,12 +135,12 @@ under the License.
<eca service="createContent" event="commit">
<condition field-name="contentAssocTypeId" operator="is-not-empty"/>
<condition field-name="contentIdTo" operator="is-not-empty"/>
- <action service="createContentAssoc" mode="sync" run-as-user="system"/>
+ <action service="createContentAssoc" mode="sync" run-as-user="system"
result-to-result="true" />
</eca>
<eca service="createContent" event="commit">
<condition field-name="contentAssocTypeId" operator="is-not-empty"/>
<condition field-name="contentIdFrom" operator="is-not-empty"/>
- <action service="createContentAssoc" mode="sync" run-as-user="system"/>
+ <action service="createContentAssoc" mode="sync" run-as-user="system"
result-to-result="true" />
</eca>
<eca service="createContent" event="commit">
@@ -178,9 +178,10 @@ under the License.
<eca service="updateContentAssoc" event="in-validate">
<action service="checkContentAssocIds" mode="sync"/>
</eca>
-
+ <!--
<eca service="createContent" event="commit">
<condition field-name="contentId" operator="is-not-empty"/>
<action service="createContentAlternativeUrl" mode="sync"
run-as-user="system"/>
</eca>
+ -->
</service-eca>
Modified: ofbiz/trunk/applications/content/servicedef/services_content.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/servicedef/services_content.xml?rev=1738588&r1=1738587&r2=1738588&view=diff
==============================================================================
--- ofbiz/trunk/applications/content/servicedef/services_content.xml (original)
+++ ofbiz/trunk/applications/content/servicedef/services_content.xml Mon Apr 11
14:17:30 2016
@@ -45,7 +45,7 @@
<attribute name="partyId" type="String" mode="IN" optional="true"/>
<attribute name="mapKey" type="String" mode="IN" optional="true"/>
<attribute name="contentId" type="String" mode="INOUT"
optional="true"/>
- <attribute name="fromDate" type="Timestamp" mode="IN" optional="true"/>
+ <attribute name="fromDate" type="Timestamp" mode="INOUT"
optional="true"/>
<attribute name="sequenceNum" type="Long" mode="IN" optional="true"/>
<override name="contentTypeId" default-value="DOCUMENT"/>
<override name="contentName" allow-html="any"/>
Modified:
ofbiz/trunk/applications/content/src/org/ofbiz/content/cms/CmsEvents.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/cms/CmsEvents.java?rev=1738588&r1=1738587&r2=1738588&view=diff
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/cms/CmsEvents.java
(original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/cms/CmsEvents.java
Mon Apr 11 14:17:30 2016
@@ -142,7 +142,7 @@ public class CmsEvents {
GenericValue pathAlias = null;
try {
- pathAlias =
EntityQuery.use(delegator).from("WebSitePathAlias").where("webSiteId",
webSiteId, "pathAlias", pathInfo).cache().queryOne();
+ pathAlias =
EntityQuery.use(delegator).from("WebSitePathAlias").where("webSiteId",
webSiteId, "pathAlias",
pathInfo).orderBy("-fromDate").cache().filterByDate().queryOne();
} catch (GenericEntityException e) {
Debug.logError(e, module);
}
@@ -173,6 +173,8 @@ public class CmsEvents {
Locale locale = UtilHttp.getLocale(request);
// get the contentId/mapKey from URL
+ /* We use path aliases for everything anyway, so don't interpret
the pathInfo as contentId.
+ * This makes 404 pages much faster.
if (contentId == null) {
if (Debug.verboseOn()) Debug.logVerbose("Current PathInfo: " +
pathInfo, module);
String[] pathSplit = pathInfo.split("/");
@@ -182,16 +184,21 @@ public class CmsEvents {
mapKey = pathSplit[1];
}
}
+ */
// verify the request content is associated with the current
website
int statusCode = -1;
boolean hasErrorPage = false;
- try {
- statusCode = verifyContentToWebSite(delegator, webSiteId,
contentId);
- } catch (GeneralException e) {
- Debug.logError(e, module);
- throw new GeneralRuntimeException(e.getMessage(), e);
+ if (contentId != null) {
+ try {
+ statusCode = verifyContentToWebSite(delegator,
webSiteId, contentId);
+ } catch (GeneralException e) {
+ Debug.logError(e, module);
+ throw new GeneralRuntimeException(e.getMessage(), e);
+ }
+ } else {
+ statusCode = HttpServletResponse.SC_NOT_FOUND;
}
// We try to find a specific Error page for this website
concerning the status code
@@ -281,11 +288,11 @@ public class CmsEvents {
}
} catch (TemplateException e) {
- throw new GeneralRuntimeException("Error creating form
renderer", e);
+ throw new GeneralRuntimeException(String.format("Error
creating form renderer while rendering content [%s] with path alias [%s]",
contentId, pathInfo), e);
} catch (IOException e) {
- throw new GeneralRuntimeException("Error in the response
writer/output stream: " + e.toString(), e);
+ throw new GeneralRuntimeException(String.format("Error
in the response writer/output stream while rendering content [%s] with path
alias [%s]", contentId, pathInfo), e);
} catch (GeneralException e) {
- throw new GeneralRuntimeException("Error rendering
content: " + e.toString(), e);
+ throw new GeneralRuntimeException(String.format("Error
rendering content [%s] with path alias [%s]", contentId, pathInfo), e);
}
return "success";
Added:
ofbiz/trunk/applications/content/src/org/ofbiz/content/cms/ContentJsonEvents.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/cms/ContentJsonEvents.java?rev=1738588&view=auto
==============================================================================
---
ofbiz/trunk/applications/content/src/org/ofbiz/content/cms/ContentJsonEvents.java
(added)
+++
ofbiz/trunk/applications/content/src/org/ofbiz/content/cms/ContentJsonEvents.java
Mon Apr 11 14:17:30 2016
@@ -0,0 +1,184 @@
+package org.ofbiz.content.cms;
+
+import java.io.IOException;
+import java.sql.Timestamp;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.collections4.CollectionUtils;
+
+//import net.sf.json.JSONArray;
+//import net.sf.json.JSONObject;
+
+import org.apache.commons.io.IOUtils;
+import org.ofbiz.base.lang.JSON;
+import org.ofbiz.base.util.UtilDateTime;
+import org.ofbiz.base.util.UtilGenerics;
+import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.entity.Delegator;
+import org.ofbiz.entity.GenericEntityException;
+import org.ofbiz.entity.GenericEntityNotFoundException;
+import org.ofbiz.entity.GenericValue;
+import org.ofbiz.entity.condition.EntityCondition;
+import org.ofbiz.entity.transaction.TransactionUtil;
+import org.ofbiz.entity.util.EntityUtil;
+
+public class ContentJsonEvents {
+
+ public static final int CONTENT_NAME_MAX_LENGTH = 27;
+
+ public static String getContentAssocs(HttpServletRequest request,
HttpServletResponse response) throws GenericEntityException, IOException {
+ Delegator delegator = (Delegator) request.getAttribute("delegator");
+
+ String contentId = request.getParameter("contentId");
+
+ EntityCondition condition = EntityCondition.makeCondition(
+ EntityCondition.makeCondition(UtilMisc.toMap("contentId",
contentId)),
+ EntityUtil.getFilterByDateExpr()
+ );
+ List<GenericValue> assocs = delegator.findList("ContentAssoc",
condition, null, null, null, false);
+
+ List<Map<String, Object>> nodes = new LinkedList<Map<String,
Object>>();
+ for (GenericValue assoc : assocs) {
+ nodes.add(getTreeNode(assoc));
+ }
+
+ Collections.sort(nodes, new Comparator<Map<String, Object>>() {
+
+ @Override
+ public int compare(Map<String, Object> node1, Map<String, Object>
node2) {
+ Map<String, Object> data1 =
UtilGenerics.cast(node1.get("data"));
+ Map<String, Object> data2 =
UtilGenerics.cast(node2.get("data"));
+ if (data1 == null || data2 == null) {
+ return 0;
+ }
+
+ String title1 = (String) data1.get("title");
+ String title2 = (String) data2.get("title");
+ if (title1 == null || title2 == null) {
+ return 0;
+ }
+
+ return title1.toLowerCase().compareTo(title2.toLowerCase());
+ }
+
+ });
+ IOUtils.write(JSON.from(nodes).toString(), response.getOutputStream());
+
+ return "success";
+ }
+
+ public static String moveContent(HttpServletRequest request,
HttpServletResponse response) throws GenericEntityException, IOException {
+ final Delegator delegator = (Delegator)
request.getAttribute("delegator");
+
+ final String contentIdTo = request.getParameter("contentIdTo");
+ final String contentIdFrom = request.getParameter("contentIdFrom");
+ final String contentIdFromNew =
request.getParameter("contentIdFromNew");
+ final String contentAssocTypeId =
request.getParameter("contentAssocTypeId");
+ final Timestamp fromDate =
Timestamp.valueOf(request.getParameter("fromDate"));
+
+ final Timestamp now = UtilDateTime.nowTimestamp();
+ GenericValue assoc = TransactionUtil.inTransaction(new
Callable<GenericValue>() {
+ @Override
+ public GenericValue call() throws Exception {
+ GenericValue oldAssoc = delegator.findOne("ContentAssoc",
UtilMisc.toMap("contentIdTo", contentIdTo, "contentId", contentIdFrom,
"contentAssocTypeId", contentAssocTypeId, "fromDate", fromDate), false);
+ if (oldAssoc == null) {
+ throw new GenericEntityNotFoundException("Could not find
ContentAssoc by primary key [contentIdTo: $contentIdTo, contentId:
$contentIdFrom, contentAssocTypeId: $contentAssocTypeId, fromDate: $fromDate]");
+ }
+ GenericValue newAssoc = (GenericValue) oldAssoc.clone();
+
+ oldAssoc.set("thruDate", now);
+ oldAssoc.store();
+
+ newAssoc.set("contentId", contentIdFromNew);
+ newAssoc.set("fromDate", now);
+ newAssoc.set("thruDate", null);
+ delegator.clearCacheLine(delegator.create(newAssoc));
+
+ return newAssoc;
+ }
+ }, String.format("move content [%s] from [%s] to [%s]", contentIdTo,
contentIdFrom, contentIdFromNew), 0, true).call();
+
+ IOUtils.write(JSON.from(getTreeNode(assoc)).toString(),
response.getOutputStream());
+
+ return "success";
+ }
+
+ public static String deleteContent(HttpServletRequest request,
HttpServletResponse response) throws GenericEntityException {
+ Delegator delegator = (Delegator) request.getAttribute("delegator");
+ String contentId = request.getParameter("contentId");
+
+ deleteContent(delegator, contentId);
+
+ return "success";
+ }
+
+ public static void deleteContent(Delegator delegator, String contentId)
throws GenericEntityException {
+ Timestamp now = UtilDateTime.nowTimestamp();
+ EntityCondition condition = EntityCondition.makeCondition(
+ EntityCondition.makeCondition(UtilMisc.toMap("contentIdTo",
contentId)),
+ EntityUtil.getFilterByDateExpr()
+ );
+ List<GenericValue> assocs = delegator.findList("ContentAssoc",
condition, null, null, null, true);
+ for (GenericValue assoc : assocs) {
+ assoc.set("thruDate", now);
+ delegator.store(assoc);
+ }
+ deleteWebPathAliases(delegator, contentId);
+ }
+
+ private static void deleteWebPathAliases(Delegator delegator, String
contentId) throws GenericEntityException {
+ Timestamp now = UtilDateTime.nowTimestamp();
+ EntityCondition condition = EntityCondition.makeCondition(
+ EntityCondition.makeCondition(UtilMisc.toMap("contentId",
contentId)),
+ EntityUtil.getFilterByDateExpr()
+ );
+ List<GenericValue> pathAliases =
delegator.findList("WebSitePathAlias", condition, null, null, null, true);
+ for (GenericValue alias : pathAliases) {
+ alias.set("thruDate", now);
+ delegator.store(alias);
+ }
+ List<GenericValue> subContents = delegator.findList("ContentAssoc",
condition, null, null, null, true);
+ for (GenericValue subContentAssoc : subContents) {
+ deleteWebPathAliases(delegator,
subContentAssoc.getString("contentIdTo"));
+ }
+ }
+
+ private static Map<String, Object> getTreeNode(GenericValue assoc) throws
GenericEntityException {
+ GenericValue content = assoc.getRelatedOne("ToContent", true);
+ String contentName = assoc.getString("contentIdTo");
+ if (content != null && content.getString("contentName") != null) {
+ contentName = content.getString("contentName");
+ if (contentName.length() > CONTENT_NAME_MAX_LENGTH) {
+ contentName = contentName.substring(0,
CONTENT_NAME_MAX_LENGTH);
+ }
+ }
+
+ Map<String, Object> data = UtilMisc.toMap(
+ "title", (Object) contentName
+ );
+
+ Map<String, Object> attr = UtilMisc.toMap(
+ "id", assoc.get("contentIdTo"),
+ "contentId", assoc.get("contentId"),
+ "fromDate", assoc.getTimestamp("fromDate").toString(),
+ "contentAssocTypeId", assoc.get("contentAssocTypeId")
+ );
+
+ Map<String, Object> node = UtilMisc.toMap("data", (Object) data,
"attr", (Object) attr);
+
+ List<GenericValue> assocChildren =
content.getRelated("FromContentAssoc", null, null, true);
+ assocChildren = EntityUtil.filterByDate(assocChildren);
+ if (!CollectionUtils.isEmpty(assocChildren)) {
+ node.put("state", "closed");
+ }
+ return node;
+ }
+}
\ No newline at end of file
Propchange:
ofbiz/trunk/applications/content/src/org/ofbiz/content/cms/ContentJsonEvents.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
ofbiz/trunk/applications/content/src/org/ofbiz/content/cms/ContentJsonEvents.java
------------------------------------------------------------------------------
svn:keywords = Date Rev Author URL Id
Propchange:
ofbiz/trunk/applications/content/src/org/ofbiz/content/cms/ContentJsonEvents.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentMapFacade.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentMapFacade.java?rev=1738588&r1=1738587&r2=1738588&view=diff
==============================================================================
---
ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentMapFacade.java
(original)
+++
ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentMapFacade.java
Mon Apr 11 14:17:30 2016
@@ -255,11 +255,13 @@ public class ContentMapFacade implements
// so we're only looking for a direct alias using contentId
if (webSiteId != null && delegator != null) {
try {
+
GenericValue webSitePathAlias =
EntityQuery.use(delegator).from("WebSitePathAlias")
.where("mapKey", null,
"webSiteId", webSiteId,
"contentId", this.contentId)
- .cache().queryFirst();
+ .orderBy("-fromDate")
+ .cache().filterByDate().queryFirst();
if (webSitePathAlias != null) {
contentUri =
webSitePathAlias.getString("pathAlias");
}
Modified:
ofbiz/trunk/applications/content/webapp/content/WEB-INF/actions/website/WebSitePublishPoint.groovy
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/webapp/content/WEB-INF/actions/website/WebSitePublishPoint.groovy?rev=1738588&r1=1738587&r2=1738588&view=diff
==============================================================================
---
ofbiz/trunk/applications/content/webapp/content/WEB-INF/actions/website/WebSitePublishPoint.groovy
(original)
+++
ofbiz/trunk/applications/content/webapp/content/WEB-INF/actions/website/WebSitePublishPoint.groovy
Mon Apr 11 14:17:30 2016
@@ -20,38 +20,26 @@
import org.ofbiz.entity.condition.*
import org.ofbiz.entity.util.*
-webSiteContent = from("WebSiteContent").where("webSiteId", webSiteId,
"webSiteContentTypeId",
"PUBLISH_POINT").orderBy("-fromDate").filterByDate().queryFirst();
+webSiteContent = from("WebSiteContent").where("webSiteId", webSiteId,
"webSiteContentTypeId",
"PUBLISH_POINT").orderBy("-fromDate").cache().filterByDate().queryFirst();
if (webSiteContent) {
content = webSiteContent.getRelatedOne("Content", false);
contentRoot = content.contentId;
context.content = content;
context.contentRoot = contentRoot;
-
- // get all sub content for the publish point
- subsites = from("ContentAssoc").where("contentId",
contentRoot).queryList();
- context.subsites = subsites;
}
-webSiteMenu = from("WebSiteContent").where("webSiteId", webSiteId,
"webSiteContentTypeId", "MENU_ROOT").orderBy("-fromDate").queryFirst();
+webSiteMenu = from("WebSiteContent").where("webSiteId", webSiteId,
"webSiteContentTypeId", "MENU_ROOT").orderBy("-fromDate").cache().queryFirst();
if (webSiteMenu) {
menu = webSiteMenu.getRelatedOne("Content", false);
menuRoot = menu.contentId;
context.menu = menu;
context.menuRoot = menuRoot;
-
- // get all sub content for the menu root
- menus = from("ContentAssoc").where("contentId", menuRoot).queryList();
- context.menus = menus;
}
-webSiteError = from("WebSiteContent").where("webSiteId", webSiteId,
"webSiteContentTypeId", "ERROR_ROOT").orderBy("-fromDate").queryFirst();
+webSiteError = from("WebSiteContent").where("webSiteId", webSiteId,
"webSiteContentTypeId", "ERROR_ROOT").orderBy("-fromDate").cache().queryFirst();
if (webSiteError) {
error = webSiteError.getRelatedOne("Content", false);
errorRoot = error.contentId;
context.error = error;
context.errorRoot = errorRoot;
-
- // get all sub content for the error root
- errors = from("ContentAssoc").where("contentId", errorRoot).queryList();
- context.errors = errors;
}
Modified: ofbiz/trunk/applications/content/webapp/content/WEB-INF/controller.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/webapp/content/WEB-INF/controller.xml?rev=1738588&r1=1738587&r2=1738588&view=diff
==============================================================================
--- ofbiz/trunk/applications/content/webapp/content/WEB-INF/controller.xml
(original)
+++ ofbiz/trunk/applications/content/webapp/content/WEB-INF/controller.xml Mon
Apr 11 14:17:30 2016
@@ -39,6 +39,16 @@ under the License.
</postprocessor>
-->
+ <!-- workaround for use of @ofbizContentUrl tags in WYSIWYG editor image
tags
+ * prevents errors from showing up in the log
+ * shows the actual images in the editor by redirecting to the actual url
+ -->
+ <request-map uri="<@ofbizContentUrl>">
+ <security https="true" auth="true"/>
+ <event type="groovy"
invoke="component://content/webapp/content/WEB-INF/events/OfbizContentUrlEvent.groovy"/>
+ <response name="success" type="none" />
+ </request-map>
+
<request-map uri="chain">
<event type="java" path="org.ofbiz.webapp.event.TestEvent"
invoke="test"/>
<response name="success" type="request" value="/view"/>
@@ -443,6 +453,24 @@ under the License.
<response name="success" type="request" value="json"/>
<response name="error" type="request" value="json"/>
</request-map>
+
+ <request-map uri="getContentAssocsJson">
+ <security https="true" auth="true"/>
+ <event type="java" path="org.ofbiz.content.cms.ContentJsonEvents"
invoke="getContentAssocs"/>
+ <response name="success" type="none" />
+ </request-map>
+
+ <request-map uri="moveContentJson">
+ <security https="true" auth="true"/>
+ <event type="java" path="org.ofbiz.content.cms.ContentJsonEvents"
invoke="moveContent"/>
+ <response name="success" type="none" />
+ </request-map>
+
+ <request-map uri="deleteContentJson">
+ <security https="true" auth="true"/>
+ <event type="java" path="org.ofbiz.content.cms.ContentJsonEvents"
invoke="deleteContent"/>
+ <response name="success" type="none" />
+ </request-map>
<!-- ================ ContentType Requests ================= -->
<request-map uri="EditContentType">
@@ -1821,6 +1849,12 @@ under the License.
<response name="success" type="view" value="showContentPdf"/>
</request-map>
+ <request-map uri="WebSiteCmsPreview">
+ <security auth="true" https="true"/>
+ <event invoke="execute"
path="org.ofbiz.content.content.WebSiteCmsPreviewEvent" type="java"/>
+ <response name="success" type="none"/>
+ </request-map>
+
<!-- ================ Content keyword Search Requests ================= -->
<request-map uri="ContentSearchOptions">
<security https="true" auth="true"/>
Modified:
ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSContent.ftl
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSContent.ftl?rev=1738588&r1=1738587&r2=1738588&view=diff
==============================================================================
---
ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSContent.ftl
(original)
+++
ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSContent.ftl
Mon Apr 11 14:17:30 2016
@@ -18,22 +18,12 @@
-->
<script type="text/javascript">
- jQuery(document).ready(function() {
- // override elRTE save action to make "save" toolbar button work
- elRTE.prototype.save = function() {
- this.beforeSave();
- cmsSave();
- }
- });
+ // save new content id to JS scope so it can be used by the jstree in
+ // the WebSiteCmsNav view where the newContentId is not available
+ var newContentId = ${contentId?default("'a'")};
function cmsSave() {
var simpleFormAction = '<@ofbizUrl>/updateContentCms</@ofbizUrl>';
- var editor = jQuery("#cmseditor");
- if (editor.length) {
- var cmsdata = jQuery("#cmsdata");
- var data = editor.elrte('val');
- cmsdata.val(data);
- }
// get the cmsform
var form = document.cmsform;
@@ -80,7 +70,7 @@
<#-- cms menu bar -->
<div id="cmsmenu" style="margin-bottom: 8px;">
<#if (content?has_content)>
- <a href="javascript:void(0);" onclick="javascript:callDocument(true,
'${content.contentId}', '', 'ELECTRONIC_TEXT');"
class="tabButton">${uiLabelMap.ContentQuickSubContent}</a>
+ <a href="javascript:void(0);" onclick="javascript:callDocument(true,
'${content.contentId}', '', '', '', 'ELECTRONIC_TEXT');"
class="tabButton">${uiLabelMap.ContentQuickSubContent}</a>
<a href="javascript:void(0);"
onclick="javascript:callPathAlias('${content.contentId}');"
class="tabButton">${uiLabelMap.ContentPathAlias}</a>
<a href="javascript:void(0);"
onclick="javascript:callMetaInfo('${content.contentId}');"
class="tabButton">${uiLabelMap.ContentMetaTags}</a>
</#if>
@@ -327,15 +317,6 @@
</select>
</td>
</tr>
- <tr>
- <td colspan="2">
- <textarea id="cmsdata" name="textData" cols="40" rows="6"
style="display: none;">
- <#if (dataText?has_content)>
- ${StringUtil.wrapString(dataText.textData!)}
- </#if>
- </textarea>
- </td>
- </tr>
<#-- this all depends on the dataResourceTypeId which was selected
-->
<#if (dataResourceTypeId == 'IMAGE_OBJECT' || dataResourceTypeId ==
'OTHER_OBJECT' || dataResourceTypeId == 'LOCAL_FILE' ||
@@ -371,13 +352,12 @@
</tr>
<#elseif (dataResourceTypeId == 'ELECTRONIC_TEXT')>
<tr>
+ <td colspan="2"><h1
style="margin-top:20px">${uiLabelMap.ContentText}</h1></td>
+ </tr>
+ <tr>
<td colspan="2">
<div id="editorcontainer" class="nocolumns">
- <div id="cmseditor" style="margin: 0; width: 100%; border:
1px solid black;">
- <#if (dataText?has_content)>
- ${StringUtil.wrapString(dataText.textData!)}
- </#if>
- </div>
+ <textarea style="height: 350px; width: 99%; display:
inline-block; " name="textData"><#if
(dataText?has_content)>${dataText.textData!}</#if></textarea>
</div>
</td>
</tr>
Modified:
ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSMeta.ftl
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSMeta.ftl?rev=1738588&r1=1738587&r2=1738588&view=diff
==============================================================================
--- ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSMeta.ftl
(original)
+++ ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSMeta.ftl
Mon Apr 11 14:17:30 2016
@@ -29,9 +29,9 @@
<#-- cms menu bar -->
<div id="cmsmenu" style="margin-bottom: 8px;">
<#if (content?has_content)>
- <a href="javascript:void(0);" onclick="javascript:callDocument(true,
'${content.contentId}', '', 'ELECTRONIC_TEXT');" class="tabButton">Quick
Sub-Content</a>
- <a href="javascript:void(0);"
onclick="javascript:callPathAlias('${content.contentId}');"
class="tabButton">Path Alias</a>
- <a href="javascript:void(0);"
onclick="javascript:callMetaInfo('${content.contentId}');"
class="selected">Meta Tags</a>
+ <a href="javascript:void(0);" onclick="javascript:callDocument(true,
'${content.contentId}', '', '', '', 'ELECTRONIC_TEXT');"
class="tabButton">${uiLabelMap.ContentQuickSubContent}</a>
+ <a href="javascript:void(0);"
onclick="javascript:callPathAlias('${content.contentId}');"
class="tabButton">${uiLabelMap.ContentPathAlias}</a>
+ <a href="javascript:void(0);"
onclick="javascript:callMetaInfo('${content.contentId}');"
class="selected">${uiLabelMap.ContentMetaTags}</a>
</#if>
</div>
Modified:
ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSNav.ftl
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSNav.ftl?rev=1738588&r1=1738587&r2=1738588&view=diff
==============================================================================
--- ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSNav.ftl
(original)
+++ ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSNav.ftl
Mon Apr 11 14:17:30 2016
@@ -16,29 +16,44 @@
specific language governing permissions and limitations
under the License.
-->
+<script language="javascript" type="text/javascript"
src="<@ofbizContentUrl>/images/jquery/ui/js/jquery.cookie-1.4.0.js</@ofbizContentUrl>"></script>
<script language="javascript" type="text/javascript"
src="<@ofbizContentUrl>/images/jquery/plugins/jsTree/jquery.jstree.js</@ofbizContentUrl>"></script>
<script language="javascript" type="text/javascript"
src="<@ofbizContentUrl>/images/jquery/plugins/elrte-1.3/js/elrte.min.js</@ofbizContentUrl>"></script>
<#if language?has_content && language != "en">
<script language="javascript"
src="<@ofbizContentUrl>/images/jquery/plugins/elrte-1.3/js/i18n/elrte.${language!"en"}.js</@ofbizContentUrl>"
type="text/javascript"></script><#rt/>
</#if>
-
<link href="/images/jquery/plugins/elrte-1.3/css/elrte.min.css"
rel="stylesheet" type="text/css">
<script type="text/javascript">
+ function modifyJstreeCookieToSelectNewPage() {
+ // core.initally_load and ui.initially_select don't work with the
cookies plugin,
+ // so we have to modify the cookie to achieve the same.
+ // the newContentId is set in the global scope in
WebSiteCmsContent.ftl because I could
+ // not get it into the context of this view using the ofbiz xml
vodoofoo.
+ var contentIdFrom = '#${requestParameters.contentIdFrom!}';
+ if (typeof newContentId !== 'undefined' && contentIdFrom !== '#') {
+ $.cookie('jstree_open', $.cookie('jstree_open') + ',' +
contentIdFrom);
+ $.cookie('jstree_select', '#' + newContentId);
+ }
+ };
+
jQuery(document).ready(loadTrees);
+ <#--
jQuery(document).ready(createEditor);
+ -->
var contentRoot = '${contentRoot!}';
+ var menuRoot = '${menuRoot!}';
+ var errorRoot = '${errorRoot!}';
var webSiteId = '${webSiteId!}';
var editorUrl = '<@ofbizUrl>/views/WebSiteCMSContent</@ofbizUrl>';
var aliasUrl = '<@ofbizUrl>/views/WebSiteCMSPathAlias</@ofbizUrl>';
var metaUrl = '<@ofbizUrl>/views/WebSiteCMSMetaInfo</@ofbizUrl>';
- function loadTrees() {
- createSubsitesTree();
- createMenusTree();
- createErrorTree();
- }
+ // No drag'n'drop for nodes in subtrees with these contentIds.
+ // Adding "false" prevents creating new "root" nodes.
+ // we have no such subtrees OOTB so those are only as examples
+ var unmovableSubtrees = [false, "homeContentsRoot",
"merchantContentsRoot", "categoryChildren"];
function cutNameLength(name) {
var leng = 27;
@@ -130,23 +145,7 @@ var rawdata_errors = [
</#if>
];
-<#-------------------------------------------------------------------------------------create
Tree-->
- function createSubsitesTree() {
- jQuery(function () {
- jQuery("#subsites").jstree({
- "plugins" : [ "themes", "json_data", "ui", "contextmenu", "crrm"],
- "core" : {
- "html_titles" : true
- },
- "ui" : {
- "initially_select" : ["${parameters.contentId!}"]
- },
- "json_data" : {
- "data" : rawdata_subsites,
- "progressive_render" : false
- },
- 'contextmenu': {
- 'items': {
+var contextmenu = { 'items': {
'ccp' : false,
'create' : false,
'rename' : false,
@@ -154,180 +153,259 @@ var rawdata_errors = [
'create1' : {
'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceLongText}",
'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'ELECTRONIC_TEXT');
+ callDocument(true, obj.attr('id'), '', 'ELECTRONIC_TEXT');
}
},
'create2' : {
'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceShortText}",
'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'SHORT_TEXT');
+ callDocument(true, obj.attr('id'), '', 'SHORT_TEXT');
}
},
'create3' : {
'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceUrlResource}",
'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'URL_RESOURCE');
+ callDocument(true, obj.attr('id'), '', 'URL_RESOURCE');
}
},
'create4' : {
'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentDataResourceImage}",
'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'IMAGE_OBJECT');
+ callDocument(true, obj.attr('id'), '', 'IMAGE_OBJECT');
}
},
'create5' : {
'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceVideo}",
'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'VIDEO_OBJECT');
+ callDocument(true, obj.attr('id'), '', 'VIDEO_OBJECT');
}
},
'create6' : {
'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceAudio}",
'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'AUDIO_OBJECT');
+ callDocument(true, obj.attr('id'), '', 'AUDIO_OBJECT');
}
},
'create7' : {
'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceOther}",
'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'OTHER_OBJECT');
+ callDocument(true, obj.attr('id'), '', 'OTHER_OBJECT');
+ }
+ },
+ 'delete' : {
+ 'label' : "${uiLabelMap.CommonDelete}",
+ 'action' : function (obj) {
+ <#assign
message=StringUtil.wrapString(uiLabelMap.ConfirmDeleteContent) />
+ if (!window.confirm('${message}')) { return false;
}
+ if(this.is_selected(obj)) { this.remove(); } else
{ this.remove(obj); }
}
}
}
}
- });
- });
- }
- function createMenusTree() {
- jQuery(function () {
- jQuery("#menus").jstree({
- "plugins" : [ "themes", "json_data", "ui", "contextmenu", "crrm"],
+<#-------------------------------------------------------------------------------------create
Tree-->
+ function createSubsitesTree() {
+ <#if contentRoot?has_content>
+ jQuery("#${contentRoot}").jstree({
+ "plugins" : [ "themes", "json_data", "ui", "cookies",
"contextmenu", "crrm", "dnd"],
"core" : {
"html_titles" : true
},
"json_data" : {
- "data" : rawdata_menus,
- "progressive_render" : false
- },
- 'contextmenu': {
- 'items': {
- 'ccp' : false,
- 'create' : false,
- 'rename' : false,
- 'remove' : false,
- 'create1' : {
- 'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceLongText}",
- 'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'ELECTRONIC_TEXT');
+ "ajax" : {
+ "url" :
"<@ofbizUrl>/getContentAssocsJson</@ofbizUrl>",
+ "type" : "GET",
+ "data" : function (n) {
+ return {
+ "contentId" : n.attr ? n.attr("id") :
contentRoot
+ };
+ }
}
- },
- 'create2' : {
- 'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceShortText}",
- 'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'SHORT_TEXT');
- }
- },
- 'create3' : {
- 'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceUrlResource}",
- 'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'URL_RESOURCE');
- }
- },
- 'create4' : {
- 'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentDataResourceImage}",
- 'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'IMAGE_OBJECT');
+ },
+ "ui" : {
+ select_limit: 1
+ },
+ "crrm": {
+ "move" : {
+ "default_position" : "first",
+ "check_move" : checkMove
+ }
+ },
+ 'contextmenu': contextmenu
+ }).bind("move_node.jstree", moveContent).bind("remove.jstree",
deleteContent).bind("select_node.jstree", selectNode);
+ </#if>
+ }
+
+ function loadTrees() {
+ modifyJstreeCookieToSelectNewPage();
+ createSubsitesTree();
+ createMenusTree();
+ createErrorTree();
+ }
+
+ function createMenusTree() {
+ <#if menuRoot?has_content>
+ jQuery(function () {
+ jQuery("#${menuRoot}").jstree({
+ "plugins" : [ "themes", "json_data", "ui", "cookies",
"contextmenu", "crrm", "dnd"],
+ "core" : {
+ "html_titles" : true
+ },
+ "json_data" : {
+ "ajax" : {
+ "url" :
"<@ofbizUrl>/getContentAssocsJson</@ofbizUrl>",
+ "type" : "GET",
+ "data" : function (n) {
+ return {
+ "contentId" : n.attr ? n.attr("id") :
menuRoot
+ };
}
- },
- 'create5' : {
- 'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceVideo}",
- 'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'VIDEO_OBJECT');
}
},
- 'create6' : {
- 'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceAudio}",
- 'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'AUDIO_OBJECT');
- }
+ "ui" : {
+ select_limit: 1
},
- 'create7' : {
- 'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceOther}",
- 'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'OTHER_OBJECT');
- }
- }
- }
- }
+ 'contextmenu': contextmenu
+ }).bind("move_node.jstree", moveContent).bind("remove.jstree",
deleteContent).bind("select_node.jstree", selectNode);
});
- });
+ </#if>
}
function createErrorTree() {
+ <#if errorRoot?has_content>
jQuery(function () {
- jQuery("#errors").jstree({
- "plugins" : [ "themes", "json_data", "ui", "contextmenu", "crrm"],
+ jQuery("#${errorRoot}").jstree({
+ "plugins" : [ "themes", "json_data", "ui", "cookies",
"contextmenu", "crrm", "dnd"],
"core" : {
"html_titles" : true
},
"json_data" : {
- "data" : rawdata_errors,
- "progressive_render" : false
- },
- 'contextmenu': {
- 'items': {
- 'ccp' : false,
- 'create' : false,
- 'rename' : false,
- 'remove' : false,
- 'create1' : {
- 'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceLongText}",
- 'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'ELECTRONIC_TEXT');
+ "ajax" : {
+ "url" :
"<@ofbizUrl>/getContentAssocsJson</@ofbizUrl>",
+ "type" : "GET",
+ "data" : function (n) {
+ return {
+ "contentId" : n.attr ? n.attr("id") :
errorRoot
+ };
+ }
}
},
- 'create2' : {
- 'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceShortText}",
- 'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'SHORT_TEXT');
+ "ui" : {
+ select_limit: 1
+ },
+ 'contextmenu': contextmenu
+ }).bind("move_node.jstree", moveContent).bind("remove.jstree",
deleteContent).bind("select_node.jstree", selectNode);
+ });
+ </#if>
+ }
+
+<#-------------------------------------------------------------------------------------selectNode
function-->
+ function selectNode(event, data) {
+ var node = data.rslt.obj;
+
+ if (typeof node.attr === 'undefined') {
+ return;
+ }
+
+ callDocument('', node.attr('id'), node, '');
+ }
+
+<#-------------------------------------------------------------------------------------checkMove
function-->
+ function checkMove(move) {
+ // do not allow copies
+ if (move.cy == true) {
+ return false;
+ }
+
+ // determine all nodes in the paths to the root from the original and
new position of the node in the tree
+ var nodesToRoot = [];
+ // move.o gives us the original position
+ nodesToRoot = jQuery.merge(nodesToRoot, move.ot.get_path(move.o,
true));
+ // move.r gives us the new position
+ nodesToRoot = jQuery.merge(nodesToRoot, move.ot.get_path(move.r,
true));
+
+ if (move.cr === -1 && jQuery.inArray(false, unmovableSubtrees) >= 0) {
+ return false;
}
- },
- 'create3' : {
- 'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceUrlResource}",
- 'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'URL_RESOURCE');
+
+ for (var i = 0; i < unmovableSubtrees.length; i++) {
+ if (jQuery.inArray(unmovableSubtrees[i], nodesToRoot) >= 0) {
+ return false;
}
- },
- 'create4' : {
- 'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentDataResourceImage}",
- 'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'IMAGE_OBJECT');
}
- },
- 'create5' : {
- 'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceVideo}",
- 'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'VIDEO_OBJECT');
+ return true;
}
- },
- 'create6' : {
- 'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceAudio}",
- 'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'AUDIO_OBJECT');
- }
- },
- 'create7' : {
- 'label' : "${uiLabelMap.CommonNew}
${uiLabelMap.ContentResourceOther}",
- 'action' : function(obj) {
- callDocument(true, obj.attr('id'), '',
'OTHER_OBJECT');
- }
- }
+<#-------------------------------------------------------------------------------------moveContent
function-->
+ function moveContent(event, data) {
+ var tree = data.inst;
+ var node = data.rslt.o;
+ var newParent = data.rslt.np;
+ var oldParent = data.rslt.op
+
+ if (typeof node.attr === 'undefined') {
+ return;
+ }
+
+ var ctx = {};
+ ctx['contentIdTo'] = node.attr('id');
+ ctx['contentIdFrom'] = node.attr('contentId');
+ ctx['contentIdFromNew'] = newParent.attr('id');
+ ctx['fromDate'] = node.attr('fromDate');
+ ctx['contentAssocTypeId'] = node.attr('contentAssocTypeId');
+
+ //jQuerry Ajax Request
+ jQuery.ajax({
+ url: '<@ofbizUrl>/moveContentJson</@ofbizUrl>',
+ type: 'POST',
+ data: ctx,
+ error: function(msg) {
+ jQuery.jstree.rollback(data.rlbk);
+ showErrorAlert("${uiLabelMap.CommonErrorMessage2}",
"${uiLabelMap.ErrorMovingContent} : " + JSON.stringify(msg));
+ },
+ success: function(msg) {
+ if (msg._ERROR_MESSAGE_) {
+ jQuery.jstree.rollback(data.rlbk);
+ showErrorAlert("${uiLabelMap.CommonErrorMessage2}",
"${uiLabelMap.ErrorMovingContent} : " + msg._ERROR_MESSAGE_);
+ } else {
+ var result = JSON.parse(msg);
+ node.attr('fromDate', result.attr.fromDate);
+ node.attr('contentId', result.attr.contentId);
+ tree.select_node(node, true, null);
}
}
});
- });
+ }
+
+<#-------------------------------------------------------------------------------------deleteDocument
function-->
+ function deleteContent(event, data) {
+ var tree = data.inst;
+ var node = data.rslt.obj;
+ var treeNode = jQuery(node).closest('div.jstree');
+
+ if (typeof node.attr === 'undefined') {
+ return;
+ }
+
+ var ctx = {};
+ ctx['contentRoot'] = treeNode.attr('contentId');
+ ctx['webSiteId'] = webSiteId;
+ ctx['contentId'] = node.attr('id');
+
+ //jQuerry Ajax Request
+ jQuery.ajax({
+ url: '<@ofbizUrl>/deleteContentJson</@ofbizUrl>',
+ type: 'POST',
+ data: ctx,
+ error: function(msg) {
+
showErrorAlert("${uiLabelMap.CommonErrorMessage2}","${uiLabelMap.ErrorDeletingContent}
: " + JSON.stringify(msg));
+ jQuery.jstree.rollback(data.rlbk);
+ },
+ success: function(msg) {
+ callDocument(false, node.attr('contentId'), '', '')
+ }
+ });
}
+
<#-------------------------------------------------------------------------------------callDocument
function-->
function callDocument(sub, contentId, objstr, dataResourceTypeId) {
var ctx = {};
@@ -359,13 +437,15 @@ var rawdata_errors = [
type: 'POST',
data: ctx,
error: function(msg) {
-
showErrorAlert("${uiLabelMap.CommonErrorMessage2}","${uiLabelMap.ErrorLoadingContent}
: " + msg);
+
showErrorAlert("${uiLabelMap.CommonErrorMessage2}","${uiLabelMap.ErrorLoadingContent}
: " + JSON.stringify(msg));
},
success: function(msg) {
jQuery('#cmscontent').html(msg);
+<#--
// CREATE / LOAD Editor
createEditor();
+-->
}
});
}
@@ -375,7 +455,7 @@ var rawdata_errors = [
if($('#cmseditor').length) {
var opts = {
cssClass : 'el-rte',
- lang : '${language}',
+ lang : '${language!"en"}',
height : 350,
toolbar : 'maxi',
doctype : '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">', //'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN">',
@@ -393,7 +473,7 @@ function callMetaInfo(contentId) {
type: 'POST',
data: ctx,
error: function(msg) {
-
showErrorAlert("${uiLabelMap.CommonErrorMessage2}","${uiLabelMap.ErrorLoadingContent}
: " + msg);
+
showErrorAlert("${uiLabelMap.CommonErrorMessage2}","${uiLabelMap.ErrorLoadingContent}
: " + JSON.stringify(msg));
},
success: function(msg) {
jQuery('#cmscontent').html(msg);
@@ -411,7 +491,7 @@ function callMetaInfo(contentId) {
type: 'POST',
data: ctx,
error: function(msg) {
-
showErrorAlert("${uiLabelMap.CommonErrorMessage2}","${uiLabelMap.ErrorLoadingContent}
: " + msg);
+
showErrorAlert("${uiLabelMap.CommonErrorMessage2}","${uiLabelMap.ErrorLoadingContent}
: " + JSON.stringify(msg));
},
success: function(msg) {
jQuery('#cmscontent').html(msg);
@@ -458,15 +538,15 @@ function callMetaInfo(contentId) {
}
<#-------------------------------------------------------------------------------------pathRemove
function-->
- function pathRemove(websiteId, pathAlias, contentId) {
+ function pathRemove(websiteId, pathAlias, fromDate, contentId) {
var remAliasUrl = '<@ofbizUrl>/removeWebSitePathAliasJson</@ofbizUrl>';
jQuery.ajax({
url: remAliasUrl,
type: 'POST',
- data: {"pathAlias" : pathAlias, "webSiteId" : webSiteId},
+ data: { "webSiteId" : webSiteId, "pathAlias" : pathAlias,
"fromDate": fromDate},
error: function(msg) {
-
showErrorAlert("${uiLabelMap.CommonErrorMessage2}","${uiLabelMap.CommonUnspecifiedErrorOccurred}
: " + msg);
+
showErrorAlert("${uiLabelMap.CommonErrorMessage2}","${uiLabelMap.CommonUnspecifiedErrorOccurred}
: " + JSON.stringify(msg));
},
success: function(msg) {
callPathAlias(contentId);
@@ -484,13 +564,14 @@ function callMetaInfo(contentId) {
async: false,
data: jQuery(form).serialize(),
success: function(data) {
- // if the content id is set reload the contentScreen
+ // if the content id is set reload the contentScreen and
tree
if (contentId && contentId.length) {
- callDocument('', contentId, '', '');
+ callDocument('', contentId, form.contentIdFrom.value,
form.fromDate.value, form.contentAssocTypeId.value, '');
+ jQuery("#${contentRoot}").jstree('refresh',
'#'+form.contentIdFrom.value);
}
},
error: function(msg) {
-
showErrorAlert("${uiLabelMap.CommonErrorMessage2}","${uiLabelMap.CommonErrorSubmittingForm}
: " + msg);
+
showErrorAlert("${uiLabelMap.CommonErrorMessage2}","${uiLabelMap.CommonErrorSubmittingForm}
: " + JSON.stringify(msg));
}
});
}
@@ -507,8 +588,9 @@ function callMetaInfo(contentId) {
</div>
<div> </div>
-<div id="subsites"></div>
-<#if (!subsites?has_content)>
+<#if (content?has_content)>
+ <div id="${contentRoot}"></div>
+<#else>
<a href="javascript:void(0);"
class="buttontext">${uiLabelMap.ContentWebSiteAddTree}</a>
</#if>
<div class="label">
@@ -519,8 +601,9 @@ function callMetaInfo(contentId) {
</div>
<div> </div>
-<div id="menus"></div>
-<#if (!menus?has_content)>
+<#if (menus?has_content)>
+ <div id="${menuRoot}"></div>
+<#else>
<a href="javascript:void(0);"
class="buttontext">${uiLabelMap.ContentWebSiteAddMenu}</a>
</#if>
@@ -534,7 +617,8 @@ function callMetaInfo(contentId) {
${uiLabelMap.ContentWebSiteAddNewErrors}
</div>
<div> </div>
-<div id="errors"></div>
-<#if (!errors?has_content)>
+<#if (errors?has_content)>
+ <div id="${errorRoot}"></div>
+<#else>
<a href="javascript:void(0);"
class="buttontext">${uiLabelMap.ContentWebSiteAddError}</a>
</#if>
Modified:
ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSPathAlias.ftl
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSPathAlias.ftl?rev=1738588&r1=1738587&r2=1738588&view=diff
==============================================================================
---
ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSPathAlias.ftl
(original)
+++
ofbiz/trunk/applications/content/webapp/content/website/WebSiteCMSPathAlias.ftl
Mon Apr 11 14:17:30 2016
@@ -20,9 +20,9 @@
<#-- cms menu bar -->
<div id="cmsmenu" style="margin-bottom: 8px;">
<#if (content?has_content)>
- <a href="javascript:void(0);" onclick="javascript:callDocument(true,
'${content.contentId}', '', 'ELECTRONIC_TEXT');" class="tabButton">Quick
Sub-Content</a>
- <a href="javascript:void(0);"
onclick="javascript:callPathAlias('${content.contentId}');"
class="selected">Path Alias</a>
- <a href="javascript:void(0);"
onclick="javascript:callMetaInfo('${content.contentId}');"
class="tabButton">Meta Tags</a>
+ <a href="javascript:void(0);" onclick="javascript:callDocument(true,
'${content.contentId}', '', 'ELECTRONIC_TEXT');"
class="tabButton">${uiLabelMap.ContentQuickSubContent}</a>
+ <a href="javascript:void(0);"
onclick="javascript:callPathAlias('${content.contentId}');"
class="selected">${uiLabelMap.ContentPathAlias}</a>
+ <a href="javascript:void(0);"
onclick="javascript:callMetaInfo('${content.contentId}');"
class="tabButton">${uiLabelMap.ContentMetaTags}</a>
</#if>
</div>
@@ -34,24 +34,24 @@
<table>
<tr><td>
- <table border="1" cellpadding="2" cellspacing="0" class="calendarTable">
- <tr class="header-row">
- <td>Web Site ID</td>
- <td>Path Alias</td>
- <td>Alias To</td>
- <td>Content ID</td>
- <td>Map Key</td>
- <td> </td>
- </tr>
+ <table border="2" cellpadding="2" cellspacing="4" class="basic-table">
<#if (aliases?has_content)>
+ <tr class="header-row">
+ <td>Content ID</td>
+ <td>Path Alias</td>
+ <td>Map Key</td>
+ <td>From Date</td>
+ <td>Thru Date</td>
+ <td> </td>
+ </tr>
<#list aliases as alias>
<tr>
- <td>${alias.webSiteId}</td>
- <td>${alias.pathAlias}</td>
- <td>${alias.aliasTo?default("N/A")}</td>
- <td>${alias.contentId?default("N/A")}</td>
- <td>${alias.mapKey?default("N/A")}</td>
- <td><a href="javascript:void(0);"
onclick="javascript:pathRemove('${webSiteId}', '${alias.pathAlias}',
'${contentId}');" class="buttontext">Remove</a></td>
+ <td class="alternate-row">${alias.contentId?default("")}</td>
+ <td class="alternate-row">${alias.pathAlias}</td>
+ <td class="alternate-row">${alias.mapKey?default("")}</td>
+ <td class="alternate-row">${alias.fromDate?default("")}</td>
+ <td class="alternate-row">${alias.thruDate?default("")}</td>
+ <td><a href="javascript:void(0);"
onclick="javascript:pathRemove('${webSiteId}', '${alias.pathAlias}',
'${alias.fromDate}', '${contentId}');" class="buttontext">Remove</a></td>
</tr>
</#list>
<#else>
@@ -64,17 +64,13 @@
<tr><td>
<form name="cmspathform" method="post"
action="<@ofbizUrl>/createWebSitePathAliasJson</@ofbizUrl>" style="margin: 0;">
+ <input type="hidden" name="webSiteId" value="${webSiteId}"/>
+ <input type="hidden" name="contentId" value="${contentId}"/>
<table>
<tr><td colspan="2"> </td></tr>
<tr>
- <td class="label">Web Site</td>
- <td>${webSite.siteName?default(webSite.webSiteId)}</td>
- <input type="hidden" name="webSiteId" value="${webSiteId}"/>
- </tr>
- <tr>
<td class="label">Content</td>
<td>${content.contentName?default(content.contentId)}</td>
- <input type="hidden" name="contentId" value="${contentId}"/>
</tr>
<tr><td colspan="2"> </td></tr>
<tr>
@@ -86,6 +82,14 @@
<td><input type="text" name="mapKey" value="" /></td>
</tr>
<tr>
+ <td class="label">From Date</td>
+ <td><@htmlTemplate.renderDateTimeField name="fromDate"
event="" action="" className="" alert="" title=""
value="${Static['org.ofbiz.base.util.UtilDateTime'].nowTimestamp()}" size="20"
maxlength="50" id="fromDate" dateType="timestamp" shortDateInput=false
timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle=""
timeDropdown="" timeHourName="" classString="" hour1="" hour2=""
timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected=""
pmSelected="" compositeType="" formName=""/></td>
+ </tr>
+ <tr>
+ <td class="label">Thru Date</td>
+ <td><@htmlTemplate.renderDateTimeField name="thruDate"
event="" action="" className="" alert="" title="" value="" size="20"
maxlength="50" id="thruDate" dateType="timestamp" shortDateInput=false
timeDropdownParamName="" defaultDateTimeString="" localizedIconTitle=""
timeDropdown="" timeHourName="" classString="" hour1="" hour2=""
timeMinutesName="" minutes="" isTwelveHour="" ampmName="" amSelected=""
pmSelected="" compositeType="" formName=""/></td>
+ </tr>
+ <tr>
<td colspan="2" align="center"><input id="submit"
type="button" onclick="javascript:pathSave('${contentId}');"
class="smallSubmit" value="Create"/></td>
</tr>
</table>
Modified: ofbiz/trunk/applications/content/widget/WebSiteScreens.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/widget/WebSiteScreens.xml?rev=1738588&r1=1738587&r2=1738588&view=diff
==============================================================================
--- ofbiz/trunk/applications/content/widget/WebSiteScreens.xml (original)
+++ ofbiz/trunk/applications/content/widget/WebSiteScreens.xml Mon Apr 11
14:17:30 2016
@@ -181,13 +181,6 @@ under the License.
<screen name="WebSiteCMSNav">
<section>
- <actions>
- <set field="webSiteId" from-field="parameters.webSiteId"/>
- <entity-one entity-name="WebSite" value-field="webSite"/>
-
- <script
location="component://content/webapp/content/WEB-INF/actions/website/WebSitePublishPoint.groovy"/>
- <set field="language" from-field="userLogin.lastLocale"
default-value="en"/>
- </actions>
<widgets>
<screenlet title="${uiLabelMap.PageTitleWebSiteCMSNav}">
<platform-specific><html><html-template
location="component://content/webapp/content/website/WebSiteCMSNav.ftl"/></html></platform-specific>
@@ -203,8 +196,8 @@ under the License.
<property-map resource="CommonUiLabels" map-name="uiLabelMap"
global="true"/>
<property-map resource="WorkEffortUiLabels"
map-name="uiLabelMap" global="true"/>
- <set field="contentAssocTypeId"
from-field="parameters.contentAssocTypeId"/>
<set field="dataResourceTypeId"
from-field="parameters.dataResourceTypeId"/>
+ <set field="newContentId" from-field="contentId" />
<set field="contentIdFrom"
from-field="parameters.contentIdFrom"/>
<set field="webSiteId" from-field="parameters.webSiteId"/>
<set field="contentId" from-field="parameters.contentId"/>
@@ -217,7 +210,6 @@ under the License.
<entity-one entity-name="ElectronicText"
value-field="dataText">
<field-map field-name="dataResourceId"
from-field="content.dataResourceId"/>
</entity-one>
-
<set field="parameters.fromDate" type="Timestamp"
from-field="parameters.fromDate"/>
<entity-condition list="assocs" entity-name="ContentAssoc">
<condition-list>
Modified: ofbiz/trunk/applications/content/widget/website/WebSiteForms.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/widget/website/WebSiteForms.xml?rev=1738588&r1=1738587&r2=1738588&view=diff
==============================================================================
--- ofbiz/trunk/applications/content/widget/website/WebSiteForms.xml (original)
+++ ofbiz/trunk/applications/content/widget/website/WebSiteForms.xml Mon Apr 11
14:17:30 2016
@@ -96,7 +96,6 @@ under the License.
<hyperlink
target="EditWebSitePathAlias?webSiteId=${webSiteId}&pathAlias=${pathAlias}"
description="${pathAlias}"></hyperlink>
</field>
<field name="aliasTo" sort-field="true"><display/></field>
- <field name="mapKey" sort-field="true"><display/></field>
<field name="contentId" sort-field="true">
<display-entity entity-name="Content" description="${contentName}">
<sub-hyperlink target="EditContent" description="
[${contentId}]">
@@ -104,6 +103,9 @@ under the License.
</sub-hyperlink>
</display-entity>
</field>
+ <field name="mapKey" sort-field="true"><display/></field>
+ <field name="fromDate" sort-field="true"><display/></field>
+ <field name="thruDate" sort-field="true"><display/></field>
<field name="deleteLink" title=" " widget-style="buttontext">
<hyperlink target="removeWebSitePathAlias"
description="${uiLabelMap.CommonDelete}" also-hidden="false">
<parameter param-name="webSiteId"/>
Modified: ofbiz/trunk/applications/datamodel/entitydef/content-entitymodel.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/datamodel/entitydef/content-entitymodel.xml?rev=1738588&r1=1738587&r2=1738588&view=diff
==============================================================================
--- ofbiz/trunk/applications/datamodel/entitydef/content-entitymodel.xml
(original)
+++ ofbiz/trunk/applications/datamodel/entitydef/content-entitymodel.xml Mon
Apr 11 14:17:30 2016
@@ -1561,11 +1561,14 @@ under the License.
title="Web Site Path Alias">
<field name="webSiteId" type="id-ne"></field>
<field name="pathAlias" type="id-vlong"></field>
+ <field name="fromDate" type="date-time"></field>
+ <field name="thruDate" type="date-time"></field>
<field name="aliasTo" type="long-varchar"></field>
<field name="contentId" type="id"></field>
<field name="mapKey" type="name"></field>
<prim-key field="webSiteId"/>
<prim-key field="pathAlias"/>
+ <prim-key field="fromDate"/>
<relation type="one" fk-name="WSPATH_WEBSITE"
rel-entity-name="WebSite">
<key-map field-name="webSiteId"/>
</relation>
Modified:
ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderLookupServices.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderLookupServices.java?rev=1738588&r1=1738587&r2=1738588&view=diff
==============================================================================
---
ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderLookupServices.java
(original)
+++
ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderLookupServices.java
Mon Apr 11 14:17:30 2016
@@ -35,6 +35,7 @@ import org.ofbiz.base.util.UtilGenerics;
import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.base.util.UtilProperties;
import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.base.util.collections.PagedList;
import org.ofbiz.entity.Delegator;
import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.GenericValue;
@@ -45,13 +46,13 @@ import org.ofbiz.entity.condition.Entity
import org.ofbiz.entity.condition.EntityOperator;
import org.ofbiz.entity.model.DynamicViewEntity;
import org.ofbiz.entity.model.ModelKeyMap;
-import org.ofbiz.entity.util.EntityListIterator;
import org.ofbiz.entity.util.EntityQuery;
import org.ofbiz.security.Security;
import org.ofbiz.service.DispatchContext;
import org.ofbiz.service.GenericServiceException;
import org.ofbiz.service.LocalDispatcher;
import org.ofbiz.service.ServiceUtil;
+import org.ofbiz.widget.renderer.Paginator;
/**
* OrderLookupServices
@@ -66,10 +67,9 @@ public class OrderLookupServices {
Security security = dctx.getSecurity();
GenericValue userLogin = (GenericValue) context.get("userLogin");
- Integer viewIndex = (Integer) context.get("viewIndex");
- if (viewIndex == null) viewIndex = 1;
- Integer viewSize = (Integer) context.get("viewSize");
- if (viewSize == null) viewSize =
UtilProperties.getPropertyAsInteger("widget", "widget.form.defaultViewSize",
20);
+ Integer viewIndex = Paginator.getViewIndex(context, "viewIndex", 1);
+ Integer viewSize = Paginator.getViewSize(context, "viewSize");
+
String showAll = (String) context.get("showAll");
String useEntryDate = (String) context.get("useEntryDate");
Locale locale = (Locale) context.get("locale");
@@ -582,47 +582,29 @@ public class OrderLookupServices {
int orderCount = 0;
// get the index for the partial list
- int lowIndex = (((viewIndex.intValue() - 1) * viewSize.intValue()) +
1);
- int highIndex = viewIndex.intValue() * viewSize.intValue();
+ int lowIndex = 0;
+ int highIndex = 0;
if (cond != null) {
- EntityListIterator eli = null;
+ PagedList<GenericValue> pagedOrderList = null;
try {
// do the lookup
- eli = EntityQuery.use(delegator)
+ pagedOrderList = EntityQuery.use(delegator)
.select(fieldsToSelect)
.from(dve)
.where(cond)
.orderBy(orderBy)
.distinct() // set distinct on so we only get one row
per order
- .maxRows(highIndex)
.cursorScrollInsensitive()
- .queryIterator();
-
- orderCount = eli.getResultsSizeAfterPartialList();
-
- // get the partial list for this page
- eli.beforeFirst();
- if (orderCount > viewSize.intValue()) {
- orderList = eli.getPartialList(lowIndex,
viewSize.intValue());
- } else if (orderCount > 0) {
- orderList = eli.getCompleteList();
- }
+ .queryPagedList(viewIndex - 1, viewSize);
- if (highIndex > orderCount) {
- highIndex = orderCount;
- }
+ orderCount = pagedOrderList.getSize();
+ lowIndex = pagedOrderList.getStartIndex();
+ highIndex = pagedOrderList.getEndIndex();
+ orderList = pagedOrderList.getData();
} catch (GenericEntityException e) {
Debug.logError(e, module);
return ServiceUtil.returnError(e.getMessage());
- } finally {
- if (eli != null) {
- try {
- eli.close();
- } catch (GenericEntityException e) {
- Debug.logWarning(e, e.getMessage(), module);
- }
- }
}
}