1 # -*- coding: utf-8 -*-
2 #######################################################################################
3 # Plinn - http://plinn.org #
4 # Copyright (C) 2005-2007 Benoît PIN <benoit.pin@ensmp.fr> #
6 # This program is free software; you can redistribute it and/or #
7 # modify it under the terms of the GNU General Public License #
8 # as published by the Free Software Foundation; either version 2 #
9 # of the License, or (at your option) any later version. #
11 # This program is distributed in the hope that it will be useful, #
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
14 # GNU General Public License for more details. #
16 # You should have received a copy of the GNU General Public License #
17 # along with this program; if not, write to the Free Software #
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #
19 #######################################################################################
20 """ Plinn implementation of CMFCore.
28 from Products
.CMFCore
import utils
as core_cmf_utils
29 from Products
.CMFDefault
import utils
as default_cmf_utils
30 from Products
.CMFCore
.permissions
import AddPortalContent
31 from Products
.CMFCore
.FSFile
import FSFile
32 from Products
.CMFCore
.DirectoryView
import registerFileExtension
33 import File
, Folder
, HugePlinnFolder
, Topic
38 import RegistrationTool
47 from PloneMisc
import IndexIterator
, Batch
50 from AccessControl
import allow_module
, allow_class
53 contentClasses
= (File
.File
, Folder
.PlinnFolder
, HugePlinnFolder
.HugePlinnFolder
, Topic
.Topic
)
55 contentConstructors
= (File
.addFile
, Folder
.manage_addPlinnFolder
, HugePlinnFolder
.manage_addHugePlinnFolder
, Topic
.addTopic
)
57 tools
= ( MembershipTool
.MembershipTool
58 , MemberDataTool
.MemberDataTool
59 , GroupsTool
.GroupsTool
60 , GroupDataTool
.GroupDataTool
61 , RegistrationTool
.RegistrationTool
62 , CalendarTool
.CalendarTool
63 , AttachmentTool
.AttachmentTool
66 tools
+= (catalog
.CatalogTool
,)
68 # register files extensions
69 registerFileExtension('ttf', FSFile
)
70 registerFileExtension('eot', FSFile
)
71 registerFileExtension('cur', FSFile
)
73 def initialize(registrar
) :
75 allow_module('quopri')
76 allow_module('Products.Plinn.PloneMisc')
77 allow_class(IndexIterator
)
80 core_cmf_utils
.ContentInit(
82 content_types
= contentClasses
,
83 permission
= AddPortalContent
,
84 extra_constructors
= contentConstructors
,
85 ).initialize(registrar
)
87 core_cmf_utils
.ToolInit('Plinn Tool',
90 ).initialize(registrar
)
97 validTags
= default_cmf_utils
.NASTY_TAGS
.copy()
98 for tag
in validTags
.keys() :
101 VALID_TAGS
= {'font': 1, 'param' : 1, 'iframe' : 1}
103 validTags
.update(VALID_TAGS
)
105 default_cmf_utils
.NASTY_TAGS
= {}
106 default_cmf_utils
.VALID_TAGS
.update(validTags
)
108 # the plinn portal_calendar is a also a "SPECIAL PROVIDER"
109 # TODO: vérifier l'impact
110 # import Products.CMFCore.exportimport.actions
111 # Products.CMFCore.exportimport.actions._SPECIAL_PROVIDERS += ('portal_calendar',)
114 # monkey-patch de getIcon qui est foirasse dans CMF2.2 :
115 # les icônes ne s'affichent pas correctement dans la ZMI
116 # lorqu'on y accède par un virtual host apache.
117 from urllib
import quote
118 from Products
.CMFCore
.utils
import getToolByName
120 def getIcon(self
, relative_to_portal
=0):
122 Using this method allows the content class
123 creator to grab icons on the fly instead of using a fixed
124 attribute on the class.
126 ti
= self
.getTypeInfo()
128 icon
= quote(ti
.getIcon())
130 if relative_to_portal
:
133 # Relative to REQUEST['BASEPATH1']
134 portal_url
= getToolByName( self
, 'portal_url' )
135 res
= portal_url(relative
=1) + '/' + icon
136 while res
[:1] == '/':
139 return 'misc_/OFSP/dtmldoc.gif'
141 icon
= getIcon
# For the ZMI
143 from Products
.CMFCore
.DynamicType
import DynamicType
144 DynamicType
.getIcon
= getIcon
145 DynamicType
.icon
= getIcon