Changeset 182

Show
Ignore:
Timestamp:
01/12/06 08:27:18
Author:
fenix
Message:

changed migration procedure, created new type based on Archetypes, preparing to release 0.4.0 version

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • qClickTrackingTool/trunk/ClickTracker.py

    r181 r182  
    55 
    66def modify_fti(fti): 
    7         fti['allowed_content_types'] = ('Campaign') 
     7        fti['allowed_content_types'] = ('campaign') 
    88        fti['filter_content_types'] = 1 
    99        fti['global_allow']=0 
     
    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/trunk/Extensions/Install.py

    r181 r182  
    22from Products.Archetypes.Extensions.utils import installTypes, install_subskin  
    33from Products.CMFCore.WorkflowTool import addWorkflowFactory 
     4from Products.CMFFormController.FormAction import FormActionKey 
    45from Products.CMFCore import CMFCorePermissions  
    56from Products.CMFCore.utils import getToolByName 
     
    910from Products.qClickTrackingTool.ClickTracker import ClickTracker 
    1011from Products.qClickTrackingTool.Workflow import createWorkflow 
    11 from Products.qClickTrackingTool.Campaign import Campaign 
    1212from Products.qClickTrackingTool.ClickTracker import ClickTracker 
    1313from Products.qClickTrackingTool.config import * 
    1414 
    1515 
    16 def tool_migration(self, out, oldVersion, newVersion): 
    17     #get tools 
    18     pc=getToolByName(self, 'portal_clicktracker') 
     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() 
    1929 
    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) 
     30    return properties 
    2931 
    30     print >> out, "migration complete..." 
     32def update_object(self, obj, properties, out): 
     33    obj.update(title       = properties['title'], 
     34               description = properties['description'], 
     35               url         = properties['remote_url']) 
    3136 
     37def convert_objects(self, container, new_type, out): 
     38    pt = getToolByName(self, 'portal_types') 
     39    if getObjectsType(self, container, out): 
     40        for o in listFolderItems(container)[:]: 
     41            prop = write_object_properties(self, o, out) 
     42            container._delObject(o.id) 
     43            fti = pt.getTypeInfo('ClickTracker') 
     44            fti.manage_changeProperties(allowed_content_types = (new_type,)) 
     45            container.invokeFactory(id = prop['id'], type_name=new_type) 
     46            campaign=getattr(container, prop['id']) 
     47            update_object(self, campaign, prop, out) 
     48 
     49def listFolderItems(container): 
     50    res = [] 
     51    ids = container.objectIds() 
     52    for ob_id in ids: 
     53        res.append(container._getOb(ob_id)) 
     54    return res 
     55 
     56def getObjectsType(self, container, out): 
     57    pt = getToolByName(self, 'portal_types') 
     58    ids = container.objectIds() 
     59    if ids: 
     60        obj = container._getOb(ids[0]) 
     61        type_obj = obj.meta_type 
     62    else: 
     63        print >> out, "Portal click tracker is empty..." 
     64        type_obj = None 
     65 
     66    return type_obj 
     67 
     68def setPortalFactoryType(self, out,): 
     69    pf=getToolByName(self, 'portal_factory') 
     70    ftypes=list(pf.getFactoryTypes()) 
     71    if TYPE_NAME not in ftypes: 
     72        ftypes.append(TYPE_NAME) 
     73        pf.manage_setPortalFactoryTypes(listOfTypeIds=ftypes) 
     74    else: 
     75        print >>out, " %s type already  in portal_factory..." %TYPE_NAME 
     76 
     77    print >> out, "Set %s type to portal_factory" %TYPE_NAME 
    3278 
    3379def install_tool(self, out, tool='ClickTracker'): 
    3480    portal=getToolByName(self, 'portal_url').getPortalObject() 
    35     if TOOLID  not in portal.objectIds(): 
     81    pt = getToolByName(self, 'portal_types') 
     82    if not TOOLID in portal.objectIds(): 
    3683        addPloneTool=portal.manage_addProduct[PROJECTNAME].manage_addTool(tool) 
    3784    else: 
    3885        qi=getToolByName(self, 'portal_quickinstaller') 
    39  
    4086        p=qi._getOb(PROJECTNAME, None) 
    4187        oldVersion=p.getInstalledVersion() 
    4288        newVersion= qi.getProductVersion(PROJECTNAME) 
    43                                 
    44         if oldVersion < newVersion: 
    45             tool_migration(self, out, oldVersion, newVersion)     
     89        pc = getToolByName(self, 'portal_clicktracker') 
     90        if oldVersion<newVersion: 
     91            convert_objects(self, pc, TYPE_NAME, out) 
    4692 
    47     print >> out, "Installed %s tool..." % tool 
    48      
     93def customizing_FormController(self, out): 
     94    fc = getToolByName(self, 'portal_form_controller') 
     95    fc.addFormAction('validate_integrity', 
     96                     'success', 
     97                     'campaign', 
     98                      None, 
     99                     'redirect_to', 
     100                     'string:portal_url/portal_clicktracker/portal_clicktracker_view') 
    49101def install_configlet(self, out): 
    50102    control_panel=getToolByName(self,'portal_controlpanel') 
     
    52104                                    'Click Tracking Tool', 
    53105                                    'string:${portal_url}/%s/portal_clicktracker_view' % TOOLID, 
    54                                      permission=MANAGE_CLICKTRACKINGTOOL_PERMISSION,  
     106                                     permission=MANAGE_CLICKTRACKINGTOOL_PERMISSION, 
    55107                                     imageUrl='link_icon.gif', 
    56108                                     category='Products', 
     
    68120    portal_workflow.manage_addWorkflow(id=C_WORKFLOWID, workflow_type=C_WORKFLOWID +' (Campaign Workflow)')  
    69121    #set workflow for Campaign 
    70     portal_workflow.setChainForPortalTypes( ('Campaign'), C_WORKFLOWID)            
     122    portal_workflow.setChainForPortalTypes( ('campaign'), C_WORKFLOWID) 
    71123    print >> out, "Installed workflow..." 
    72      
     124 
    73125def fix_permissions(self, out): 
    74126    portal_workflow=getToolByName(self, 'portal_workflow') 
    75127    #remove worklow from tool 
    76     portal_workflow.setChainForPortalTypes( ('ClickTracker (qClickTrackingTool)'), '')     
     128    portal_workflow.setChainForPortalTypes( ('ClickTracker (qClickTrackingTool)'), '') 
    77129    #set permission for portal_clicktracker 
    78130    pc=getToolByName(self, 'portal_clicktracker') 
     
    86138    control_panel.unregisterConfiglet(PROJECTNAME)  
    87139 
     140def remove_FormControllerAction(self, out): 
     141    fc = getToolByName(self, 'portal_form_controller') 
     142    if fc.actions.match('validate_integrity', 'success', TYPE_NAME, None): 
     143        fc.actions.delete(FormActionKey('validate_integrity', 'success', TYPE_NAME, None, fc)) 
     144 
    88145def install(self): 
    89      
     146 
    90147    out=StringIO(); 
    91148 
     149    pt = getToolByName(self, 'portal_types') 
    92150    installTypes(self, out, listTypes(PROJECTNAME), PROJECTNAME) 
     151    setPortalFactoryType(self, out) 
    93152    install_subskin(self, out, GLOBALS) 
    94153    install_workflow(self, out) 
     
    96155    install_configlet(self, out) 
    97156    fix_permissions(self, out) 
     157    customizing_FormController(self, out) 
    98158 
    99159    print >> out, "Successfully installed %s." % PROJECTNAME 
     
    104164 
    105165    remove_configlet(self, out) 
    106        
     166    remove_FormControllerAction(self, out) 
     167 
    107168    print >> out, "Successfully uninstalled %s." % PROJECTNAME 
    108169    return out.getvalue() 
  • qClickTrackingTool/trunk/HISTORY.txt

    r181 r182  
     10.4.0 -2006-01-12 
     2================== 
     3 
     4  - added FormConntrollerAction 
     5  - added new migration script 
     6  - changed old type by new one, based on Archetypes 
     7 
    180.3.2+ -2005-08-22 
    29================== 
  • qClickTrackingTool/trunk/README.txt

    r181 r182  
    1616 
    1717  * Archetypes-1.3 
    18  
    19   * ATContentTypes-0.2+ 
    2018 
    2119Usage 
  • qClickTrackingTool/trunk/__init__.py

    r181 r182  
    55 
    66from ClickTracker import ClickTracker 
     7import campaign 
    78 
    89registerDirectory(SKINS_DIR, GLOBALS) 
     
    1718                  ).initialize(context) 
    1819 
    19     import Campaign 
    2020    content_types, constructors, ftis = process_types( 
    21             listTypes(PROJECTNAME)
     21            [v for v in listTypes(PROJECTNAME) if v['name'] != 'Campaign']
    2222            PROJECTNAME) 
    2323 
     
    2929                fti                = ftis, 
    3030                ).initialize(context) 
     31 
     32import sys 
     33import Products.qClickTrackingTool.legacy.Campaign 
     34#change module alias 
     35sys.modules['Products.qClickTrackingTool.Campaign'] = legacy.Campaign 
  • qClickTrackingTool/trunk/config.py

    r181 r182  
    88MANAGE_CLICKTRACKINGTOOL_PERMISSION = ManagePortal 
    99C_WORKFLOWID='campaign_workflow' 
     10TYPE_NAME = 'campaign' 
  • qClickTrackingTool/trunk/skins/qClickTrackingTool/getTrackMap.py

    r181 r182  
    55track_map={} 
    66for link in links: 
    7     track_map[link.getId()]=link.getRemoteUrl() 
     7    track_map[link.getId()]=link.getUrl() 
    88 
    99return track_map 
  • qClickTrackingTool/trunk/skins/qClickTrackingTool/portal_clicktracker_view.pt

    r181 r182  
    3636 
    3737                <dt metal:define-macro="listitem"> 
    38  
    39                 <a  href="#"  
    40                    tal:attributes="href string:${obj/absolute_url}/atct_edit" 
    41                    tal:content="obj/title_or_id" /> 
     38                <a  href="#" 
     39                    tal:attributes="href string:${obj/absolute_url}/base_edit" 
     40                    tal:content="obj/title_or_id" /> 
    4241                (<a href="#" 
    4342                   class="link-external" 
     
    4847                </dt> 
    4948 
    50                 <dd tal:define="description obj/Description"> 
     49                <dd tal:define="description python: obj.getDescription()"> 
    5150                    <span tal:omit-tag="" tal:condition="not:description">  
    5251                        &nbsp;  
  • qClickTrackingTool/trunk/version.txt

    r181 r182  
    1 0.3.2+ 
     10.4.0