source: products/SimpleBlog/branches/plone-2.1-Blogging-APIs/Extensions/Install.py @ 1

Last change on this file since 1 was 1, checked in by myroslav, 18 years ago

Building directory structure

File size: 7.0 KB
Line 
1from Products.Archetypes.public import listTypes
2from Products.Archetypes.Extensions.utils import installTypes, install_subskin
3from Products.CMFCore.utils import getToolByName
4from StringIO import StringIO
5from Products.CMFCore.CMFCorePermissions import setDefaultRoles
6
7from Products.SimpleBlog.config import *
8
9from Products.SimpleBlog import MetaWeblogAPI
10from Products.SimpleBlog import BloggerAPI
11from Products.SimpleBlog import MovableTypeAPI
12
13portlets=['here/portlet_simpleblog/macros/portletBlogFull_local', 
14          'here/portlet_simpleblog/macros/portletBlogFull_global',
15          'here/portlet_simpleblog/macros/portletBlogRecent_local',
16          'here/portlet_simpleblog/macros/portletBlogRecent_global']
17
18
19
20
21def install(self):
22
23    out = StringIO()
24
25    installTypes(self, out,
26                 listTypes(PROJECTNAME),
27                 PROJECTNAME)
28
29    install_subskin(self, out, GLOBALS)
30
31    portal = getToolByName(self,'portal_url').getPortalObject()
32
33    if not hasattr(self, 'simpleblog_tool'):
34        addTool = portal.manage_addProduct['SimpleBlog'].manage_addTool
35        addTool(type='SimpleBlog manager')   
36   
37    #register the folderish items in portal_properties/site_properties for folder-contents views etc
38    site_props = getToolByName(self, 'portal_properties').site_properties
39    use_folder_tabs = site_props.getProperty('use_folder_tabs')
40    if not 'Blog' in use_folder_tabs:
41        site_props._updateProperty('use_folder_tabs', tuple(use_folder_tabs) + ('Blog','BlogFolder','BlogEntry'))
42   
43    if not portal.hasProperty('trackback_notification_email'):
44        portal.manage_addProperty('trackback_notification_email', '', 'string')
45   
46    # check for property use_folder_contents. This property seems not to be always there:
47    if not site_props.hasProperty('use_folder_contents'):
48        site_props.manage_addProperty('use_folder_contents', '', 'lines')
49
50    use_folder_contents = site_props.getProperty('use_folder_contents')
51    if not 'Blog' in use_folder_contents:
52        site_props._updateProperty('use_folder_contents', tuple(use_folder_contents) + ('Blog','BlogFolder', 'BlogEntry'))
53 
54    # discussion enabled by default for BlogEntries
55    getToolByName(self, 'portal_types').BlogEntry.allow_discussion=1
56
57    # register 2.0 control panel
58    try:
59        cp=self.portal_controlpanel
60        cp.addAction(id='SimpleBlogSetup',
61                     name='SimpleBlog Setup',
62                     action='string:${portal_url}/prefs_simpleblog_form',
63                     permission='Manage portal',
64                     category='Products',
65                     appId='SimpleBlog',
66                     imageUrl='SimpleBlog/simpleblog_icon.gif',
67                     description='Configure SimpleBlog global settings')
68    except:
69        pass
70
71    from Products.SimpleBlog import SimpleBlogWorkflow
72    reload(SimpleBlogWorkflow)
73
74    # Remove workflows for BlogEntry and BlogFolder
75    wf_tool = getToolByName(self, 'portal_workflow')
76    wf_tool.setChainForPortalTypes( ('Blog', 'BlogEntry','BlogFolder'), []) 
77   
78    add_workflow(self, 'simpleblog_workflow', 'simpleblog_workflow (Workflow for Blog Entries)', ('BlogEntry',), out)
79    wf_tool.setChainForPortalTypes(('Blog','BlogFolder'), 'folder_workflow')
80
81    from Products.SimpleBlog import TrackbackWorkflow
82    reload(TrackbackWorkflow)
83
84    add_workflow(self, 'trackback_workflow', 'trackback_workflow (TrackBack Workflow)', ('TrackBack',), out)
85    wf_tool.setChainForPortalTypes( ('TrackBack'), 'trackback_workflow') 
86
87    # Create an RPCAuth if there is not one already
88    installRPCAuth(self)   
89    RPCAuth = self.simpleblog_tool.findRPCAuth(self)
90   
91    # add the blogger object to the portal's root
92    # Setup the MetaWeblog API
93    portal.metaWeblog = MetaWeblogAPI.MetaWeblogAPI().__of__(self)
94    portal.metaWeblog.setupRPCAuth(RPCAuth)
95   
96    # Setup the Blogger API
97    portal.blogger = BloggerAPI.BloggerAPI().__of__(self)
98    portal.blogger.setupRPCAuth(RPCAuth)   
99   
100    # Setup the MovableTypeAPI API
101    portal.mt = MovableTypeAPI.MovableTypeAPI().__of__(self)
102    portal.mt.setupRPCAuth(RPCAuth)   
103   
104    print >> out, "Successfully installed %s." % PROJECTNAME
105    return out.getvalue()
106
107def add_workflow(self, wf_id, wf_factory_id, types, out):
108    """ add a workflow definition to the portal_workflow tool """
109    wf_tool = self.portal_workflow
110    try:
111        wf_tool.manage_delObjects([wf_id])
112        out.write('Removed existant workflow "%s"\n'%wf_id)
113    except:
114        pass
115    wf_tool.manage_addWorkflow(wf_factory_id, wf_id)
116    if types:
117        wf_tool.setChainForPortalTypes(types, wf_id)
118    out.write('Added workflow "%s"\n'%wf_id)
119
120def installRPCAuth(self):
121    if not hasattr(self, 'RPCAuth'):
122        try:
123            self.manage_addProduct['RPCAuth'].manage_addRPCAuth('RPCAuth')
124        except:
125            raise "An RPCAuth instance could not be created.  Please make sure RPCAuth is installed correctly."
126
127
128def uninstall(self):
129    # remove the references in each folder to our portlet:
130   
131    # this gotta be effective some time
132    # someone's gotta test if this works like it should
133    # commented out for the time being:
134   
135    #portal = getToolByName(self,'portal_url').getPortalObject()
136    #processPortletOld(portal)
137    #processPortletNew(portal)
138    #removeReferences(portal)
139   
140    #remove configlet
141    try:
142        self.portal_controlpanel.unregisterApplication('SimpleBlog')
143    except:
144        pass
145                     
146def removeReferences(obj):
147    for o in obj.contentValues():
148        if o.isPrincipiaFolderish:
149            processPortletOld(o)
150            processPortletNew(o)
151            removeReferences(o)
152
153def processPortletOld(o):
154    if not o.portal_type in ['Blog', 'BlogFolder', 'BlogEntry']:
155        if hasattr(o.aq_base, 'left_slots') or hasattr(o.aq_base, 'right_slots'):
156            new=[]
157            if hasattr(o.aq_base,'left_slots'):
158                for l in o.aq_base.left_slots:
159                    if not l in portlets:
160                        new.append(l)
161                o.left_slots=new
162            new=[]
163            if hasattr(o.aq_base, 'right_slots'):
164                for l in o.aq_base.right_slots:
165                    if not l in portlets:
166                        new.append(l)
167                o.right_slots=new
168
169def processPortletNew(o):
170    if not o.portal_type in ['Blog', 'BlogFolder', 'BlogEntry']:   
171        if hasattr(o.aq_base, 'column_one_portlets') or hasattr(o.aq_base, 'column_two_portlets'):
172            new=[]
173            if hasattr(o.aq_base,'column_one_portlets'):
174                for l in o.aq_base.column_one_portlets:
175                    if not l in portlets:
176                        new.append(l)
177                o.column_one_portlets=new
178            new=[]
179            if hasattr(o.aq_base, 'column_two_portlets'):
180                for l in o.aq_base.column_two_portlets:
181                    if not l in portlets:
182                        new.append(l)
183                o.column_two_portlets=new
184       
185           
Note: See TracBrowser for help on using the repository browser.