NCCOOS Trac Projects: Top | Web | Platforms | Processing | Viz | Sprints | Sandbox | (Wind)

root/NCCOOSSite/trunk/NCCOOSite/Extensions/Install.py

Revision 13 (checked in by cbc, 18 years ago)

Initial import

Line 
1 import string
2 from StringIO import StringIO
3 from zLOG import LOG, INFO
4 from Products.CMFCore.utils import getToolByName
5 from Products.NCCOOSSite.config import *
6 from Products.NCCOOSSite.Extensions.utils import *
7
8 CHECKED_MESSAGE = "The base installation checkings completed."
9
10 def prepareInstallation(portal, pp, product, out):
11     checkSuccessInstall(product)
12     uninstallOtherSkinProducts(portal)
13     if not ('uninstall_properties' in pp.objectIds()) :
14         pp.addPropertySheet(id='uninstall_properties', title= 'uninstall_properties')
15         print >> out, "Created 'portal_properties.uninstall_properties' PropertySheet (UP) for backup purpose"
16
17 def checkSuccessInstall(product):
18     # Check for successfully completed 1 installation step
19     transcript = getattr(product,'transcript',None)
20     if transcript:
21         msg = str(transcript[0]['msg'])
22         if msg.find(CHECKED_MESSAGE) < 0 :
23             product.log("First part installation procedure not completed - installation terminated.")
24             raise
25
26 def uninstallOtherSkinProducts(portal):
27     qi=getToolByName(portal, 'portal_quickinstaller', None)
28     if not qi:
29         raise Exception("Can't work without QuickInstaller tool.")
30     # Get installed products
31     installed_products = [getattr(qi, p_dict['id']) \
32                           for p_dict in qi.listInstalledProducts()
33                           if p_dict['id'] != PRODUCT_NAME]
34     seek_str = "%s generated product" % GENERATOR_PRODUCT
35     installed_skin_products = []
36     # Looking for installed skin-products
37     for p in installed_products:
38         transcript = p.getTranscriptAsText()
39         if transcript.find(seek_str) >= 0 :
40             installed_skin_products.append(p.getId())
41     # Uninstall found skin-products
42     if installed_skin_products:
43         qi.uninstallProducts(products=installed_skin_products)
44
45 def install(self):
46     # Checking base condition for installation
47     skinsTool = getToolByName(self, 'portal_skins')
48     # Checking for BASE_SKIN_NAME presenting in portal
49     skin_names = skinsTool.getSkinSelections()
50     if not BASE_SKIN_NAME in skin_names:
51         raise AttributeError("Impossible installation without %s skin." % BASE_SKIN_NAME)
52     # Checking for presenting lower_SKIN_NAME directory in portal skins
53     lower_SKIN_NAME = string.lower(SKIN_NAME)
54     if lower_SKIN_NAME in skinsTool.objectIds():
55         raise AttributeError("%s skin layer already exist in portal skins. Installation Impossible." % lower_SKIN_NAME)
56     return CHECKED_MESSAGE
57
58 # For prevent quickInstaller's intervention in uninstall process - use afterInstall
59 def afterInstall(self,product,reinstall):
60     out=StringIO()
61     # get all needed tools and some portal's core objects
62     portal = getToolByName(self, 'portal_url').getPortalObject()
63     pp = getToolByName(portal, 'portal_properties')
64     portal_css = getToolByName(portal, 'portal_css', None)
65     portal_js = getToolByName(portal, 'portal_javascripts', None)
66     # Make main prepare procedures
67     prepareInstallation(portal, pp, product, out)
68     pp_up = pp.uninstall_properties
69     # Install skin
70     installSkin(portal, pp_up, out)
71     # Register css resources
72     if portal_css and DOES_COSTOMIZE_CSS:
73         registerResource(pp_up, portal_css, portal_css.registerStylesheet, out \
74                         ,CSS_LIST, SKIN_CSS_REGDATA, 'q_registered_css', CSS_REG_PROPS)
75         print >> out, "Completed tuning CSS registry for new skin needs."
76     # Register js resources
77     if portal_js and DOES_COSTOMIZE_JS:
78         registerResource(pp_up, portal_js, portal_js.registerScript, out \
79                         ,JS_LIST, SKIN_JS_REGDATA, 'q_registered_js', JS_REG_PROPS)#---installJS---
80         print >> out, "Completed tuning JS registry for new skin needs."
81     # Customize slots   
82     if LEFT_SLOTS or RIGHT_SLOTS:
83         customizeSlots(portal, pp_up, out)
84     # Import object(s) to portal
85     if checkIfImport():
86         res_import = performImportToPortal(portal)
87         print >> out, res_import
88     # FINAL customization call additional functions from config
89     if FINAL_CUSTOMIZATION_FUNCTIONS:
90         dummy = [func(portal, out) for func in FINAL_CUSTOMIZATION_FUNCTIONS]
91     print >> out, "%s generated product." % GENERATOR_PRODUCT
92     print >> out, '=== Installation successfully completed. ==='
93     product.log(out.getvalue())
94     product._p_changed = 1 #XXX:NEED for stable writing 'out' log to qi on afterinstallation.
95     return out.getvalue()
96
97 def uninstall(self):
98     # get all needed tools and some portal's core objects
99     portal = self.portal_url.getPortalObject()
100     skinsTool = getToolByName(portal, 'portal_skins')
101     pp = getToolByName(portal, 'portal_properties')
102     portal_css = getToolByName(portal, 'portal_css', None)
103     portal_js = getToolByName(portal, 'portal_javascripts', None)
104     # Get all properies, saving during installation, for uninstalling
105     actual_skin_name = getProperty(pp, 'uninstall_properties', 'q_actual_skin_name',default=SKIN_NAME)
106     initial_skin = getProperty(pp, 'uninstall_properties', 'q_default_skin',default="")
107     original_css_list = getProperty(pp, 'uninstall_properties', 'q_registered_css')
108     original_js_list = getProperty(pp, 'uninstall_properties', 'q_registered_js')
109     orig_left_slots = getProperty(pp, 'uninstall_properties','q_left_slots')
110     orig_right_slots = getProperty(pp, 'uninstall_properties','q_right_slots')
111     # Remove 'uninstall_properties' from portal_properties
112     if 'uninstall_properties' in pp.objectIds() :
113         pp.manage_delObjects(ids=['uninstall_properties',])
114     # Uninstall skin
115     uninstallSkin(skinsTool, actual_skin_name, initial_skin)
116     # Unregister skin's CSS-es from portal_css. Only for Plone 2.1+
117     if portal_css and DOES_COSTOMIZE_CSS:
118         uninstallResource(portal_css, original_css_list, CSS_LIST, portal_css.registerStylesheet)
119     # Unregister skin's JS-s from portal_javascripts. Only for Plone 2.1+
120     if portal_js and DOES_COSTOMIZE_JS:
121         uninstallResource(portal_js, original_js_list, JS_LIST, portal_js.registerScript)
122     # Return site's column slots list unless Skin product installation
123     if orig_left_slots:
124         portal.left_slots = tuple(orig_left_slots)
125     if orig_right_slots:
126         portal.right_slots = tuple(orig_right_slots)
Note: See TracBrowser for help on using the browser.