Implémentation du déplacement d'une sélection au delà de la position du dernier élément.
[Plinn.git] / __init__.py
index bd9fe3e..52eaef5 100755 (executable)
@@ -1,21 +1,21 @@
 # -*- coding: utf-8 -*-
 #######################################################################################
 # -*- coding: utf-8 -*-
 #######################################################################################
-#      Plinn - http://plinn.org                                                                                                                  #
-#      Copyright (C) 2005-2007  Benoît PIN <benoit.pin@ensmp.fr>                                                #
-#                                                                                                                                                                        #
-#      This program is free software; you can redistribute it and/or                                     #
-#      modify it under the terms of the GNU General Public License                                               #
-#      as published by the Free Software Foundation; either version 2                                    #
-#      of the License, or (at your option) any later version.                                                    #
-#                                                                                                                                                                        #
-#      This program is distributed in the hope that it will be useful,                                   #
-#      but WITHOUT ANY WARRANTY; without even the implied warranty of                                    #
-#      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                     #
-#      GNU General Public License for more details.                                                                      #
-#                                                                                                                                                                        #
-#      You should have received a copy of the GNU General Public License                                 #
-#      along with this program; if not, write to the Free Software                                               #
-#      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.   #
+#   Plinn - http://plinn.org                                                          #
+#   Copyright (C) 2005-2007  Benoît PIN <benoit.pin@ensmp.fr>                         #
+#                                                                                     #
+#   This program is free software; you can redistribute it and/or                     #
+#   modify it under the terms of the GNU General Public License                       #
+#   as published by the Free Software Foundation; either version 2                    #
+#   of the License, or (at your option) any later version.                            #
+#                                                                                     #
+#   This program is distributed in the hope that it will be useful,                   #
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of                    #
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                     #
+#   GNU General Public License for more details.                                      #
+#                                                                                     #
+#   You should have received a copy of the GNU General Public License                 #
+#   along with this program; if not, write to the Free Software                       #
+#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.   #
 #######################################################################################
 """ Plinn implementation of CMFCore.
 
 #######################################################################################
 """ Plinn implementation of CMFCore.
 
@@ -38,6 +38,11 @@ import GroupDataTool
 import RegistrationTool
 import CalendarTool
 import AttachmentTool
 import RegistrationTool
 import CalendarTool
 import AttachmentTool
+try :
+    import catalog
+    __solr_ok = True
+except ImportError :
+    __solr_ok = False
 
 from PloneMisc import IndexIterator, Batch
 import patch
 
 from PloneMisc import IndexIterator, Batch
 import patch
