svn commit: r1153366 - in /ofbiz/trunk: applications/content/script/org/ofbiz/content/content/ContentServices.xml applications/content/src/org/ofbiz/content/content/ContentUrlFilter.java framework/common/src/org/ofbiz/common/UrlServletHelper.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1153366 - in /ofbiz/trunk: applications/content/script/org/ofbiz/content/content/ContentServices.xml applications/content/src/org/ofbiz/content/content/ContentUrlFilter.java framework/common/src/org/ofbiz/common/UrlServletHelper.java

hansbak-2
Author: hansbak
Date: Wed Aug  3 07:12:29 2011
New Revision: 1153366

URL: http://svn.apache.org/viewvc?rev=1153366&view=rev
Log:
improve the alternative seo friendly content url: some url's where not recognized

Modified:
    ofbiz/trunk/applications/content/script/org/ofbiz/content/content/ContentServices.xml
    ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentUrlFilter.java
    ofbiz/trunk/framework/common/src/org/ofbiz/common/UrlServletHelper.java

Modified: ofbiz/trunk/applications/content/script/org/ofbiz/content/content/ContentServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/script/org/ofbiz/content/content/ContentServices.xml?rev=1153366&r1=1153365&r2=1153366&view=diff
==============================================================================
--- ofbiz/trunk/applications/content/script/org/ofbiz/content/content/ContentServices.xml (original)
+++ ofbiz/trunk/applications/content/script/org/ofbiz/content/content/ContentServices.xml Wed Aug  3 07:12:29 2011
@@ -1328,29 +1328,62 @@
                 <select-field field-name="contentIdStart"/>
                 <select-field field-name="dataResourceId"/>
                 <select-field field-name="localeString"/>
+                <select-field field-name="drObjectInfo"/>
                 <select-field field-name="caFromDate"/>
                 <select-field field-name="caThruDate"/>
             </entity-condition>
             <filter-list-by-date list="contentAssocDataResources" from-field-name="caFromDate" thru-field-name="caThruDate"/>
             <if-empty field="contentAssocDataResources">
                 <if-not-empty field="content.contentName">
-                    <set field="createSimpleTextContentContext.localeString" from-field="localeString"/>
-                    <set field="createSimpleTextContentContext.text" from-field="content.contentName"/>
-                    <call-service service-name="createSimpleTextContent" in-map-name="createSimpleTextContentContext" include-user-login="true" break-on-error="false">
-                        <result-to-field result-name="contentId" field="contentIdTo"/>
-                    </call-service>
-                    <if-not-empty field="contentIdTo">
-                        <set field="createContentAssocCtx.contentId" from-field="content.contentId"/>
-                        <set field="createContentAssocCtx.contentIdTo" from-field="contentIdTo"/>
-                        <set field="createContentAssocCtx.contentAssocTypeId" value="ALTERNATIVE_URL"/>
-                        <call-service service-name="createContentAssoc" in-map-name="createContentAssocCtx" include-user-login="true" break-on-error="false"/>
+                    <call-class-method method-name="invalidCharacter" class-name="org.ofbiz.common.UrlServletHelper" ret-field="uri">
+                        <field field="content.contentName"/>
+                    </call-class-method>
+                    <if-not-empty field="uri">
+                        <sequenced-id sequence-name="DataResource" field="dataResourceCtx.dataResourceId"/>
+                        <set field="dataResourceCtx.dataResourceTypeId" value="URL_RESOURCE"/>
+                        <set field="dataResourceCtx.localeString" from-field="localeString"/>
+                        <set field="dataResourceCtx.objectInfo" value="/${uri}-${content.contentId}-content"/>
+                        <set field="dataResourceCtx.statusId" value="CTNT_IN_PROGRESS"/>
+                        <call-service service-name="createDataResource" in-map-name="dataResourceCtx" break-on-error="false" include-user-login="true">
+                            <result-to-field result-name="dataResourceId" field="dataResourceId"/>
+                        </call-service>
+                        <if-not-empty field="dataResourceId">
+                            <set field="contentCtx.dataResourceId" from-field="dataResourceId"/>
+                            <set field="contentCtx.statusId" value="CTNT_IN_PROGRESS"/>
+                            <set field="contentCtx.localeString" from-field="localeString"/>
+                            <call-service service-name="createContent" in-map-name="contentCtx" break-on-error="false" include-user-login="true">
+                                <result-to-field result-name="contentId" field="contentIdTo"/>
+                            </call-service>
+                            <if-not-empty field="contentIdTo">
+                                <set field="createContentAssocCtx.contentId" from-field="content.contentId"/>
+                                <set field="createContentAssocCtx.contentIdTo" from-field="contentIdTo"/>
+                                <set field="createContentAssocCtx.contentAssocTypeId" value="ALTERNATIVE_URL"/>
+                                <call-service service-name="createContentAssoc" in-map-name="createContentAssocCtx" include-user-login="true" break-on-error="false"/>
+                            </if-not-empty>
+                        </if-not-empty>
+                        <set field="contentCreated" value="Y"/>
+                        <field-to-result field="contentCreated" result-name="contentCreated"/>
                     </if-not-empty>
