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