@@ -50,52 +55,49 @@ contentClasses = (File.File, Folder.PlinnFolder, HugePlinnFolder.HugePlinnFolder
 contentConstructors = (File.addFile, Folder.manage_addPlinnFolder, HugePlinnFolder.manage_addHugePlinnFolder, Topic.addTopic)
 
 tools = ( MembershipTool.MembershipTool
 contentConstructors = (File.addFile, Folder.manage_addPlinnFolder, HugePlinnFolder.manage_addHugePlinnFolder, Topic.addTopic)
 
 tools = ( MembershipTool.MembershipTool
-               , MemberDataTool.MemberDataTool
-               , GroupsTool.GroupsTool
-               , GroupDataTool.GroupDataTool
-               , RegistrationTool.RegistrationTool
-               , CalendarTool.CalendarTool
-               , AttachmentTool.AttachmentTool
-               )
-
-# register font extensions
+        , MemberDataTool.MemberDataTool
+        , GroupsTool.GroupsTool
+        , GroupDataTool.GroupDataTool
+        , RegistrationTool.RegistrationTool
+        , CalendarTool.CalendarTool
+        , AttachmentTool.AttachmentTool
+        )
+if __solr_ok :
+    tools += (catalog.CatalogTool,)
+
+# register files extensions
 registerFileExtension('ttf', FSFile)
 registerFileExtension('eot', FSFile)
 registerFileExtension('ttf', FSFile)
 registerFileExtension('eot', FSFile)
+registerFileExtension('cur', FSFile)
 
 def initialize(registrar) :
 
 def initialize(registrar) :
-       
-       allow_module('quopri')
-       allow_module('Products.Plinn.PloneMisc')
-       allow_class(IndexIterator)
-       allow_class(Batch)
-       
-       core_cmf_utils.ContentInit(
-       'Plinn',
-       content_types = contentClasses,
-       permission = AddPortalContent,
-       extra_constructors = contentConstructors,
-       ).initialize(registrar)
-       
-       core_cmf_utils.ToolInit('Plinn Tool',
-                                       tools = tools,
-                                       icon = 'tool.gif'
-                                       ).initialize(registrar)
-       
-       
+    
+    allow_module('quopri')
+    allow_module('Products.Plinn.PloneMisc')
+    allow_class(IndexIterator)
+    allow_class(Batch)
+    
+    core_cmf_utils.ContentInit(
+    'Plinn',
+    content_types = contentClasses,
+    permission = AddPortalContent,
+    extra_constructors = contentConstructors,
+    ).initialize(registrar)
+    
+    core_cmf_utils.ToolInit('Plinn Tool',
+                    tools = tools,
+                    icon = 'tool.gif'
+                    ).initialize(registrar)
+    
+    
 
 
 # Monkey...
 # all tags are good !
 
 
 # Monkey...
 # all tags are good !
-validTags = default_cmf_utils.NASTY_TAGS.copy()
-for tag in validTags.keys() :
-       validTags[tag] = 1
-
-VALID_TAGS = {'font': 1, 'param' : 1, 'iframe' : 1}
-
-validTags.update(VALID_TAGS)
-
+class YesDict(dict):
+    def has_key(self, k) : return True
 default_cmf_utils.NASTY_TAGS = {}
 default_cmf_utils.NASTY_TAGS = {}
-default_cmf_utils.VALID_TAGS.update(validTags)
+default_cmf_utils.VALID_TAGS = YesDict()
 
 # the plinn portal_calendar is a also a "SPECIAL PROVIDER"
 # TODO: vérifier l'impact
 
 # the plinn portal_calendar is a also a "SPECIAL PROVIDER"
 # TODO: vérifier l'impact
@@ -110,27 +112,27 @@ from urllib import quote
 from Products.CMFCore.utils import getToolByName
 
 def getIcon(self, relative_to_portal=0):
 from Products.CMFCore.utils import getToolByName
 
 def getIcon(self, relative_to_portal=0):
-       """
-       Using this method allows the content class
-       creator to grab icons on the fly instead of using a fixed
-       attribute on the class.
-       """
-       ti = self.getTypeInfo()
-       if ti is not None:
-               icon = quote(ti.getIcon())
-               if icon:
-                       if relative_to_portal:
-                               return icon
-                       else:
-                               # Relative to REQUEST['BASEPATH1']
-                               portal_url = getToolByName( self, 'portal_url' )
-                               res = portal_url(relative=1) + '/' + icon
-                               while res[:1] == '/':
-                                       res = res[1:]
-                               return res
-       return 'misc_/OFSP/dtmldoc.gif'
-
-icon = getIcon # For the ZMI
+    """
+    Using this method allows the content class
+    creator to grab icons on the fly instead of using a fixed
+    attribute on the class.
+    """
+    ti = self.getTypeInfo()
+    if ti is not None:
+        icon = quote(ti.getIcon())
+        if icon:
+            if relative_to_portal:
+                return icon
+            else:
+                # Relative to REQUEST['BASEPATH1']
+                portal_url = getToolByName( self, 'portal_url' )
+                res = portal_url(relative=1) + '/' + icon
+                while res[:1] == '/':
+                    res = res[1:]
+                return res
+    return 'misc_/OFSP/dtmldoc.gif'
+
+icon = getIcon  # For the ZMI
 
 from Products.CMFCore.DynamicType import DynamicType
 DynamicType.getIcon = getIcon
 
 from Products.CMFCore.DynamicType import DynamicType
 DynamicType.getIcon = getIcon