Tabs -> 4 × spaces
[Plinn.git] / __init__.py
1 # -*- coding: utf-8 -*-
2 #######################################################################################
3 # Plinn - http://plinn.org #
4 # Copyright (C) 2005-2007 Benoît PIN <benoit.pin@ensmp.fr> #
5 # #
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. #
10 # #
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. #
15 # #
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.
21
22
23
24 """
25
26 import exceptions
27
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
34 import MembershipTool
35 import MemberDataTool
36 import GroupsTool
37 import GroupDataTool
38 import RegistrationTool
39 import CalendarTool
40 import AttachmentTool
41 import catalog
42
43 from PloneMisc import IndexIterator, Batch
44 import patch
45
46 from AccessControl import allow_module, allow_class
47
48
49 contentClasses = (File.File, Folder.PlinnFolder, HugePlinnFolder.HugePlinnFolder, Topic.Topic )
50
51 contentConstructors = (File.addFile, Folder.manage_addPlinnFolder, HugePlinnFolder.manage_addHugePlinnFolder, Topic.addTopic)
52
53 tools = ( MembershipTool.MembershipTool
54 , MemberDataTool.MemberDataTool
55 , GroupsTool.GroupsTool
56 , GroupDataTool.GroupDataTool
57 , RegistrationTool.RegistrationTool
58 , CalendarTool.CalendarTool
59 , AttachmentTool.AttachmentTool
60 , catalog.CatalogTool
61 )
62
63 # register files extensions
64 registerFileExtension('ttf', FSFile)
65 registerFileExtension('eot', FSFile)
66 registerFileExtension('cur', FSFile)
67
68 def initialize(registrar) :
69
70 allow_module('quopri')
71 allow_module('Products.Plinn.PloneMisc')
72 allow_class(IndexIterator)
73 allow_class(Batch)
74
75 core_cmf_utils.ContentInit(
76 'Plinn',
77 content_types = contentClasses,
78 permission = AddPortalContent,
79 extra_constructors = contentConstructors,
80 ).initialize(registrar)
81
82 core_cmf_utils.ToolInit('Plinn Tool',
83 tools = tools,
84 icon = 'tool.gif'
85 ).initialize(registrar)
86
87
88
89
90 # Monkey...
91 # all tags are good !
92 validTags = default_cmf_utils.NASTY_TAGS.copy()
93 for tag in validTags.keys() :
94 validTags[tag] = 1
95
96 VALID_TAGS = {'font': 1, 'param' : 1, 'iframe' : 1}
97
98 validTags.update(VALID_TAGS)
99
100 default_cmf_utils.NASTY_TAGS = {}
101 default_cmf_utils.VALID_TAGS.update(validTags)
102
103 # the plinn portal_calendar is a also a "SPECIAL PROVIDER"
104 # TODO: vérifier l'impact
105 # import Products.CMFCore.exportimport.actions
106 # Products.CMFCore.exportimport.actions._SPECIAL_PROVIDERS += ('portal_calendar',)
107
108
109 # monkey-patch de getIcon qui est foirasse dans CMF2.2 :
110 # les icônes ne s'affichent pas correctement dans la ZMI
111 # lorqu'on y accède par un virtual host apache.
112 from urllib import quote
113 from Products.CMFCore.utils import getToolByName
114
115 def getIcon(self, relative_to_portal=0):
116 """
117 Using this method allows the content class
118 creator to grab icons on the fly instead of using a fixed
119 attribute on the class.
120 """
121 ti = self.getTypeInfo()
122 if ti is not None:
123 icon = quote(ti.getIcon())
124 if icon:
125 if relative_to_portal:
126 return icon
127 else:
128 # Relative to REQUEST['BASEPATH1']
129 portal_url = getToolByName( self, 'portal_url' )
130 res = portal_url(relative=1) + '/' + icon
131 while res[:1] == '/':
132 res = res[1:]
133 return res
134 return 'misc_/OFSP/dtmldoc.gif'
135
136 icon = getIcon # For the ZMI
137
138 from Products.CMFCore.DynamicType import DynamicType
139 DynamicType.getIcon = getIcon
140 DynamicType.icon = getIcon