source: products/qSEOptimizer/branches/additional-keywords/Extensions/Install.py @ 1

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

Building directory structure

File size: 7.3 KB
Line 
1import string
2from App.Common import package_home
3from os.path import exists as path_exists, join as path_join
4from cStringIO import StringIO
5from Products.CMFCore.utils import getToolByName
6from Products.CMFCore.DirectoryView import addDirectoryViews
7from Products.qSEOptimizer import qSEO_globals
8from OFS.ObjectManager import BadRequestException
9
10from Products.qSEOptimizer.config import *
11
12try:
13    #for Plone-2.5 and higher
14    from Products.CMFCore.permissions import ManagePortal
15except ImportError:
16    from Products.CMFCore.CMFCorePermissions import ManagePortal
17
18configlets = ({'id':'qSEOptimizer',
19    'name':'Search Engine Optimizer',
20    'action':'string:${portal_url}/prefs_qseo_setup_form',
21    'condition':'',
22    'category':'Products',
23    'visible':1,
24    'appId':'qSEOptimizer',
25    'permission':ManagePortal,
26    'imageUrl':'search_icon.gif'},)
27
28qSEO_CONTENT = ['File','Document','News Item','BlogEntry']
29qSEO_FOLDER  = []
30qSEO_TYPES   = qSEO_CONTENT + qSEO_FOLDER
31try:
32    True
33except:
34    True = 1
35    False = 0
36
37def addPropertySheet(self, out):
38    """ Add seo_properties property sheet to portal_properties and some needed field to it """
39    portal_props = getToolByName(self, 'portal_properties')
40    if not hasattr(portal_props, PROPERTY_SHEET):
41        portal_props.addPropertySheet(PROPERTY_SHEET, SHEET_TITLE)
42        out.write('Added %s property sheet to portal_properties\n' % PROPERTY_SHEET)
43    else:
44        out.write('Skipped adding %s property sheet to portal_properties\n' % PROPERTY_SHEET)
45    sheet = getattr(portal_props, PROPERTY_SHEET)
46
47    if not sheet.hasProperty('stop_words'):
48        sheet._setProperty('stop_words', STOP_WORDS, 'lines')
49        out.write("Added 'stop_words' property field to %s property sheet\n" % PROPERTY_SHEET)
50
51    if not sheet.hasProperty('fields'):
52        sheet._setProperty('fields', FIELDS, 'lines')
53        out.write("Added 'fields' property field to %s property sheet\n" % PROPERTY_SHEET)
54
55    if not sheet.hasProperty('additional_keywords'):
56        sheet._setProperty('additional_keywords', [], 'lines')
57        out.write("Added 'additional_keywords' property field to %s property sheet\n" % PROPERTY_SHEET)
58
59def setupSkin(self, out, layers):
60    """Setup skins"""
61    skinstool=getToolByName(self, 'portal_skins')
62    addDirectoryViews(skinstool, 'skins', qSEO_globals)
63
64    for skin in skinstool.getSkinSelections():
65        modified = False
66        path = skinstool.getSkinPath(skin)
67        path = map( string.strip, string.split( path,',' ) )
68        for layer in layers:
69            if not layer in path:
70                try:
71                    path.insert(path.index('custom')+1, layer )
72                except ValueError:
73                    path.append(layer)
74                modified = True
75                out.write('  Layer %s sucessfully installed into skin %s.\n' % (layer,skin))
76            else:
77                out.write('  Layer %s was already installed into skin %s.\n' % (layer,skin))
78        if modified:
79            path = string.join( path, ', ' )
80            skinstool.addSkinSelection( skin, path )
81
82def removeSkin(self, layer):
83    """Remove layers"""
84    skinstool = getToolByName(self, 'portal_skins')
85    for skinName in skinstool.getSkinSelections():
86        original_path = skinstool.getSkinPath(skinName)
87        original_path = [l.strip() for l in original_path.split(',')]
88        new_path= []
89        for l in original_path:
90            if (l == layer) or (l.startswith(layer+'/')):
91                continue
92            new_path.append(l)
93        skinstool.addSkinSelection(skinName, ','.join(new_path))
94       
95def setupActions(self, out):
96    # And now update the relevant portal_type actions
97    out.write("Inspecting portal_types\n")
98    tool = getToolByName(self, 'portal_types')
99    for ptype in tool.objectValues():
100        if ptype.getId() in qSEO_TYPES:
101            #add the action for viewing versioning
102            try:
103                #for Plone-2.5 and higher
104                acts = filter(lambda x: x.id == 'seo_properties', ptype.listActions())
105                action = acts and acts[0] or None
106            except AttributeError:
107                action = ptype.getActionById('seo_properties', default=None )
108
109
110            if action is None:
111                out.write( '  Added SEO Properties tab for %s\n' % ptype.getId() )
112                ptype.addAction( 'seo_properties',
113                                 'SEO Properties',
114                                 'string:${object_url}/qseo_properties_edit_form',
115                                 '',
116                                 'Modify portal content',
117                                 'object',
118                                 visible=1
119                               )
120def removeActions(self):
121    # And now update the relevant portal_type actions
122    tool = getToolByName(self, 'portal_types')
123    for ptype in tool.objectValues():
124        if ptype.getId() in qSEO_TYPES:
125            #delet the action for viewing versioning
126            try:
127                #for Plone-2.5 and higher
128                acts = filter(lambda x: x.id == 'seo_properties', ptype.listActions())
129                action = acts and acts[0] or None
130            except AttributeError:
131                action = ptype.getActionById('seo_properties', default=None )
132            if action != None:
133                acts = list(ptype.listActions())
134                ptype.deleteActions([acts.index(a) for a in acts if a.getId()=='seo_properties'])
135
136def install(self):
137    """Install product"""
138    out = StringIO()
139    Layers =[]
140    mtool = getToolByName(self, 'portal_migration')
141    plone_version = mtool.getFileSystemVersion()
142    product_path = package_home(qSEO_globals)
143    versioned_skin = path_join(product_path, 'skins','qSEOptimizer', plone_version)
144    #add exposeDCMetaTags property to Plone 2.0.x
145    props = getToolByName(self, 'portal_properties').site_properties
146    if not hasattr(props, 'exposeDCMetaTags'):
147            props._setProperty('exposeDCMetaTags', True, 'boolean')
148
149    addPropertySheet(self, out)
150
151    Layers.append('qSEOptimizer')
152    out.write('  Searching for %s... ' % versioned_skin)
153    if path_exists(versioned_skin):
154        out.write('found.\n')
155        Layers.append('qSEOptimizer/%s' % plone_version)
156    elif str(plone_version) < "3":
157        out.write("not found.\nLimited functionality mode. Upgrade"
158                  "qSEOptimizer product or report to support@quintagroup.com"
159                  "if uprade not available.\n\n")
160    out.write('Call setupSkin... \n')
161    setupSkin(self, out, Layers)
162
163    out.write('Call setupActions... \n')
164    setupActions(self, out)
165
166    configTool = getToolByName(self, 'portal_controlpanel', None)
167    if configTool:
168        for conf in configlets:
169            configTool.registerConfiglet(**conf)
170            out.write('Added configlet %s\n' % conf['id'])
171
172    return out.getvalue()
173
174def uninstall(self):
175    """ Uninstall Products """
176    out = StringIO()
177
178    removeSkin(self, 'qSEOptimizer')
179    removeActions(self)
180
181    configTool = getToolByName(self, 'portal_controlpanel', None)
182    if configTool:
183        for conf in configlets:
184            try:
185                configTool.unregisterConfiglet(conf['id'])
186            except BadRequestException,KeyError:
187                portal_icons = getToolByName(self,'portal_actionicons')
188                portal_icons.manage_removeActionIcon(conf['category'],conf['id'])
189            out.write('Removed configlet %s\n' % conf['id'])
190
191    return 'qSEOptimizer succesfully removed'
Note: See TracBrowser for help on using the repository browser.