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