Ignore:
Timestamp:
Jan 12, 2006 2:16:30 PM (18 years ago)
Author:
fenix
Message:

added new migration procedure, remove Campaign type and added new one

File:
1 edited

Legend:

Unmodified
Added
Removed
  • qClickTrackingTool/branches/qClickTrackingTool-0.3.2_me/Extensions/Install.py

    r175 r181  
    22from Products.Archetypes.Extensions.utils import installTypes, install_subskin  
    33from Products.CMFCore.WorkflowTool import addWorkflowFactory 
    4 from Products.CMFFormController.FormAction import FormActionKey 
    54from Products.CMFCore import CMFCorePermissions  
    65from Products.CMFCore.utils import getToolByName 
     
    1413 
    1514 
    16 def write_object_properties(self, obj, out): 
     15def isSwitchedToATCT(self): 
     16    pt = getToolByName(self, 'portal_types') 
     17    doc_fti = pt.getTypeInfo('Document') 
     18    if doc_fti.Metatype() == 'ATDocument': 
     19        return 1 
     20    else: 
     21        return 0 
     22 
     23def write_object_properties(self, obj): 
    1724    properties = {} 
    18     pc = getToolByName(self, 'portal_clicktracker') 
    19     if getObjectsType(self, pc, out) == 'Link': 
     25    if not isSwitchedToATCT(self): 
    2026        properties['id'] = obj.id 
    2127        properties['title'] = obj.title 
     
    3036    return properties 
    3137 
    32 def update_object(self, obj, properties, out): 
    33     obj.update(title       = properties['title'], 
    34                description = properties['description'], 
    35                url         = properties['remote_url']) 
     38def update_object(self, obj, properties): 
     39    if isSwitchedToATCT(self): 
     40        obj.update(title       = properties['title'], 
     41                   description = properties['description'], 
     42                   remoteUrl   = properties['remote_url']) 
     43    else: 
     44        setattr(obj, 'title',       properties['title']) 
     45        setattr(obj, 'description', properties['description']) 
     46        setattr(obj, 'remote_url',  properties['remote_url']) 
    3647 
    3748def convert_objects(self, container, new_type, out): 
    3849    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'): 
     50    if getObjectsType(self, container, out): 
    4151        for o in listFolderItems(container)[:]: 
    42             prop = write_object_properties(self, o, out) 
     52            prop = write_object_properties(self, o) 
    4353            container._delObject(o.id) 
    4454            fti = pt.getTypeInfo('ClickTracker') 
     
    4656            container.invokeFactory(id = prop['id'], type_name=new_type) 
    4757            campaign=getattr(container, prop['id']) 
    48             update_object(self, campaign, prop, out) 
     58            update_object(self, campaign, prop) 
     59    else: 
     60        create_repType(self, out) 
    4961 
    5062def listFolderItems(container): 
     
    6779    return type_obj 
    6880 
    69 def 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  
    8081def install_tool(self, out, tool='ClickTracker'): 
    8182    portal=getToolByName(self, 'portal_url').getPortalObject() 
    8283    pt = getToolByName(self, 'portal_types') 
     84    create_repType(self, out) 
    8385    if not TOOLID in portal.objectIds(): 
    8486        addPloneTool=portal.manage_addProduct[PROJECTNAME].manage_addTool(tool) 
    8587    else: 
    8688        qi=getToolByName(self, 'portal_quickinstaller') 
     89 
    8790        p=qi._getOb(PROJECTNAME, None) 
    8891        oldVersion=p.getInstalledVersion() 
    8992        newVersion= qi.getProductVersion(PROJECTNAME) 
     93        is_migrated = isSwitchedToATCT(self) 
    9094        pc = getToolByName(self, 'portal_clicktracker') 
    9195        if oldVersion<newVersion: 
    92             convert_objects(self, pc, TYPE_NAME, out) 
     96            convert_objects(self, pc, REP_TYPE, out) 
    9397 
    94 def 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') 
     98        if is_migrated: 
     99            if getObjectsType(self, pc, out) != 'ATLink': 
     100                convert_objects(self, pc, REP_TYPE, out) 
     101 
     102            else: 
     103                print >> out, "Repurpouse type already migrated to ATCT..." 
     104        else: 
     105            if getObjectsType(self, pc, out) == 'ATLink': 
     106                convert_objects(self, pc, 'Link', out) 
     107 
     108            else: 
     109                print >> out, "Repurpouse type already migrated to CMF..." 
     110 
     111    print >> out, "Installed %s tool..." % tool 
     112 
     113def repurpose_content_type(self, old_type, new_type): 
     114    pt = getToolByName(self, 'portal_types') 
     115    copy = pt.manage_copyObjects(old_type) 
     116    pt.manage_pasteObjects(cb_copy_data=copy) 
     117    copy_name = 'copy_of_%s' %old_type 
     118    copy_obj = pt._getOb(copy_name) 
     119    copy_obj.manage_renameObject(copy_name, new_type) 
     120    setattr(copy_obj, 'title', new_type) 
     121 
     122def create_repType(self, out): 
     123    pt = getToolByName(self, 'portal_types') 
     124    if REP_TYPE in pt.objectIds(): 
     125        print >> out, "%s already installed ..." %REP_TYPE 
     126        pt._delObject(REP_TYPE) 
     127    repurpose_content_type(self, 'Link', 'Campaign') 
     128    print >> out, "Repurpose content successfully" 
     129 
    102130def install_configlet(self, out): 
    103131    control_panel=getToolByName(self,'portal_controlpanel') 
     
    121149    portal_workflow.manage_addWorkflow(id=C_WORKFLOWID, workflow_type=C_WORKFLOWID +' (Campaign Workflow)')  
    122150    #set workflow for Campaign 
    123     portal_workflow.setChainForPortalTypes( (TYPE_NAME), C_WORKFLOWID) 
     151    portal_workflow.setChainForPortalTypes( ('Campaign'), C_WORKFLOWID) 
    124152    print >> out, "Installed workflow..." 
    125153 
     
    139167    control_panel.unregisterConfiglet(PROJECTNAME)  
    140168 
    141 def 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  
    146169def install(self): 
    147170 
     
    150173    pt = getToolByName(self, 'portal_types') 
    151174    installTypes(self, out, listTypes(PROJECTNAME), PROJECTNAME) 
    152     setPortalFactoryType(self, out) 
    153175    install_subskin(self, out, GLOBALS) 
    154176    install_workflow(self, out) 
     
    156178    install_configlet(self, out) 
    157179    fix_permissions(self, out) 
    158     customizing_FormController(self, out) 
    159180 
    160181    print >> out, "Successfully installed %s." % PROJECTNAME 
     
    165186 
    166187    remove_configlet(self, out) 
    167     remove_FormControllerAction(self, out) 
    168188 
    169189    print >> out, "Successfully uninstalled %s." % PROJECTNAME 
Note: See TracChangeset for help on using the changeset viewer.