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
RevLine 
[3129]1from ploneorg.kudobounty.config import FORM_ID
2from ploneorg.kudobounty.config import TOPIC_ID
[3150]3from ploneorg.kudobounty.config import CONTAINER_ID
4from ploneorg.kudobounty.config import CONTAINER_TITLE
[3129]5
6from Products.CMFCore.utils import getToolByName
[3150]7from Products.CMFPlone.utils import _createObjectByType
8from Products.ATContentTypes.lib import constraintypes
9
[3129]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
[3150]20def createTopic(container, wftool, logger):
[3129]21    """
[3150]22    Located in: /bounty-mission/aggregator
[3129]23    Item Type = ["Bounty Program Submission",]
24    state = ['published',]
25    sort_on = "creation"   
26    """
[3150]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()
[3129]40
[3150]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):
[3129]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",
[3150]55                           title="Bounty Submission Form")
[3129]56    form = getattr(container, FORM_ID)
57    # cleanup form and import data from the archive
58    form.manage_delObjects(ids=form.objectIds())
[3158]59    pfg_data = context.readDataFile("submissions-form.tar.gz")
[3129]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)
[3150]66    # Update and pubhish the form
[3129]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')
[3150]72    logger.info("Bounty submission form successfully created") 
[3129]73
74def createStructure(context, logger):
75    site = context.getSite()
[3138]76    wftool = getToolByName(site, "portal_workflow")
[3129]77
[3150]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()
[3138]89
[3150]90        if wftool.getInfoFor(folder, 'review_state') != 'published':
91            wftool.doActionFor(folder, 'publish')
[3129]92
[3150]93        logger.info("Submissions container added")
[3129]94
[3150]95    createTopic(folder, wftool, logger)
96    createPFGForm(context, folder, wftool, logger)
97
[3129]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.