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

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

Publish submissions container on struture creation

  • Property svn:eol-style set to native
File size: 4.7 KB
Line 
1from ploneorg.kudobounty.config import FORM_ID
2from ploneorg.kudobounty.config import TOPIC_ID
3from ploneorg.kudobounty.config import SUBMISSION_CONTAINER_ID
4
5from Products.CMFCore.utils import getToolByName
6from Products.GenericSetup.context import TarballExportContext, TarballImportContext
7from Products.GenericSetup.interfaces import IFilesystemExporter, IFilesystemImporter
8
9CREATE_SCRIPT_BODY = """
10portal = context.portal_url.getPortalObject()
11formProcessor = portal.restrictedTraverse('@@processBountyForm')
12formProcessor()
13return {}
14"""
15
16def createTopic(container, logger):
17    """
18    Located in: /bounty-mission/index_html
19
20    Item Type = ["Bounty Program Submission",]
21    state = ['published',]
22
23    sort_on = "creation"   
24    """
25    theCollection = getattr(container, TOPIC_ID, None)
26    ptype = getattr(theCollection, 'portal_type', None)
27    if not ptype == "Topic":
28        container.invokeFactory(id=TOPIC_ID, type_name="Topic")
29        theCollection = getattr(container, TOPIC_ID)
30        theCollection.unmarkCreationFlag()
31        theCriteria = theCollection.addCriterion('Type','ATPortalTypeCriterion')
32        theCriteria.setValue(["Bounty Program Submission",])
33        theCriteria = theCollection.addCriterion('review_state','ATSelectionCriterion')
34        theCriteria.setValue("published")
35        theCriteria = theCollection.addCriterion('created','ATSortCriterion') 
36        logger.info("To '%s' added collection, which grab all " \
37                    "'Bounty Program Submission' objects" % \
38                    '/'.join(theCriteria.getPhysicalPath()))
39    else:
40        logger.info("To '%s' collection already present in the portal" \
41                    % '/'.join(theCollection.getPhysicalPath())) 
42
43def createPFGForm(context, container, logger):
44    """
45    """
46    form = getattr(container, FORM_ID, None)
47    wftool = getToolByName(container, "portal_workflow")
48
49    if form is not None:
50        # Delete form if it exist
51        container.manage_delObjects(ids = FORM_ID)
52
53    # Create new form object
54    container.invokeFactory(id=FORM_ID, type_name="FormFolder",
55                           title="Form of Bounty Program")
56    form = getattr(container, FORM_ID)
57    logger.info("To '%s' added Form Folder" % \
58                '/'.join(form.getPhysicalPath()))
59    # cleanup form and import data from the archive
60    form.manage_delObjects(ids=form.objectIds())
61    pfg_data = context.readDataFile("pfg_data.tar.gz")
62    ctx = TarballImportContext(form, pfg_data)
63    IFilesystemImporter(form).import_(ctx, 'structure', True)
64    logger.info("Successfully imported PFG from data from archive into the form")
65    # Fix importing PFG via GS bug
66    #   - it adds extra indentation, wchich breaks the script.
67    create_bounty_script = form["create-bounty-submission"]
68    create_bounty_script.setScriptBody(CREATE_SCRIPT_BODY)
69    # Update form
70    form.update(**{"actionAdapter":["create-bounty-submission",],})
71    form.unmarkCreationFlag()
72    form.reindexObject()
73    # Publish the form
74    if wftool.getInfoFor(form, 'review_state') != 'published':
75        wftool.doActionFor(form, 'publish')
76        logger.info("'%s' PFG form successfully published" % form.Title())
77    else:
78        logger.info("'%s' PFG form already in 'published' state" % form.Title())
79
80def createStructure(context, logger):
81    site = context.getSite()
82    wftool = getToolByName(site, "portal_workflow")
83
84    subcontainer = getattr(site, SUBMISSION_CONTAINER_ID, None)
85    if subcontainer is None:
86        site.invokeFactory("Folder", SUBMISSION_CONTAINER_ID)
87        subcontainer = getattr(site, SUBMISSION_CONTAINER_ID)
88        subcontainer.update(title="Bounty Submissions")
89        logger.info("Successfully crated '%s' submissions container" \
90                    "in the portal" % SUBMISSION_CONTAINER_ID)
91        # Publish the submissions container
92        if wftool.getInfoFor(subcontainer, 'review_state') != 'published':
93            wftool.doActionFor(subcontainer, 'publish')
94            logger.info("Bounty submissions container successfully published")
95        else:
96            logger.info("Bounty submissions container already in 'published' state")
97        # exclude folder from navigation
98        subcontainer.setExcludeFromNav(True)
99        logger.info("Excluded Bounty submissions container from navigation")
100
101    else:
102        logger.info("To '%s' container already present in the portal" \
103                    % '/'.join(subcontainer.getPhysicalPath())) 
104
105    createTopic(subcontainer, logger)
106    createPFGForm(context, subcontainer, logger)
107
108def importVarious(context):
109    """ Various import steps
110    """
111    if context.readDataFile('ploneorg_kudobounty.txt') is None:
112        return
113    logger = context.getLogger("ploneorg.kudobounty")
114   
115    createStructure(context, logger)
Note: See TracBrowser for help on using the repository browser.