-                    <set field="contentCreated" value="Y"/>
-                    <field-to-result field="contentCreated" result-name="contentCreated"/>
                 </if-not-empty>
             <else>
-                <set field="contentCreated" value="N"/>
-                <field-to-result field="contentCreated" result-name="contentCreated"/>
+                <if-empty field="contentAssocDataResources[0].drObjectInfo">
+                    <if-not-empty field="content.contentName">
+                        <call-class-method method-name="invalidCharacter" class-name="org.ofbiz.common.UrlServletHelper" ret-field="uri">
+                            <field field="content.contentName"/>
+                        </call-class-method>
+                        <if-not-empty field="uri">
+                            <set field="dataResourceCtx.dataResourceId" from-field="contentAssocDataResources[0].dataResourceId"/>
+                            <set field="dataResourceCtx.objectInfo" value="/${uri}-${content.contentId}-content"/>
+                            <call-service service-name="updateDataResource" in-map-name="dataResourceCtx" break-on-error="false" include-user-login="true"/>
+                            <set field="contentCreated" value="Y"/>
+                            <field-to-result field="contentCreated" result-name="contentCreated"/>
+                        </if-not-empty>
+                    </if-not-empty>
+                <else>
+                    <set field="contentCreated" value="N"/>
+                    <field-to-result field="contentCreated" result-name="contentCreated"/>
+                </else>
+                </if-empty>
             </else>
             </if-empty>
         </iterate>

Modified: ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentUrlFilter.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentUrlFilter.java?rev=1153366&r1=1153365&r2=1153366&view=diff
==============================================================================
--- ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentUrlFilter.java (original)
+++ ofbiz/trunk/applications/content/src/org/ofbiz/content/content/ContentUrlFilter.java Wed Aug  3 07:12:29 2011
@@ -20,7 +20,6 @@
 package org.ofbiz.content.content;
 
 import java.io.IOException;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -36,6 +35,7 @@ import javax.servlet.http.HttpServletRes
 import javolution.util.FastList;
 
 import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.StringUtil;
 import org.ofbiz.base.util.UtilHttp;
 import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilValidate;
@@ -46,6 +46,7 @@ import org.ofbiz.entity.condition.Entity
 import org.ofbiz.entity.condition.EntityOperator;
 import org.ofbiz.entity.util.EntityUtil;
 import org.ofbiz.webapp.control.ContextFilter;
