You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by bu...@apache.org on 2009/11/19 00:31:59 UTC

svn commit: r881999 - in /ofbiz/trunk/framework: common/script/org/ofbiz/common/ common/servicedef/ common/webcommon/WEB-INF/ common/webcommon/portal/ common/widget/ images/webapp/images/

Author: buscob
Date: Wed Nov 18 23:31:59 2009
New Revision: 881999

URL: http://svn.apache.org/viewvc?rev=881999&view=rev
Log:
A slightly modified patch from Sascha Rodekamp "Drag 'n' Drop for myPortal + update prototype and script.aculo.us"
(https://issues.apache.org/jira/browse/OFBIZ-3190) - OFBIZ-3190

- I changed some tabs to spaces
- It seems to me that everything works with the script.aculo.us version that is already present in the framework; so I did not commit the script.aculo.us update since could break some other thing

Added:
    ofbiz/trunk/framework/images/webapp/images/loader.gif   (with props)
    ofbiz/trunk/framework/images/webapp/images/myportal.css
    ofbiz/trunk/framework/images/webapp/images/myportal.js
    ofbiz/trunk/framework/images/webapp/images/myportal_load_bg.png   (with props)
Modified:
    ofbiz/trunk/framework/common/script/org/ofbiz/common/PortalPageServices.xml
    ofbiz/trunk/framework/common/servicedef/services.xml
    ofbiz/trunk/framework/common/webcommon/WEB-INF/portal-controller.xml
    ofbiz/trunk/framework/common/webcommon/portal/editPortalPage.ftl
    ofbiz/trunk/framework/common/widget/PortalPageScreens.xml

Modified: ofbiz/trunk/framework/common/script/org/ofbiz/common/PortalPageServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/script/org/ofbiz/common/PortalPageServices.xml?rev=881999&r1=881998&r2=881999&view=diff
==============================================================================
--- ofbiz/trunk/framework/common/script/org/ofbiz/common/PortalPageServices.xml (original)
+++ ofbiz/trunk/framework/common/script/org/ofbiz/common/PortalPageServices.xml Wed Nov 18 23:31:59 2009
@@ -107,9 +107,9 @@
         </if-not-empty>
         <entity-condition entity-name="PortletAttribute" list="attributeList">
             <condition-list combine="and">
-                <condition-expr field-name="portalPageId" operator="equals" from-field="parameters.portalPageId"/>                
-                <condition-expr field-name="portalPortletId" operator="equals" from-field="parameters.portalPortletId"/>                
-                <condition-expr field-name="portletSeqId" operator="equals" from-field="parameters.portletSeqId" ignore-if-empty="true"/>                
+                <condition-expr field-name="portalPageId" operator="equals" from-field="parameters.portalPageId"/>
+                <condition-expr field-name="portalPortletId" operator="equals" from-field="parameters.portalPortletId"/>
+                <condition-expr field-name="portletSeqId" operator="equals" from-field="parameters.portletSeqId" ignore-if-empty="true"/>
             </condition-list>
         </entity-condition>
         <if-not-empty field="attributeList">
@@ -299,5 +299,72 @@
         <set field="first.sequenceNum" from-field="getSequenceNum.sequenceNum" type="Long"/>
         <call-service service-name="updatePortalPage" in-map-name="first"/>
     </simple-method>
+    <!-- update Portlet Seq with Drag & Drop -->
+    <simple-method method-name="updatePortletSeqDragDrop" short-description="Updates a portlet Seq No for the Drag and Drop Feature">
+        <set field="parameters.portalPageId" value="${parameters.o_portalPageId}"/>
+        <call-simple-method method-name="checkOwnerShip"/>
+
+        <!-- origin Portlet -->
+        <entity-one value-field="originPp" entity-name="PortalPagePortlet">
+            <field-map field-name="portalPageId" value="${parameters.o_portalPageId}"/>
+            <field-map field-name="portalPortletId" value="${parameters.o_portalPortletId}"/>
+            <field-map field-name="portletSeqId" value="${parameters.o_portletSeqId}"/>
+        </entity-one>
 
+        <!-- destination Portlet -->
+        <if-compare operator="equals" field="parameters.mode" value="DRAGDROP">
+            <entity-one value-field="destiPp" entity-name="PortalPagePortlet">
+                <field-map field-name="portalPageId" value="${parameters.d_portalPageId}"/>
+                <field-map field-name="portalPortletId" value="${parameters.d_portalPortletId}"/>
+                <field-map field-name="portletSeqId" value="${parameters.d_portletSeqId}"/>
+            </entity-one>
+
+            <entity-condition list="modifyPpList" entity-name="PortalPagePortlet">
+             <condition-list combine="and">
+                <condition-expr field-name="portalPageId" operator="equals" value="${parameters.o_portalPageId}"/>
+                <condition-expr field-name="sequenceNum" operator="greater-equals" value="${destiPp.sequenceNum}"/>
+             </condition-list>
+        </entity-condition>
+
+        </if-compare>
+
+        <!-- Portlets to Modify -->
+        <if-compare operator="equals" field="parameters.mode" value="ColBOTTOM">
+            <entity-one value-field="pPColumn" entity-name="PortalPageColumn">
+                <field-map field-name="columnSeqId" value="${parameters.destinationColumn}"/>
+                <field-map field-name="portalPageId" value="${parameters.o_portalPageId}"/>
+            </entity-one>
+            <entity-condition list="modifyPpList" entity-name="PortalPagePortlet">
+                 <condition-list combine="and">
+                    <condition-expr field-name="portalPageId" operator="equals" value="${parameters.o_portalPageId}" />
+                    <condition-expr field-name="columnSeqId" operator="equals" value="${pPColumn.columnSeqId}"/>
+                 </condition-list>
+            <order-by field-name="-sequenceNum" />
+            </entity-condition>
+            <if-not-empty field="modifyPpList">
+                <first-from-list entry="destiPp" list="modifyPpList"/>
+                <entity-condition list="modifyPpList" entity-name="PortalPagePortlet">
+                     <condition-list combine="and">
+                        <condition-expr field-name="sequenceNum" operator="greater" value="${destiPp.sequenceNum}"/>
+                     </condition-list>
+                </entity-condition>
+                <set field="destiPp.sequenceNum" value="${destiPp.sequenceNum + 1}" type="Long"/>
+                <else>
+                    <clone-value new-value-field="destiPp" value-field="originPp"/>
+                    <set field="destiPp.columnSeqId" value="${pPColumn.columnSeqId}"/>
+                </else>
+            </if-not-empty>
+        </if-compare>
+        <if-not-empty field="modifyPpList">
+            <iterate entry="modifyPp" list="modifyPpList">
+                <set field="modifyPp.sequenceNum" value="${modifyPp.sequenceNum + 1}" type="Long"/>
+                <store-value value-field="modifyPp"/>
+            </iterate>
+        </if-not-empty>
+        <!-- Origin Portlet Modify -->
+        <set field="originPp.sequenceNum" from-field="destiPp.sequenceNum"/>
+        <set field="originPp.columnSeqId" from-field="destiPp.columnSeqId"/>
+        <store-value value-field="originPp"/>
+    </simple-method>
+    <!--  -->
 </simple-methods>

Modified: ofbiz/trunk/framework/common/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/servicedef/services.xml?rev=881999&r1=881998&r2=881999&view=diff
==============================================================================
--- ofbiz/trunk/framework/common/servicedef/services.xml (original)
+++ ofbiz/trunk/framework/common/servicedef/services.xml Wed Nov 18 23:31:59 2009
@@ -412,7 +412,7 @@
             location="org.ofbiz.common.preferences.PreferenceServices" invoke="getUserPreference">
         <description>
             Gets a single user preference.
-            If not found for the specific userLogin, find it for the _NA_ userlogin. 
+            If not found for the specific userLogin, find it for the _NA_ userlogin.
             If the value is DEFAULT, find the value in general.properties file.
         </description>
         <attribute name="userPrefTypeId" type="String" mode="IN" optional="false"/>
@@ -635,6 +635,21 @@
         <auto-attributes include="pk" mode="IN" optional="false"/>
     </service>
 
+    <!-- update Sequence No for Drag and Drop -->
+    <service name="updatePortletSeqDragDrop" engine="simple" auth="true"
+        location="component://common/script/org/ofbiz/common/PortalPageServices.xml" invoke="updatePortletSeqDragDrop">
+        <attribute name="o_portalPageId" mode="IN" type="String" ></attribute>
+        <attribute name="o_portalPortletId" mode="IN" type="String"></attribute>
+        <attribute name="o_portletSeqId" mode="IN" type="String"></attribute>
+
+        <attribute name="d_portalPageId" mode="IN" type="String" optional="true"></attribute>
+        <attribute name="d_portalPortletId" mode="IN" type="String" optional="true"></attribute>
+        <attribute name="d_portletSeqId" mode="IN" type="String" optional="true"></attribute>
+
+        <attribute name="destinationColumn" mode="IN" optional="true" type="String"/>
+        <attribute name="mode" type="String" mode="IN"/>
+    </service>
+
     <!-- PortletAttribute services -->
     <service name="createPortletAttribute" default-entity-name="PortletAttribute" engine="entity-auto" invoke="create" auth="true">
         <description>Create a new Portlet Attribute</description>

Modified: ofbiz/trunk/framework/common/webcommon/WEB-INF/portal-controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/webcommon/WEB-INF/portal-controller.xml?rev=881999&r1=881998&r2=881999&view=diff
==============================================================================
--- ofbiz/trunk/framework/common/webcommon/WEB-INF/portal-controller.xml (original)
+++ ofbiz/trunk/framework/common/webcommon/WEB-INF/portal-controller.xml Wed Nov 18 23:31:59 2009
@@ -75,6 +75,11 @@
         <response name="success" type="request" value="ManagePortalPages"/>
         <response name="error" type="request" value="ManagePortalPages"/>
     </request-map>
+    <request-map uri="updatePortalPagePortletSeqAjax">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="updatePortletSeqDragDrop"/>
+        <response name="success" type="none" />
+    </request-map>
     <request-map uri="createPortalPage">
         <security https="true" auth="true"/>
         <event type="service" invoke="createPortalPage"/>

Modified: ofbiz/trunk/framework/common/webcommon/portal/editPortalPage.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/webcommon/portal/editPortalPage.ftl?rev=881999&r1=881998&r2=881999&view=diff
==============================================================================
--- ofbiz/trunk/framework/common/webcommon/portal/editPortalPage.ftl (original)
+++ ofbiz/trunk/framework/common/webcommon/portal/editPortalPage.ftl Wed Nov 18 23:31:59 2009
@@ -47,13 +47,14 @@
   </tr>
   <tr>
     <#list portalPageColumnList?if_exists as portalPageColumn>
-      <td style="vertical-align: top; <#if portalPageColumn.columnWidthPercentage?has_content> width:${portalPageColumn.columnWidthPercentage}%;</#if>">
+      <td style="vertical-align: top; <#if portalPageColumn.columnWidthPercentage?has_content> width:${portalPageColumn.columnWidthPercentage}%;</#if>" id="${portalPageColumn.columnSeqId}" name="portalColumn">
+      <script type="text/javascript">makeDroppable("${portalPageColumn.columnSeqId}")</script>
       <#assign firstInColumn = true/>
       <#list portalPagePortletViewList as portlet>
         <#if (!portlet.columnSeqId?has_content && portalPageColumn_index == 0) || (portlet.columnSeqId?if_exists == portalPageColumn.columnSeqId)>
           <#if portlet.screenName?has_content>
               <#assign portletFields = '<input name="portalPageId" value="' + portlet.portalPageId + '" type="hidden"/><input name="portalPortletId" value="' + portlet.portalPortletId + '" type="hidden"/><input name="portletSeqId" value="' + portlet.portletSeqId  + '" type="hidden"/>'>
-              <div class="portlet-config">
+              <div class="portlet-config" id="${portlet_index}" name="portalPortlet">
               <div class="portlet-config-title-bar">
                 <#list portalPages as portalPageList>
                   <#if portalPage.portalPageId != portalPageList.portalPageId>
@@ -64,6 +65,9 @@
                   </#if>
                 </#list>
                 <ul>
+                  <script type="text/javascript">makeDragable("${portlet_index}");</script>
+                  <script type="text/javascript">makeDroppable("${portlet_index}");</script>
+                  <form method="post" action="<@o...@ofbizUrl>" name="freeMove_${portlet_index}">${portletFields}<input name="columnSeqId" value="${portalPageColumnList[portalPageColumn_index].columnSeqId}" type="hidden"/><input name="mode" value="RIGHT" type="hidden"/></form>
                   <li class="title">Portlet : ${portlet.portletName?if_exists} [${portlet.portalPortletId}]</li>
                   <li class="remove"><form method="post" action="<@o...@ofbizUrl>" name="removePP_${portlet_index}">${portletFields}</form><a href="javascript:document.removePP_${portlet_index}.submit()">&nbsp;&nbsp;&nbsp;</a></li>
 

Modified: ofbiz/trunk/framework/common/widget/PortalPageScreens.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/widget/PortalPageScreens.xml?rev=881999&r1=881998&r2=881999&view=diff
==============================================================================
--- ofbiz/trunk/framework/common/widget/PortalPageScreens.xml (original)
+++ ofbiz/trunk/framework/common/widget/PortalPageScreens.xml Wed Nov 18 23:31:59 2009
@@ -42,7 +42,7 @@
             </widgets>
         </section>
     </screen>
-    
+
     <screen name="showPortlet">
         <section>
             <actions>
@@ -64,7 +64,7 @@
             </widgets>
         </section>
     </screen>
-    
+
     <screen name="showPortalPage">
         <section>
             <actions>
@@ -95,10 +95,12 @@
             </widgets>
         </section>
     </screen>
-    
+
     <screen name="ManagePortalPages">
         <section>
             <actions>
+                <set field="layoutSettings.javaScripts[]" value="/images/myportal.js" global="true"/>
+                <set field="layoutSettings.styleSheets[+0]" value="/images/myportal.css" global="true"/>
                 <entity-one entity-name="PortalPage" value-field="portalPage"/>
                 <script location="component://common/webcommon/WEB-INF/actions/includes/ListPortalPages.groovy"/>
             </actions>
@@ -148,12 +150,14 @@
                                 </entity-condition>
                             </actions>
                             <widgets>
-                                <screenlet title="${uiLabelMap.CommonPortalEditPage}: ${portalPage.portalPageName} [${portalPage.portalPageId}]">
-                                    <link target="addPortalPageColumn" style="buttontext" text="${uiLabelMap.CommonAddColumn}">
-                                        <parameter param-name="portalPageId" from-field="portalPage.portalPageId"/>
-                                    </link>
-                                    <platform-specific><html><html-template location="component://common/webcommon/portal/editPortalPage.ftl"/></html></platform-specific>
-                                </screenlet>
+                                <container id="portalContainerId">
+                                    <screenlet title="${uiLabelMap.CommonPortalEditPage}: ${portalPage.portalPageName} [${portalPage.portalPageId}]">
+                                        <link target="addPortalPageColumn" style="buttontext" text="${uiLabelMap.CommonAddColumn}">
+                                            <parameter param-name="portalPageId" from-field="portalPage.portalPageId"/>
+                                        </link>
+                                        <platform-specific><html><html-template location="component://common/webcommon/portal/editPortalPage.ftl"/></html></platform-specific>
+                                    </screenlet>
+                                </container>
                             </widgets>
                         </section>
                     </decorator-section>

Added: ofbiz/trunk/framework/images/webapp/images/loader.gif
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/loader.gif?rev=881999&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ofbiz/trunk/framework/images/webapp/images/loader.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ofbiz/trunk/framework/images/webapp/images/myportal.css
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/myportal.css?rev=881999&view=auto
==============================================================================
--- ofbiz/trunk/framework/images/webapp/images/myportal.css (added)
+++ ofbiz/trunk/framework/images/webapp/images/myportal.css Wed Nov 18 23:31:59 2009
@@ -0,0 +1,28 @@
+#loading {
+position: absolute;
+z-index: 100;
+left: 10px;
+top: 250px;
+background-image: url(/images/myportal_load_bg.png);
+background-repeat:repeat;
+background-position:top center;
+border: 0px !important;
+width: 99%;
+height: 100%;
+}
+
+#loaderImg {
+position: absolute;
+top: 200px;
+left: 50%;
+}
+
+td.hover {
+border: 2px dashed #aaa;
+background:#efefef;
+}
+
+div.hover {
+border: 2px dashed #aaa;
+background:#efefef;
+}

