r13625 - in MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget: . browser skins/referencebrowser

"Emmanuel Masker" <[email protected]> Wed, 11 May 2011 14:58:15 +0000
Newsgroups gmane.comp.web.zope.plone.archetypes.cvs
Message-ID <[email protected]>
Author: emasker
Date: Wed May 11 14:58:15 2011
New Revision: 13625

Modified:
   MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/browser/popup.pt
   MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/browser/view.py
   MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/skins/referencebrowser/referencebrowser.js
   MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/widget.py
Log:
savepoint: first step for inplace add of content type

Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/browser/popup.pt
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/browser/popup.pt	(original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/browser/popup.pt	Wed May 11 14:58:15 2011
@@ -11,6 +11,7 @@
       tal:define="fieldName view/fieldName;
                   multiValued view/multiValued;
                   fieldRealName view/fieldRealName;
+                  editForm view/getEditForm;
                   at_obj nocall:view/at_obj;
                   widget nocall:view/widget;
                   title python:widget.Label(at_obj);
@@ -100,10 +101,12 @@
             tal:attributes="value fieldRealName" />
      <input type="hidden" name="at_url" value=""
             tal:attributes="value view/at_url" />
+     <input type="hidden" name="startup_directory" value=""
+            tal:attributes="value view/startup_url" />
      <input type="hidden" name="multiValued" value=""
             tal:attributes="value multiValued" />
      <input type="hidden" name="close_window" value=""
-            tal:attributes="value view/close_window" />
+            tal:attributes="value view/close_window" />       
     </form>
     <!-- actual list of objects, either searchresults or folder contents -->
     <tal:block tal:define="batch view/getResult;">
@@ -150,8 +153,16 @@
       </div>
 
       <!-- object list -->
-      <p tal:condition="not:view/has_queryresults"
-         i18n:translate="referencebrowser_no_items_found">No items found.</p>
+      <p tal:condition="not:view/has_queryresults">
+
+         <span i18n:translate="referencebrowser_no_items_found">No items found.</span>
+         <form  method="post" 
+                tal:condition="view/getPermissionToAdd"
+                tal:attributes="action request/getURL"
+                id="add">
+             <input type="submit" name="add" value="ajouter"/>
+         </form>
+     </p>
 
       <table class="group" width="100%" cellspacing="0" cellpadding="2"
          tal:condition="batch">

Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/browser/view.py
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/browser/view.py	(original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/browser/view.py	Wed May 11 14:58:15 2011
@@ -6,6 +6,7 @@
 from zope.component import getAdapter
 from zope.component import getMultiAdapter, queryMultiAdapter
 from zope.formlib import namedtemplate
+from zope.publisher.interfaces.browser import IBrowserView
 
 from Acquisition import aq_inner
 from Acquisition import aq_base
@@ -92,6 +93,13 @@
         context = aq_inner(self.context)
         return urllib.quote('/'.join(context.getPhysicalPath()))
 
+    def getDestinationDirectoryToAdd (self, field):
+        """ Return the URL where item has to add. """
+        widget = field.widget
+        directory = widget.getDestinationDirectoryToAdd(self.context, field)
+        return utils.getStartupDirectory(self.context, directory)
+        
+
 
 class QueryCatalogView(BrowserView):
 
@@ -163,6 +171,8 @@
         super(ReferenceBrowserPopup, self).__init__(context, request)
 
         self.at_url = urllib.quote(request.get('at_url'))
+        #XXX very bad way to compute startup
+        self.startup_url = "/".join(self.at_url.split('/')[:-3])
         self.fieldName = request.get('fieldName')
         self.fieldRealName = request.get('fieldRealName')
         self.search_text = request.get('searchValue', '')
@@ -314,3 +324,31 @@
         assert self._updated
         item = aq_base(item)
         return getattr(item, 'Title', '') or getattr(item, 'getId', '')
+
+    def getPermissionToAdd(self):
+        """ return the permission flag to add an item """
+        return self.widget.permission_to_add_item
+
+    def getEditForm(self):
+        """return edit form for Architect object"""
+        urltool = getToolByName(self.context, "portal_url")
+        portal  = urltool.getPortalObject()
+        try:
+            architect = portal.invokeFactory("Architect", "tmp_archi")
+        except:
+            pass
+        archi = getattr(portal, "tmp_archi")
+        #template = getMultiAdapter((self.context, self.request),
+                                #name="architect_edit")
+        #archiEdit = getMultiAdapter((archi, self.request,), IBrowserView)
+        return archi.base_edit()
+    def getEditUrl(self):
+        urltool = getToolByName(self.context, "portal_url")
+        portal  = urltool.getPortalObject()
+        try:
+            architect = portal.invokeFactory("Architect", "tmp_archi")
+        except:
+            pass
+        archi = getattr(portal, "tmp_archi")
+        return archi.absolute_url()+"/edit"        
+        

Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/skins/referencebrowser/referencebrowser.js
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/skins/referencebrowser/referencebrowser.js	(original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/skins/referencebrowser/referencebrowser.js	Wed May 11 14:58:15 2011
@@ -22,10 +22,18 @@
                var fieldname = wrap.find('input[name=fieldName]').attr('value');
                check_referenced_items(fieldname);
                });
+
            },
        onLoad: function() {
            widget_id = this.getTrigger().attr('rel').substring(6);
            disablecurrentrelations(widget_id);
+           var overlay = this.getOverlay()  
+           var wrap = overlay.find('.addeditform');
+           wrap.prepOverlay({
+                     subtype: 'ajax',
+                     filter: '#content>*',
+                     formselector: 'form'
+               });           
        }});
 
   // the breadcrumb-links and the links of the 'tree'-navigati        on
