source: products/ploneorg.kudobounty/trunk/ploneorg/kudobounty/setuphandlers.py @ 3158

Last change on this file since 3158 was 3158, checked in by mylan, 13 years ago

Updated submission form - fixed losing of 'bounty mission' field, update 'thank you page'

  • Property svn:eol-style set to native
File size: 4.0 KB
Line 
1from ploneorg.kudobounty.config import FORM_ID
2from ploneorg.kudobounty.config import TOPIC_ID
3from ploneorg.kudobounty.config import CONTAINER_ID
4from ploneorg.kudobounty.config import CONTAINER_TITLE
5
6from Products.CMFCore.utils import getToolByName
7from Products.CMFPlone.utils import _createObjectByType
8from Products.ATContentTypes.lib import constraintypes
9
10from Products.GenericSetup.context import TarballExportContext, TarballImportContext
11from Products.GenericSetup.interfaces import IFilesystemExporter, IFilesystemImporter
12
13CREATE_SCRIPT_BODY = """
14portal = context.portal_url.getPortalObject()
15formProcessor = portal.restrictedTraverse('@@processBountyForm')
16formProcessor()
17return {}
18"""
19
20def createTopic(container, wftool, logger):
21    """
22    Located in: /bounty-mission/aggregator
23    Item Type = ["Bounty Program Submission",]
24    state = ['published',]
25    sort_on = "creation"   
26    """
27    topic = getattr(container, TOPIC_ID, None)
28    if topic is None:
29        # Add criteria
30        _createObjectByType('Topic', container, id=TOPIC_ID,
31                            title=CONTAINER_TITLE)
32        topic = getattr(container, TOPIC_ID, None)
33        crit = topic.addCriterion('Type','ATPortalTypeCriterion')
34        crit.setValue(["Bounty Program Submission",])
35        crit = topic.addCriterion('review_state','ATSelectionCriterion')
36        crit.setValue("published")
37        crit = topic.addCriterion('created','ATSortCriterion') 
38        topic.setLayout('folder_summary_view')
39        topic.unmarkCreationFlag()
40
41        if wftool.getInfoFor(topic, 'review_state') != 'published':
42            wftool.doActionFor(topic, 'publish')
43       
44        logger.info("Bounty submissions aggregator successfully added")
45
46
47def createPFGForm(context, container, wftool, logger):
48    """
49    """
50    form = getattr(container, FORM_ID, None)
51    if form is not None:
52        container.manage_delObjects(ids = FORM_ID)
53    # Create new form object
54    container.invokeFactory(id=FORM_ID, type_name="FormFolder",
55                           title="Bounty Submission Form")
56    form = getattr(container, FORM_ID)
57    # cleanup form and import data from the archive
58    form.manage_delObjects(ids=form.objectIds())
59    pfg_data = context.readDataFile("submissions-form.tar.gz")
60    ctx = TarballImportContext(form, pfg_data)
61    IFilesystemImporter(form).import_(ctx, 'structure', True)
62    # Fix importing PFG via GS bug
63    #   - it adds extra indentation, wchich breaks the script.
64    create_bounty_script = form["create-bounty-submission"]
65    create_bounty_script.setScriptBody(CREATE_SCRIPT_BODY)
66    # Update and pubhish the form
67    form.update(**{"actionAdapter":["create-bounty-submission",],})
68    form.unmarkCreationFlag()
69    form.reindexObject()
70    if wftool.getInfoFor(form, 'review_state') != 'published':
71        wftool.doActionFor(form, 'publish')
72    logger.info("Bounty submission form successfully created") 
73
74def createStructure(context, logger):
75    site = context.getSite()
76    wftool = getToolByName(site, "portal_workflow")
77
78    # CONTAINER
79    if  CONTAINER_ID not in site.objectIds():
80        _createObjectByType('Folder', site, id=CONTAINER_ID,
81                            title=CONTAINER_TITLE)
82        folder = getattr(site, CONTAINER_ID)
83        folder.setOrdering('unordered')
84        folder.setConstrainTypesMode(constraintypes.ENABLED)
85        #folder.setLocallyAllowedTypes(["Bounty Program Submission"])
86        #folder.setImmediatelyAddableTypes(["Bounty Program Submission"])
87        folder.setDefaultPage(TOPIC_ID)
88        folder.unmarkCreationFlag()
89
90        if wftool.getInfoFor(folder, 'review_state') != 'published':
91            wftool.doActionFor(folder, 'publish')
92
93        logger.info("Submissions container added")
94
95    createTopic(folder, wftool, logger)
96    createPFGForm(context, folder, wftool, logger)
97
98def importVarious(context):
99    """ Various import steps
100    """
101    if context.readDataFile('ploneorg_kudobounty.txt') is None:
102        return
103    logger = context.getLogger("ploneorg.kudobounty")
104    createStructure(context, logger)
Note: See TracBrowser for help on using the repository browser.