source: products/SimpleBlog/tags/1.3.5qg/Extensions/Install.py @ 2743

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

Building directory structure

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