Added:
ofbiz/trunk/framework/images/webapp/images/products/additional/
Modified:
ofbiz/trunk/applications/product/data/ProductTypeData.xml
ofbiz/trunk/applications/product/servicedef/services.xml
ofbiz/trunk/applications/product/src/org/ofbiz/product/product/
ProductServices.java
ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/actions/
product/EditProductContentContent.groovy
ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/
controller.xml
ofbiz/trunk/applications/product/webapp/catalog/product/
ProductForms.xml
Modified: ofbiz/trunk/applications/product/data/ProductTypeData.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/data/ProductTypeData.xml?rev=689772&r1=689771&r2=689772&view=diff
= = = = = = = =
=
=
====================================================================
--- ofbiz/trunk/applications/product/data/ProductTypeData.xml
(original)
+++ ofbiz/trunk/applications/product/data/ProductTypeData.xml Thu
Aug 28 03:02:47 2008
@@ -231,6 +231,10 @@
<ProductContentType description="Image Alt Text - Medium"
hasTable="N" parentTypeId=""
productContentTypeId="MEDIUM_IMAGE_ALT"/>
<ProductContentType description="Image Alt Text - Large"
hasTable="N" parentTypeId=""
productContentTypeId="LARGE_IMAGE_ALT"/>
<ProductContentType description="Image Alt Text - Detail"
hasTable="N" parentTypeId=""
productContentTypeId="DETAIL_IMAGE_ALT"/>
+ <ProductContentType description="Image - Additional View 1"
hasTable="N" parentTypeId=""
productContentTypeId="ADDITIONAL_IMAGE_1"/>
+ <ProductContentType description="Image - Additional View 2"
hasTable="N" parentTypeId=""
productContentTypeId="ADDITIONAL_IMAGE_2"/>
+ <ProductContentType description="Image - Additional View 3"
hasTable="N" parentTypeId=""
productContentTypeId="ADDITIONAL_IMAGE_3"/>
+ <ProductContentType description="Image - Additional View 4"
hasTable="N" parentTypeId=""
productContentTypeId="ADDITIONAL_IMAGE_4"/>
<ProductContentType description="Add To Cart Label"
hasTable="N" parentTypeId=""
productContentTypeId="ADDTOCART_LABEL"/>
<ProductContentType description="Add To Cart Image"
hasTable="N" parentTypeId=""
productContentTypeId="ADDTOCART_IMAGE"/>
<ProductContentType description="Short Sales Pitch"
hasTable="N" parentTypeId=""
productContentTypeId="SHORT_SALES_PITCH"/>
Modified: ofbiz/trunk/applications/product/servicedef/services.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services.xml?rev=689772&r1=689771&r2=689772&view=diff
= = = = = = = =
=
=
====================================================================
--- ofbiz/trunk/applications/product/servicedef/services.xml
(original)
+++ ofbiz/trunk/applications/product/servicedef/services.xml Thu
Aug 28 03:02:47 2008
@@ -414,6 +414,16 @@
<override name="localeString" optional="false"/>
<override name="contentId" mode="INOUT"/>
</service>
+
+ <service name="addAdditionalViewForProduct" default-entity-
name="ProductContent" engine="java"
+ location="org.ofbiz.product.product.ProductServices"
invoke="addAdditionalViewForProduct" auth="true">
+ <implements service="uploadFileInterface"/>
+ <auto-attributes include="pk" mode="IN" optional="true"/>
+ <auto-attributes include="nonpk" mode="IN"
optional="true"/>
+ <attribute mode="IN" name="contentId" optional="true"
type="String"/>
+ <override name="productContentTypeId" optional="false"/>
+ <override name="productId" optional="false"/>
+ </service>
<!-- SupplierProduct Services -->
<service name="createSupplierProduct" default-entity-
name="SupplierProduct" engine="simple"
Modified: ofbiz/trunk/applications/product/src/org/ofbiz/product/
product/ProductServices.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/product/product/ProductServices.java?rev=689772&r1=689771&r2=689772&view=diff
= = = = = = = =
=
=
====================================================================
--- ofbiz/trunk/applications/product/src/org/ofbiz/product/
product/ ProductServices.java (original)
+++ ofbiz/trunk/applications/product/src/org/ofbiz/product/
product/ ProductServices.java Thu Aug 28 03:02:47 2008
@@ -18,14 +18,23 @@
*******************************************************************************/
package org.ofbiz.product.product;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
import java.sql.Timestamp;
import java.util.*;
+import javolution.util.FastList;
+import javolution.util.FastMap;
+
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilDateTime;
import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.base.util.UtilProperties;
import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.base.util.string.FlexibleStringExpander;
import org.ofbiz.entity.GenericDelegator;
import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.GenericValue;
@@ -934,5 +943,163 @@
return ServiceUtil.returnSuccess();
}
+
+ public static Map
addAdditionalViewForProduct(DispatchContext dctx, Map context) {
+ LocalDispatcher dispatcher = dctx.getDispatcher();
+ GenericDelegator delegator = dctx.getDelegator();
+ GenericValue userLogin = (GenericValue)
context.get("userLogin");
+ String productId = (String) context.get("productId");
+ String productContentTypeId = (String)
context.get("productContentTypeId");
+ ByteBuffer imageData = (ByteBuffer)
context.get("uploadedFile");
+
+ if (UtilValidate.isNotEmpty((String)
context.get("_uploadedFile_fileName"))) {
+ String imageFilenameFormat =
UtilProperties.getPropertyValue("catalog", "image.filename.format");
+ String imageServerPath =
UtilProperties.getPropertyValue("catalog", "image.server.path");
+ String imageUrlPrefix =
UtilProperties.getPropertyValue("catalog", "image.url.prefix");
+
+ FlexibleStringExpander filenameExpander =
FlexibleStringExpander.getInstance(imageFilenameFormat);
+ String id = productId + "_View_" +
productContentTypeId.charAt(productContentTypeId.length() - 1);
+ String fileLocation =
filenameExpander.expandString(UtilMisc.toMap("location",
"products", "type", "additional", "id", id));
+ String filePathPrefix = "";
+ String filenameToUse = fileLocation;
+ if (fileLocation.lastIndexOf("/") != -1) {
+ filePathPrefix = fileLocation.substring(0,
fileLocation.lastIndexOf("/") + 1); // adding 1 to include the
trailing slash
+ filenameToUse =
fileLocation.substring(fileLocation.lastIndexOf("/") + 1);
+ }
+
+ List fileExtension = FastList.newInstance();
+ try {
+ fileExtension =
delegator.findByAnd("FileExtension", UtilMisc.toMap("mimeTypeId",
(String) context.get("_uploadedFile_contentType")));
+ } catch (GenericEntityException e) {
+ Debug.logError(e, module);
+ ServiceUtil.returnError(e.getMessage());
+ }
+
+ GenericValue extension =
EntityUtil.getFirst(fileExtension);
+ if (extension != null) {
+ filenameToUse += "." +
extension.getString("fileExtensionId");
+ }
+
+ File file = new File(imageServerPath + "/" +
filePathPrefix + filenameToUse);
+
+ try {
+ RandomAccessFile out = new
RandomAccessFile(file, "rw");
+ out.write(imageData.array());
+ out.close();
+ } catch (FileNotFoundException e) {
+ Debug.logError(e, module);
+ return ServiceUtil.returnError("Unable to open
file for writing: " + file.getAbsolutePath());
+ } catch (IOException e) {
+ Debug.logError(e, module);
+ return ServiceUtil.returnError("Unable to write
binary data to: " + file.getAbsolutePath());
+ }
+
+ String imageUrl = imageUrlPrefix + "/" +
filePathPrefix + filenameToUse;
+
+ if (UtilValidate.isNotEmpty(imageUrl) &&
imageUrl.length() > 0) {
+ String contentId = (String)
context.get("contentId");
+
+ Map dataResourceCtx = FastMap.newInstance();
+ dataResourceCtx.put("objectInfo", imageUrl);
+ dataResourceCtx.put("dataResourceName", (String)
context.get("_uploadedFile_fileName"));
+ dataResourceCtx.put("userLogin", userLogin);
+
+ Map productContentCtx = FastMap.newInstance();
+ productContentCtx.put("productId", productId);
+ productContentCtx.put("productContentTypeId",
productContentTypeId);
+ productContentCtx.put("fromDate", (Timestamp)
context.get("fromDate"));
+ productContentCtx.put("thruDate", (Timestamp)
context.get("thruDate"));
+ productContentCtx.put("userLogin", userLogin);
+
+ if (UtilValidate.isNotEmpty(contentId)) {
+ GenericValue content = null;
+ try {
+ content = delegator.findOne("Content",
UtilMisc.toMap("contentId", contentId), false);
+ } catch (GenericEntityException e) {
+ Debug.logError(e, module);
+ ServiceUtil.returnError(e.getMessage());
+ }
+
+ if (content != null) {
+ GenericValue dataResource = null;
+ try {
+ dataResource =
content.getRelatedOne("DataResource");
+ } catch (GenericEntityException e) {
+ Debug.logError(e, module);
+
ServiceUtil.returnError(e.getMessage());
+ }
+
+ if (dataResource != null) {
+
dataResourceCtx.put("dataResourceId",
dataResource.getString("dataResourceId"));
+ try {
+ Map dataResourceResult =
dispatcher.runSync("updateDataResource", dataResourceCtx);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+
ServiceUtil.returnError(e.getMessage());
+ }
+ } else {
+
dataResourceCtx.put("dataResourceTypeId", "URL_RESOURCE");
+ Map dataResourceResult =
FastMap.newInstance();
+ try {
+ dataResourceResult =
dispatcher.runSync("createDataResource", dataResourceCtx);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+
ServiceUtil.returnError(e.getMessage());
+ }
+
+ Map contentCtx = FastMap.newInstance();
+ contentCtx.put("contentId", contentId);
+ contentCtx.put("dataResourceId",
dataResourceResult.get("dataResourceId"));
+ contentCtx.put("userLogin", userLogin);
+ try {
+ Map contentResult =
dispatcher.runSync("updateContent", contentCtx);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+
ServiceUtil.returnError(e.getMessage());
+ }
+ }
+
+ productContentCtx.put("contentId",
contentId);
+ try {
+ Map productContentResult =
dispatcher.runSync("updateProductContent", productContentCtx);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+
ServiceUtil.returnError(e.getMessage());
+ }
+ }
+ } else {
+ dataResourceCtx.put("dataResourceTypeId",
"URL_RESOURCE");
+ Map dataResourceResult = FastMap.newInstance();
+ try {
+ dataResourceResult =
dispatcher.runSync("createDataResource", dataResourceCtx);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+ ServiceUtil.returnError(e.getMessage());
+ }
+
+ Map contentCtx = FastMap.newInstance();
+ contentCtx.put("contentTypeId", "DOCUMENT");
+ contentCtx.put("dataResourceId",
dataResourceResult.get("dataResourceId"));
+ contentCtx.put("userLogin", userLogin);
+ Map contentResult = FastMap.newInstance();
+ try {
+ contentResult =
dispatcher.runSync("createContent", contentCtx);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+ ServiceUtil.returnError(e.getMessage());
+ }
+
+ productContentCtx.put("contentId",
contentResult.get("contentId"));
+ try {
+ Map productContentResult =
dispatcher.runSync("createProductContent", productContentCtx);
+ } catch (GenericServiceException e) {
+ Debug.logError(e, module);
+ ServiceUtil.returnError(e.getMessage());
+ }
+ }
+ }
+ }
+ return ServiceUtil.returnSuccess();
+ }
}
Modified: ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/
actions/product/EditProductContentContent.groovy
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/actions/product/EditProductContentContent.groovy?rev=689772&r1=689771&r2=689772&view=diff
= = = = = = = =
=
=
====================================================================
--- ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/
actions/ product/EditProductContentContent.groovy (original)
+++ ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/
actions/ product/EditProductContentContent.groovy Thu Aug 28
03:02:47 2008
@@ -22,6 +22,7 @@
import org.ofbiz.entity.util.*;
import org.ofbiz.base.util.*;
import java.sql.Timestamp;
+import org.ofbiz.base.util.ObjectType
contentId = request.getParameter("contentId");
if ("".equals(contentId)) {
@@ -33,8 +34,11 @@
fromDate = request.getParameter("fromDate");
if ("".equals(fromDate)) {
fromDate = null;
+} else {
+ fromDate = ObjectType.simpleTypeConvert(fromDate,
"Timestamp", null, null, false)
}
+
description = request.getParameter("description");
if ("".equals(description)) {
description = null;
@@ -115,6 +119,8 @@
context.downloadData = downloadData;
} else if ("FULFILLMENT_EXTERNAL".equals(productContentTypeId)) {
context.contentFormName = "EditProductContentExternal";
+} else if (productContentTypeId.indexOf("ADDITIONAL_IMAGE") > -1) {
+ context.contentFormName = "EditProductAdditionalImageContent";
} else {
//Assume it is a generic simple text content
textData = [:];
@@ -134,4 +140,4 @@
context.productContentData = productContentData;
context.content = content;
-context.contentId = contentId;
\ No newline at end of file
+context.contentId = contentId;
Modified: ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/
controller.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/controller.xml?rev=689772&r1=689771&r2=689772&view=diff
= = = = = = = =
=
=
====================================================================
--- ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/
controller.xml (original)
+++ ofbiz/trunk/applications/product/webapp/catalog/WEB-INF/
controller.xml Thu Aug 28 03:02:47 2008
@@ -700,6 +700,12 @@
<response name="success" type="view"
value="EditProductContent"/>
<response name="error" type="view"
value="EditProductContentContent"/>
</request-map>
+ <request-map uri="addAdditionalImageContentForProduct">
+ <security https="true" auth="true"/>
+ <event type="service" path=""
invoke="addAdditionalViewForProduct"/>
+ <response name="success" type="view"
value="EditProductContent"/>
+ <response name="error" type="view"
value="EditProductContentContent"/>
+ </request-map>
<!-- ================ Product GoodIdentification Requests
================= -->
<request-map uri="EditProductGoodIdentifications">
Modified: ofbiz/trunk/applications/product/webapp/catalog/product/
ProductForms.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/product/ProductForms.xml?rev=689772&r1=689771&r2=689772&view=diff
= = = = = = = =
=
=
====================================================================
--- ofbiz/trunk/applications/product/webapp/catalog/product/
ProductForms.xml (original)
+++ ofbiz/trunk/applications/product/webapp/catalog/product/
ProductForms.xml Thu Aug 28 03:02:47 2008
@@ -662,6 +662,26 @@
<field use-when="contentId == null" name="submitButton"
title="${uiLabelMap.CommonCreate}" widget-
style="smallSubmit"><submit button-type="button"/></field>
<field use-when="contentId != null" name="submitButton"
title="${uiLabelMap.CommonUpdate}" widget-
style="smallSubmit"><submit button-type="button"/></field>
</form>
+
+ <form name="EditProductAdditionalImageContent" type="upload"
target="addAdditionalImageContentForProduct" title="">
+ <auto-fields-entity entity-name="ProductContent" map-
name="productContentData"/>
+ <field name="productContentTypeId"><display-entity
entity- name="ProductContentType" also-hidden="true"/></field>
+ <field name="fromDate" use-when="contentId==null"
title="$ {uiLabelMap.CommonFromDate}*" ><date-time/></field>
+ <field name="fromDate" use-when="contentId!=null"
title="$ {uiLabelMap.CommonFromDate}" ><display/></field>
+ <field name="thruDate" title="$
{uiLabelMap.CommonThruDate}"></field>
+ <field use-when="contentId == null"
name="contentId"><ignored/></field>
+ <field use-when="contentId != null" name="contentId"
tooltip="$
{uiLabelMap
.ProductNotModificationRecrationProductContentAssociation}" map-
name="productContentData" ><display/></field>
+ <field name="useTime"><hidden/></field>
+ <field name="useTimeUomId"><hidden/></field>
+ <field name="useRoleTypeId"><hidden/></field>
+ <field name="useCountLimit"><hidden/></field>
+ <field name="purchaseThruDate"><hidden/></field>
+ <field name="purchaseFromDate"><hidden/></field>
+ <field name="uploadedFile" title="$
{uiLabelMap.ProductFile}"><file/></field>
+ <field name="productId"><hidden/></field>
+ <field use-when="contentId == null" name="submitButton"
title="${uiLabelMap.CommonCreate}" widget-
style="smallSubmit"><submit button-type="button"/></field>
+ <field use-when="contentId != null" name="submitButton"
title="${uiLabelMap.CommonUpdate}" widget-
style="smallSubmit"><submit button-type="button"/></field>
+ </form>
<!-- SupplierProduct -->
<form name="AddSupplierProduct" type="single"
target="updateSupplierProduct" title="" default-map-
name="supplierProduct"