Added: ofbiz/trunk/framework/images/webapp/images/myportal.js
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/myportal.js?rev=881999&view=auto
==============================================================================
--- ofbiz/trunk/framework/images/webapp/images/myportal.js (added)
+++ ofbiz/trunk/framework/images/webapp/images/myportal.js Wed Nov 18 23:31:59 2009
@@ -0,0 +1,141 @@
+//Drag & Drop Functions for myPortal
+
+//makes portlets dragable
+function makeDragable(portletId){
+    drag = document.getElementById(portletId);
+    new Draggable(drag,
+            {revert: true, reverteffect :
+            function(drag, top_offset, left_offset)
+                { new Effect.MoveBy(drag, -top_offset, -left_offset, {duration:0}); }
+            });
+}
+
+//makes columns and portlets droppable
+function makeDroppable(id){
+    var drop = document.getElementById(id);
+    if(drop.nodeName == "DIV"){
+        Droppables.add(drop, {
+            accept: 'portlet-config',
+            hoverclass: 'hover',
+                onDrop: function(element) {
+                getDestinationInformationPortlets(element.id, id);
+            }
+        });
+    }else{
+        Droppables.add(drop, {
+        accept: 'portlet-config',
+        hoverclass: 'hover',
+            onDrop: function(element) {
+            getDestinationInformationColumn(element.id, id);
+        }
+        });
+    }
+}
+
+//calls ajax request for dropping container on a portlet
+function getDestinationInformationPortlets(originId, destinationId){
+	loadingImage();
+
+    var move = document.forms['freeMove_' + destinationId];
+    var d_portalPageId = move.elements['portalPageId'].value;
+    var d_portalPortletId = move.elements['portalPortletId'].value;
+    var d_portletSeqId =  move.elements['portletSeqId'].value;
+
+    var move = document.forms['freeMove_' + originId];
+    var o_portalPageId = move.elements['portalPageId'].value;
+    var o_portalPortletId = move.elements['portalPortletId'].value;
+    var o_portletSeqId =  move.elements['portletSeqId'].value;
+
+    new Ajax.Request('/myportal/control/updatePortalPagePortletSeqAjax',{
+        method: "post",
+        parameters: {o_portalPageId: o_portalPageId, o_portalPortletId: o_portalPortletId, o_portletSeqId: o_portletSeqId,
+        d_portalPageId: d_portalPageId, d_portalPortletId: d_portalPortletId, d_portletSeqId: d_portletSeqId, mode: "DRAGDROP" },
+
+        onLoading: function(transport){
+        },
+
+        onSuccess: function(transport){
+            var destination = document.getElementById(destinationId);
+            var origin = document.getElementById(originId);
+
+            destination.parentNode.insertBefore(origin, destination);
+            //Fix for layout Bug
+            origin.style.left = destination.style.left;
+            origin.style.top = 0;
+        },
+
+        onComplete: function(transport){
+            onCompleteRequest();
+        }
+    });
+}
+
+//calls ajax request for dropping container on a column
+function getDestinationInformationColumn(id, destination){
+    loadingImage();
+
+    var destiCol = destination;
+    var move = document.forms['freeMove_' + id];
+    var portalPageId = move.elements['portalPageId'].value;
+    var portalPortletId = move.elements['portalPortletId'].value;
+    var portletSeqId =  move.elements['portletSeqId'].value;
+    var mode = move.elements['mode'].value;
+
+    new Ajax.Request('/myportal/control/updatePortalPagePortletSeqAjax',{
+            method: "post",
+            parameters: {destinationColumn: destination, o_portalPageId: portalPageId, o_portalPortletId: portalPortletId, o_portletSeqId: portletSeqId, mode: "ColBOTTOM"},
+
+        onLoading: function(transport){
+        },
+
+        onSuccess: function(transport){
+            //loadingImage();
+            var destination = document.getElementById(destiCol);
+            var origin = document.getElementById(id);
+            destination.appendChild(origin);
+
+            origin.style.left = destination.style.left;
+            origin.style.top = 0;
+        },
+
+        onComplete: function(transport){
+            onCompleteRequest();
+        }
+    });
+}
+
+//removes the loading image
+function onCompleteRequest() {
+    var loading = document.getElementById("loading");
+    if(loading != null){
+        //IE Fix (IE treats DOM objects and Javascript objects separately, and you can't extend the DOM objects using Object.prototype)
+        loading.parentNode.removeChild(loading);
+    }
+}
+
+//displays the loading image
+function loadingImage() {
+    var container = document.getElementById("portalContainerId");
+    var p = document.createElement("p");
+    p.setAttribute("id", "loading");
+    var img = document.createElement("img");
+    img.setAttribute("src", "/images/loader.gif");
+    img.setAttribute("id", "loaderImg");
+    p.appendChild(img);
+    container.appendChild(p);
+}
+
+//Workaround for IE getElementsByName Bug
+function getElementsByName_iefix(tag, name) {
+    var elem = document.getElementsByTagName(tag);
+    var arr = new Array();
+    for(i = 0,iarr = 0; i < elem.length; i++) {
+         att = elem[i].getAttribute("name");
+         if(att == name) {
+              arr[iarr] = elem[i];
+              iarr++;
+         }
+    }
+    return arr;
+}
+

Added: ofbiz/trunk/framework/images/webapp/images/myportal_load_bg.png
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/myportal_load_bg.png?rev=881999&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ofbiz/trunk/framework/images/webapp/images/myportal_load_bg.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream