Spaces -> tabs
[Plinn.git] / __init__.py
index 3a01ffc..2fc975a 100755 (executable)
@@ -1,26 +1,26 @@
 # -*- 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.
 
-$Id: __init__.py 1530 2009-07-08 09:19:39Z pin $
-$URL: http://svn.cri.ensmp.fr/svn/Plinn/branches/CMF-2.1/__init__.py $
+
+
 """
 
 import exceptions
@@ -28,6 +28,8 @@ import exceptions
 from Products.CMFCore import utils as core_cmf_utils
 from Products.CMFDefault import utils as default_cmf_utils
 from Products.CMFCore.permissions import AddPortalContent
+from Products.CMFCore.FSFile import FSFile
+from Products.CMFCore.DirectoryView import registerFileExtension
 import File, Folder, HugePlinnFolder, Topic
 import MembershipTool
 import MemberDataTool
@@ -36,11 +38,8 @@ import GroupDataTool
 import RegistrationTool
 import CalendarTool
 import AttachmentTool
-#from shutdown_dispatcher import ZopeShutdownDispatcher
 
 from PloneMisc import IndexIterator, Batch
-from utils import  getCPInfo, popCP
-
 import patch
 
 from AccessControl import allow_module, allow_class
@@ -59,12 +58,10 @@ tools = ( MembershipTool.MembershipTool
                , AttachmentTool.AttachmentTool
                )
 
-methods = {
-'getCPInfo': getCPInfo,
-'getCPInfo__roles__': None,
-'popCP' : popCP,
-'popCP__roles__' : None
-}
+# register files extensions
+registerFileExtension('ttf', FSFile)
+registerFileExtension('eot', FSFile)
+registerFileExtension('cur', FSFile)
 
 def initialize(registrar) :
        
@@ -72,8 +69,6 @@ def initialize(registrar) :
        allow_module('Products.Plinn.PloneMisc')
        allow_class(IndexIterator)
        allow_class(Batch)
-       app = registrar._ProductContext__app
-       #ZopeShutdownDispatcher(registrar._ProductContext__app)
        
        core_cmf_utils.ContentInit(
        'Plinn',
@@ -96,14 +91,48 @@ validTags = default_cmf_utils.NASTY_TAGS.copy()
 for tag in validTags.keys() :
        validTags[tag] = 1
 
-VALID_TAGS = {'font': 1}
+VALID_TAGS = {'font': 1, 'param' : 1, 'iframe' : 1}
 
 validTags.update(VALID_TAGS)
 
 default_cmf_utils.NASTY_TAGS = {}
 default_cmf_utils.VALID_TAGS.update(validTags)
 
-# TODO : vérifier l'impact.
-# # the plinn portal_calendar is a also a "SPECIAL PROVIDER"
+# the plinn portal_calendar is a also a "SPECIAL PROVIDER"
+# TODO: vérifier l'impact
 # import Products.CMFCore.exportimport.actions
 # Products.CMFCore.exportimport.actions._SPECIAL_PROVIDERS += ('portal_calendar',)
+
+
+# monkey-patch de getIcon qui est foirasse dans CMF2.2 : 
+# les icônes ne s'affichent pas correctement dans la ZMI
+# lorqu'on y accède par un virtual host apache.
+from urllib import quote
+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
+
+from Products.CMFCore.DynamicType import DynamicType
+DynamicType.getIcon = getIcon
+DynamicType.icon = getIcon