source: products/qClickTrackingTool/trunk/Extensions/Install.py @ 2111

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

Building directory structure

File size: 6.5 KB
Line 
1from Products.Archetypes.public import listTypes
2from Products.Archetypes.Extensions.utils import installTypes, install_subskin
3from Products.CMFCore.WorkflowTool import addWorkflowFactory
4from Products.CMFFormController.FormAction import FormActionKey
5from Products.CMFCore import CMFCorePermissions
6from Products.CMFCore.utils import getToolByName
7from Products.CMFDefault.Link import Link
8from StringIO import StringIO
9
10from Products.qClickTrackingTool.ClickTracker import ClickTracker
11from Products.qClickTrackingTool.Workflow import createWorkflow
12from Products.qClickTrackingTool.ClickTracker import ClickTracker
13from Products.qClickTrackingTool.config import *
14
15
16def write_object_properties(self, obj, out):
17    properties = {}
18    pc = getToolByName(self, 'portal_clicktracker')
19    if getObjectsType(self, pc, out) == 'Link':
20        properties['id'] = obj.id
21        properties['title'] = obj.title
22        properties['description'] = obj.description
23        properties['remote_url'] = obj.getRemoteUrl()
24    else:
25        properties['id'] = obj.id
26        properties['title'] = obj.Title()
27        properties['description'] = obj.Description()
28        properties['remote_url'] = obj.getRemoteUrl()
29
30    return properties
31
32def update_object(self, obj, properties, out):
33    obj.update(title       = properties['title'],
34               description = properties['description'],
35               url         = properties['remote_url'])
36
37def convert_objects(self, container, new_type, out):
38    pt = getToolByName(self, 'portal_types')
39    obj_type = getObjectsType(self, container, out)
40    if (obj_type and obj_type == 'Link') or (obj_type and obj_type == 'ATLink'):
41        for o in listFolderItems(container)[:]:
42            prop = write_object_properties(self, o, out)
43            container._delObject(o.id)
44            fti = pt.getTypeInfo('ClickTracker')
45            fti.manage_changeProperties(allowed_content_types = (new_type,))
46            container.invokeFactory(id = prop['id'], type_name=new_type)
47            campaign=getattr(container, prop['id'])
48            update_object(self, campaign, prop, out)
49
50def listFolderItems(container):
51    res = []
52    ids = container.objectIds()
53    for ob_id in ids:
54        res.append(container._getOb(ob_id))
55    return res
56
57def getObjectsType(self, container, out):
58    pt = getToolByName(self, 'portal_types')
59    ids = container.objectIds()
60    if ids:
61        obj = container._getOb(ids[0])
62        type_obj = obj.meta_type
63    else:
64        print >> out, "Portal click tracker is empty..."
65        type_obj = None
66
67    return type_obj
68
69def setPortalFactoryType(self, out,):
70    pf=getToolByName(self, 'portal_factory')
71    ftypes=list(pf.getFactoryTypes())
72    if TYPE_NAME not in ftypes:
73        ftypes.append(TYPE_NAME)
74        pf.manage_setPortalFactoryTypes(listOfTypeIds=ftypes)
75    else:
76        print >>out, " %s type already  in portal_factory..." %TYPE_TITLE
77
78    print >> out, "Set %s type to portal_factory" %TYPE_TITLE
79
80def install_tool(self, out, tool='ClickTracker'):
81    portal=getToolByName(self, 'portal_url').getPortalObject()
82    pt = getToolByName(self, 'portal_types')
83    if not TOOLID in portal.objectIds():
84        addPloneTool=portal.manage_addProduct[PROJECTNAME].manage_addTool(tool)
85    else:
86        qi=getToolByName(self, 'portal_quickinstaller')
87        p=qi._getOb(PROJECTNAME, None)
88        oldVersion=p.getInstalledVersion()
89        newVersion= qi.getProductVersion(PROJECTNAME)
90        pc = getToolByName(self, 'portal_clicktracker')
91        if oldVersion<newVersion:
92            convert_objects(self, pc, TYPE_NAME, out)
93
94def customizing_FormController(self, out):
95    fc = getToolByName(self, 'portal_form_controller')
96    fc.addFormAction('validate_integrity',
97                     'success',
98                     TYPE_NAME,
99                      None,
100                     'redirect_to',
101                     'string:$portal_url/portal_clicktracker/portal_clicktracker_view')
102def install_configlet(self, out):
103    control_panel=getToolByName(self,'portal_controlpanel')
104    control_panel.registerConfiglet(PROJECTNAME,
105                                    'Click Tracking Tool',
106                                    'string:${portal_url}/%s/portal_clicktracker_view' % TOOLID,
107                                     permission=MANAGE_CLICKTRACKINGTOOL_PERMISSION,
108                                     imageUrl='link_icon.gif',
109                                     category='Products',
110                                    )
111    print >> out, "Installed configlet.,,"
112
113def install_workflow(self, out):
114    portal_workflow=getToolByName(self, 'portal_workflow')
115
116    #register the workflow in the system
117    addWorkflowFactory(createWorkflow,
118                   id=C_WORKFLOWID,
119                   title='Campaign Workflow')
120
121    portal_workflow.manage_addWorkflow(id=C_WORKFLOWID, workflow_type=C_WORKFLOWID +' (Campaign Workflow)') 
122    #set workflow for Campaign
123    portal_workflow.setChainForPortalTypes( (TYPE_NAME), C_WORKFLOWID)
124    print >> out, "Installed workflow..."
125
126def fix_permissions(self, out):
127    portal_workflow=getToolByName(self, 'portal_workflow')
128    #remove worklow from tool
129    portal_workflow.setChainForPortalTypes( ('ClickTracker (qClickTrackingTool)'), '')
130    #set permission for portal_clicktracker
131    pc=getToolByName(self, 'portal_clicktracker')
132    pc.manage_permission(CMFCorePermissions.ListFolderContents, ('Manager', 'Owner', 'Anonymous'), 1)
133
134    print >> out, "Click Tracking Tool Permissions fixed..."
135
136def remove_configlet(self, out):
137    # unregister Configlet
138    control_panel=getToolByName(self,'portal_controlpanel')
139    control_panel.unregisterConfiglet(PROJECTNAME) 
140
141def remove_FormControllerAction(self, out):
142    fc = getToolByName(self, 'portal_form_controller')
143    if fc.actions.match('validate_integrity', 'success', TYPE_NAME, None):
144        fc.actions.delete(FormActionKey('validate_integrity', 'success', TYPE_NAME, None, fc))
145
146def install(self):
147
148    out=StringIO();
149
150    pt = getToolByName(self, 'portal_types')
151    installTypes(self, out, listTypes(PROJECTNAME), PROJECTNAME)
152    setPortalFactoryType(self, out)
153    install_subskin(self, out, GLOBALS)
154    install_workflow(self, out)
155    install_tool(self, out)
156    install_configlet(self, out)
157    fix_permissions(self, out)
158    customizing_FormController(self, out)
159
160    print >> out, "Successfully installed %s." % PROJECTNAME
161    return out.getvalue()
162
163def uninstall(self):
164    out = StringIO()
165
166    remove_configlet(self, out)
167    remove_FormControllerAction(self, out)
168
169    print >> out, "Successfully uninstalled %s." % PROJECTNAME
170    return out.getvalue()
Note: See TracBrowser for help on using the repository browser.