@@ -119,9 +127,27 @@
       refreshOverlay(wrap, srcfilter, '');
       return false;
       });
+      
+   //the edit form
+   jq('form#add').live('click',
+                                           function(event) {
+      var target = jq(this);
+      var src = target.parents('form').attr('action');
+      var wrap = target.parents('.overlaycontent'); 
+      var startup = wrap.find('input[name=startup_directory]').attr('value');      
+      var srcfilter = startup + '/createObject?type_name=Architect #content';
+      pushToHistory(wrap.data('srcfilter'));
+      wrap.data('srcfilter', srcfilter);
+      wrap.load(srcfilter, function() {
+          ploneFormTabbing.initialize();
+          });
+      //refreshOverlay(wrap, srcfilter, '');
+      return false;              
+                });
 
 });
 
+
 function disablecurrentrelations (widget_id) {
    jq('ul#' + widget_id + ' :input').each(
        function (intIndex) {

Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/widget.py
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/widget.py	(original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/branches/livesearch/src/archetypes/referencebrowserwidget/widget.py	Wed May 11 14:58:15 2011
@@ -39,7 +39,10 @@
         'popup_width': 500,
         'popup_height': 550,
         'popup_name': 'popup',
-        'wild_card_search' : False
+        'wild_card_search' : False,
+        'permission_to_add_item' : False,
+        'destination_directory_to_add' : '',
+        'destination_directory_to_add_method' : ''
         })
 
     # for documentation of properties see: README.txt
@@ -75,6 +78,36 @@
 
         return directory
 
+    security.declarePublic('getDestinationDirectoryToAdd')
+    def getDestinationDirectoryToAdd(self, instance, field):
+        """get widget destination directory to add an item
+        """
+        url_tool = instance.restrictedTraverse('@@plone_tools').url()
+        basepath = '/'.join(url_tool.getRelativeContentPath(instance))
+        directory = ''
+        if getattr(self, 'destination_directory_to_add', None):
+            # First check that the method exists and isn't inherited.
+            method = getattr(aq_base(instance), self.startup_directory_method,
+                             False)
+            if method:
+                # Then get the method again, but with acquisition context this
+                # time:
+                method = getattr(instance, self.destination_directory_to_add_method, False)
+                if callable(method):
+                    method = method()
+
+                directory = method
+
+        elif getattr(self, 'destination_directory_to_add', None):
+            directory = self.destination_directory_to_add
+            if not directory.startswith('/'):
+                directory = '/'.join([basepath, directory])
+
+        else:
+            directory = basepath
+
+        return directory
+
     security.declarePublic('getBaseQuery')
     def getBaseQuery(self, instance, field):
         """Return base query to use for content search
@@ -156,5 +189,7 @@
                      'boolean', ReferenceBrowserWidget) 
 registerPropertyType('wild_card_search',
                      'boolean', ReferenceBrowserWidget) 
-                     
+registerPropertyType('permission_to_add',
+                     'boolean', ReferenceBrowserWidget)   
+registerPropertyType('destination_directory_to_add', 'string', ReferenceBrowserWidget)                   
                      

------------------------------------------------------------------------------
Achieve unprecedented app performance and reliability
What every C/C++ and Fortran developer should know.
Learn how Intel has extended the reach of its next-generation tools
to help boost performance applications - inlcuding clusters.
http://p.sf.net/sfu/intel-dev2devmay