Changeset 181

Show
Ignore:
Timestamp:
01/12/06 08:16:30
Author:
fenix
Message:

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

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • qClickTrackingTool/branches/qClickTrackingTool-0.3.2_me/ClickTracker.py

    r180 r181  
    1616        fti['actions']=tuple(actions) 
    1717 
    18 class ClickTracker(BaseFolder):   
    19          
     18class ClickTracker(BaseFolder): 
     19 
    2020    schema=schema 
    2121    archetype_name=PROJECTNAME 
    2222    id=TOOLID 
    23      
     23 
    2424    def __init__(self): 
    2525        BaseFolder.__init__(self, self.id) 
  • qClickTrackingTool/branches/qClickTrackingTool-0.3.2_me/Extensions/Install.py

    r180 r181  
    99from Products.qClickTrackingTool.ClickTracker import ClickTracker 
    1010from Products.qClickTrackingTool.Workflow import createWorkflow 
    11 from Products.qClickTrackingTool.Campaign import Campaign 
    1211from Products.qClickTrackingTool.ClickTracker import ClickTracker 
    1312from Products.qClickTrackingTool.config import * 
    1413 
    1514 
    16 def tool_migration(self, out, oldVersion, newVersion): 
    17     #get tools 
    18     pc=getToolByName(self, 'portal_clicktracker') 
     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 
    1922 
    20     for o in pc.listFolderContents()[:]: 
    21         #create temp link object 
    22         temp_link=Link(id=o.getId(), title=o.Title(), remote_url=o.getRemoteUrl(), description=o.Description()) 
    23         #remove old link 
    24         pc._delObject(o.getId()) 
    25         #create new Campaign 
    26         pc.invokeFactory(id=temp_link.id, type_name='Campaign') 
    27         campaign=getattr(pc, temp_link.id) 
    28         campaign.update(title=temp_link.title, description=temp_link.description, remoteUrl=temp_link.remote_url) 
     23def write_object_properties(self, obj): 
     24    properties = {} 
     25    if not isSwitchedToATCT(self): 
     26        properties['id'] = obj.id 
     27        properties['title'] = obj.title 
     28        properties['description'] = obj.description 
     29        properties['remote_url'] = obj.getRemoteUrl() 
     30    else: 
     31        properties['id'] = obj.id 
     32        properties['title'] = obj.Title() 
     33        properties['description'] = obj.Description() 
     34        properties['remote_url'] = obj.getRemoteUrl() 
    2935 
    30     print >> out, "migration complete..." 
     36    return properties 
    3137 
     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']) 
     47 
     48def convert_objects(self, container, new_type, out): 
     49    pt = getToolByName(self, 'portal_types') 
     50    if getObjectsType(self, container, out): 
     51        for o in listFolderItems(container)[:]: 
     52            prop = write_object_properties(self, o) 
     53            container._delObject(o.id) 
     54            fti = pt.getTypeInfo('ClickTracker') 
     55            fti.manage_changeProperties(allowed_content_types = (new_type,)) 
     56            container.invokeFactory(id = prop['id'], type_name=new_type) 
     57            campaign=getattr(container, prop['id']) 
     58            update_object(self, campaign, prop) 
     59    else: 
     60        create_repType(self, out) 
     61 
     62def listFolderItems(container): 
     63    res = [] 
     64    ids = container.objectIds() 
     65    for ob_id in ids: 
     66        res.append(container._getOb(ob_id)) 
     67    return res 
     68 
     69def getObjectsType(self, container, out): 
     70    pt = getToolByName(self, 'portal_types') 
     71    ids = container.objectIds() 
     72    if ids: 
     73        obj = container._getOb(ids[0]) 
     74        type_obj = obj.meta_type 
     75    else: 
     76        print >> out, "Portal click tracker is empty..." 
     77        type_obj = None 
     78 
     79    return type_obj 
    3280 
    3381def install_tool(self, out, tool='ClickTracker'): 
    3482    portal=getToolByName(self, 'portal_url').getPortalObject() 
    35     if TOOLID  not in portal.objectIds(): 
     83    pt = getToolByName(self, 'portal_types') 
     84    create_repType(self, out) 
     85    if not TOOLID in portal.objectIds(): 
    3686        addPloneTool=portal.manage_addProduct[PROJECTNAME].manage_addTool(tool) 
    3787    else: 
     
    4191        oldVersion=p.getInstalledVersion() 
    4292        newVersion= qi.getProductVersion(PROJECTNAME) 
    43                                  
    44         if oldVersion < newVersion: 
    45             tool_migration(self, out, oldVersion, newVersion)     
     93        is_migrated = isSwitchedToATCT(self) 
     94        pc = getToolByName(self, 'portal_clicktracker') 
     95        if oldVersion<newVersion: 
     96            convert_objects(self, pc, REP_TYPE, out) 
     97 
     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..." 
    46110 
    47111    print >> out, "Installed %s tool..." % tool 
    48      
     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 
    49130def install_configlet(self, out): 
    50131    control_panel=getToolByName(self,'portal_controlpanel') 
     
    52133                                    'Click Tracking Tool', 
    53134                                    'string:${portal_url}/%s/portal_clicktracker_view' % TOOLID, 
    54                                      permission=MANAGE_CLICKTRACKINGTOOL_PERMISSION,  
     135                                     permission=MANAGE_CLICKTRACKINGTOOL_PERMISSION, 
    55136                                     imageUrl='link_icon.gif', 
    56137                                     category='Products', 
     
    68149    portal_workflow.manage_addWorkflow(id=C_WORKFLOWID, workflow_type=C_WORKFLOWID +' (Campaign Workflow)')  
    69150    #set workflow for Campaign 
    70     portal_workflow.setChainForPortalTypes( ('Campaign'), C_WORKFLOWID)            
     151    portal_workflow.setChainForPortalTypes( ('Campaign'), C_WORKFLOWID) 
    71152    print >> out, "Installed workflow..." 
    72      
     153 
    73154def fix_permissions(self, out): 
    74155    portal_workflow=getToolByName(self, 'portal_workflow') 
    75156    #remove worklow from tool 
    76     portal_workflow.setChainForPortalTypes( ('ClickTracker (qClickTrackingTool)'), '')     
     157    portal_workflow.setChainForPortalTypes( ('ClickTracker (qClickTrackingTool)'), '') 
    77158    #set permission for portal_clicktracker 
    78159    pc=getToolByName(self, 'portal_clicktracker') 
     
    87168 
    88169def install(self): 
    89      
     170 
    90171    out=StringIO(); 
    91172 
     173    pt = getToolByName(self, 'portal_types') 
    92174    installTypes(self, out, listTypes(PROJECTNAME), PROJECTNAME) 
    93175    install_subskin(self, out, GLOBALS) 
     
    104186 
    105187    remove_configlet(self, out) 
    106        
     188 
    107189    print >> out, "Successfully uninstalled %s." % PROJECTNAME 
    108190    return out.getvalue() 
  • qClickTrackingTool/branches/qClickTrackingTool-0.3.2_me/__init__.py

    r180 r181  
    1717                  ).initialize(context) 
    1818 
    19     import Campaign 
    2019    content_types, constructors, ftis = process_types( 
    21             listTypes(PROJECTNAME)
     20            [v for v in listTypes(PROJECTNAME) if v['name'] != 'Campaign']
    2221            PROJECTNAME) 
    2322 
     
    2928                fti                = ftis, 
    3029                ).initialize(context) 
     30 
     31import sys 
     32import Products.qClickTrackingTool.legacy.Campaign 
     33 #change module alias 
     34sys.modules['Products.qClickTrackingTool.Campaign'] = legacy.Campaign 
  • qClickTrackingTool/branches/qClickTrackingTool-0.3.2_me/config.py

    r180 r181  
    88MANAGE_CLICKTRACKINGTOOL_PERMISSION = ManagePortal 
    99C_WORKFLOWID='campaign_workflow' 
     10REP_TYPE = 'Campaign' 
  • qClickTrackingTool/branches/qClickTrackingTool-0.3.2_me/skins/qClickTrackingTool/portal_clicktracker_view.pt

    r180 r181  
    3636 
    3737                <dt metal:define-macro="listitem"> 
    38  
    39                 <a  href="#"  
    40                    tal:attributes="href string:${obj/absolute_url}/atct_edit" 
     38<!--python:test(obj.atct_edit, '', '')--> 
     39                <a  href="#" 
     40                  tal:define="atedit string:${obj/absolute_url}/atct_edit; 
     41                              linkedit string:${obj/absolute_url}/link_edit_form" 
     42                   tal:attributes="href atedit | linkedit" 
    4143                   tal:content="obj/title_or_id" /> 
    4244                (<a href="#" 
  • qClickTrackingTool/branches/qClickTrackingTool-0.3.2_me/version.txt

    r180 r181  
    1 0.3.2+ 
     10.3.3