+import org.owasp.esapi.errors.EncodingException;
 
 public class ContentUrlFilter extends ContextFilter {
     public final static String module = ContentUrlFilter.class.getName();
@@ -68,24 +69,16 @@ public class ContentUrlFilter extends Co
         StringBuffer pathInfoBuffer = UtilHttp.getFullRequestUrl(httpRequest);
         String pathInfo = pathInfoBuffer.toString();
         if (UtilValidate.isNotEmpty(pathInfo)) {
-            String alternativeUrl = pathInfo.substring(pathInfo.lastIndexOf("/") + 1);
+            String alternativeUrl = pathInfo.substring(pathInfo.lastIndexOf("/"));
             if (alternativeUrl.endsWith("-content")) {
                 try {
-                    List<EntityCondition> expr = FastList.newInstance();
-                    expr.add(EntityCondition.makeCondition("caContentAssocTypeId", EntityOperator.EQUALS, "ALTERNATIVE_URL"));
-                    expr.add(EntityCondition.makeCondition("caThruDate", EntityOperator.EQUALS, null));
-                    Set<String> fieldsToSelect = UtilMisc.toSet("contentIdStart", "dataResourceId", "caFromDate", "caThruDate", "caCreatedDate");
-                    List<GenericValue> contentAssocDataResources = delegator.findList("ContentAssocDataResourceViewTo", EntityCondition.makeCondition(expr), fieldsToSelect, UtilMisc.toList("-caCreatedDate"), null, true);
-                    Iterator<GenericValue> contentAssocDateResourceIter = contentAssocDataResources.iterator();
-                    while (contentAssocDateResourceIter.hasNext()) {
-                        GenericValue contentAssocDateResource = contentAssocDateResourceIter.next();
-                        GenericValue electronicText = delegator.findByPrimaryKey("ElectronicText", UtilMisc.toMap("dataResourceId", contentAssocDateResource.getString("dataResourceId")));
-                        if (UtilValidate.isEmpty(electronicText) || UtilValidate.isEmpty(electronicText.get("textData"))) {
-                            continue;
-                        }
-                        if (alternativeUrl.equalsIgnoreCase(UrlServletHelper.invalidCharacter(electronicText.getString("textData")) + "-" + contentAssocDateResource.getString("contentIdStart") + "-content")) {
-                            urlContentId = contentAssocDateResource.getString("contentIdStart");
-                            break;
+                    List<GenericValue> contentDataResourceViews = delegator.findByAnd("ContentDataResourceView", UtilMisc.toMap("drObjectInfo", alternativeUrl));
+                    if (contentDataResourceViews.size() > 0) {
+                        GenericValue contentDataResourceView = EntityUtil.getFirst(contentDataResourceViews);
+                        List<GenericValue> contents = EntityUtil.filterByDate(delegator.findByAnd("ContentAssoc", UtilMisc.toMap("contentAssocTypeId", "ALTERNATIVE_URL", "contentIdTo", contentDataResourceView.getString("contentId"))));
+                        if (contents.size() > 0) {
+                            GenericValue content = EntityUtil.getFirst(contents);
+                            urlContentId = content.getString("contentId");
                         }
                     }
                 } catch (Exception e) {
@@ -123,19 +116,15 @@ public class ContentUrlFilter extends Co
             expr.add(EntityCondition.makeCondition("caContentAssocTypeId", EntityOperator.EQUALS, "ALTERNATIVE_URL"));
             expr.add(EntityCondition.makeCondition("caThruDate", EntityOperator.EQUALS, null));
             expr.add(EntityCondition.makeCondition("contentIdStart", EntityOperator.EQUALS, contentId));
-            Set<String> fieldsToSelect = UtilMisc.toSet("contentIdStart", "dataResourceId", "caFromDate", "caThruDate", "caCreatedDate");
-            List<GenericValue> contentAssocDataResources = delegator.findList("ContentAssocDataResourceViewTo", EntityCondition.makeCondition(expr), fieldsToSelect, UtilMisc.toList("-caCreatedDate"), null, true);
+            Set<String> fieldsToSelect = UtilMisc.toSet("contentIdStart", "drObjectInfo", "dataResourceId", "caFromDate", "caThruDate", "caCreatedDate");
+            List<GenericValue> contentAssocDataResources = delegator.findList("ContentAssocDataResourceViewTo", EntityCondition.makeCondition(expr), fieldsToSelect, UtilMisc.toList("-caFromDate"), null, true);
             if (contentAssocDataResources.size() > 0) {
                 GenericValue contentAssocDataResource = EntityUtil.getFirst(contentAssocDataResources);
-                GenericValue electronicText = delegator.findByPrimaryKey("ElectronicText", UtilMisc.toMap("dataResourceId", contentAssocDataResource.get("dataResourceId")));
-                if (UtilValidate.isNotEmpty(electronicText) || UtilValidate.isNotEmpty(electronicText.get("textData"))) {
-                    String textData = UrlServletHelper.invalidCharacter(electronicText.getString("textData")) + "-" + contentId + "-content";
-                    StringBuilder urlBuilder = new StringBuilder();
-                    urlBuilder.append(request.getSession().getServletContext().getContextPath());
-                    if (urlBuilder.charAt(urlBuilder.length() - 1) != '/') {
-                        urlBuilder.append("/");
-                    }
-                    url = urlBuilder.append(textData).toString();
+                url = contentAssocDataResource.getString("drObjectInfo");
+                try {
+                    url = StringUtil.defaultWebEncoder.decodeFromURL(url);
+                } catch (EncodingException e) {
+                    Debug.logError(e, module);
                 }
             }
         } catch (Exception e) {

Modified: ofbiz/trunk/framework/common/src/org/ofbiz/common/UrlServletHelper.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/UrlServletHelper.java?rev=1153366&r1=1153365&r2=1153366&view=diff
==============================================================================
--- ofbiz/trunk/framework/common/src/org/ofbiz/common/UrlServletHelper.java (original)
+++ ofbiz/trunk/framework/common/src/org/ofbiz/common/UrlServletHelper.java Wed Aug  3 07:12:29 2011
@@ -260,6 +260,7 @@ public class UrlServletHelper extends Co
         str = str.replace("。", "-");
         str = str.replace("‘", "-");
         str = str.replace("?", "-");
+        str = str.replace("–", "");
         while(str.startsWith("-")){
             str = str.substring(1);
         }