Example #1
0
    def setUp(self):
        get_transaction().begin()

        self.app = makerequest(Zope.app())
        # Log in as a god :-)
        newSecurityManager( None, UnrestrictedUser('god', 'god', ['Manager'], '') )
        app = self.app

        app.REQUEST.set('URL1','http://foo/sorcerertest/test')

        try: app._delObject('CalendarTest')
        except AttributeError: pass
        app.manage_addProduct['CMFDefault'].manage_addCMFSite('CalendarTest')

        self.Site = app.CalendarTest

        manage_addExternalMethod(app.CalendarTest,
                                 id='install_events',
                                 title="Install Events",
                                 module="CMFCalendar.Install",
                                 function="install")

        ExMethod = app.restrictedTraverse('/CalendarTest/install_events')
        ExMethod()

        self.Tool = app.restrictedTraverse('/CalendarTest/portal_calendar')

        # sessioning bodge until we find out how to do this properly

        self.have_session = hasattr( app, 'session_data_manager' )
        if self.have_session:
            app.REQUEST.set_lazy( 'SESSION'
                                , app.session_data_manager.getSessionData )
Example #2
0
    def setUp(self):
        get_transaction().begin()

        self.app = makerequest(Zope.app())
        # Log in as a god :-)
        newSecurityManager(None, UnrestrictedUser('god', 'god', [], ''))
        app = self.app

        app.REQUEST.set('URL1', 'http://foo/sorcerertest/test')

        try:
            app._delObject('CalendarTest')
        except AttributeError:
            pass
        app.manage_addProduct['CMFDefault'].manage_addCMFSite('CalendarTest')

        self.Site = app.CalendarTest

        manage_addExternalMethod(app.CalendarTest,
                                 id='install_events',
                                 title="Install Events",
                                 module="CMFCalendar.Install",
                                 function="install")

        ExMethod = app.restrictedTraverse('/CalendarTest/install_events')
        ExMethod()

        self.Tool = app.restrictedTraverse('/CalendarTest/portal_calendar')

        # sessioning bodge until we find out how to do this properly

        self.have_session = hasattr(app, 'session_data_manager')
        if self.have_session:
            app.REQUEST.set_lazy('SESSION',
                                 app.session_data_manager.getSessionData)
Example #3
0
    def setUp(self):
        self._trap_warning_output()
        transaction.begin()

        app = self.app = makerequest(Zope2.app())
        # Log in as a god :-)
        newSecurityManager( None, UnrestrictedUser('god', 'god', ['Manager'], '') )

        app.manage_addProduct['CMFDefault'].manage_addCMFSite('CalendarTest')

        self.Site = app.CalendarTest

        manage_addExternalMethod(app.CalendarTest,
                                 id='install_events',
                                 title="Install Events",
                                 module="CMFCalendar.Install",
                                 function="install")

        ExMethod = app.restrictedTraverse('/CalendarTest/install_events')
        ExMethod()
        self.Tool = app.CalendarTest.portal_calendar

        self.Site.clearCurrentSkin()
        self.Site.setupCurrentSkin(app.REQUEST)

        # sessioning setup
        if getattr(app, 'temp_folder', None) is None:
            temp_folder = MountedTemporaryFolder('temp_folder')
            app._setObject('temp_folder', temp_folder)
        if getattr(app.temp_folder, 'session_data', None) is None:
            session_data = TransientObjectContainer('session_data')
            app.temp_folder._setObject('session_data', session_data)
        app.REQUEST.set_lazy( 'SESSION',
                              app.session_data_manager.getSessionData )
Example #4
0
    def setUp(self):
        self._trap_warning_output()
        transaction.begin()

        app = self.app = makerequest(Zope2.app())
        # Log in as a god :-)
        newSecurityManager(None, UnrestrictedUser('god', 'god', ['Manager'],
                                                  ''))

        app.manage_addProduct['CMFDefault'].manage_addCMFSite('CalendarTest')

        self.Site = app.CalendarTest

        manage_addExternalMethod(app.CalendarTest,
                                 id='install_events',
                                 title="Install Events",
                                 module="CMFCalendar.Install",
                                 function="install")

        ExMethod = app.restrictedTraverse('/CalendarTest/install_events')
        ExMethod()
        self.Tool = app.CalendarTest.portal_calendar

        self.Site.clearCurrentSkin()
        self.Site.setupCurrentSkin(app.REQUEST)

        # sessioning setup
        if getattr(app, 'temp_folder', None) is None:
            temp_folder = MountedTemporaryFolder('temp_folder')
            app._setObject('temp_folder', temp_folder)
        if getattr(app.temp_folder, 'session_data', None) is None:
            session_data = TransientObjectContainer('session_data')
            app.temp_folder._setObject('session_data', session_data)
        app.REQUEST.set_lazy('SESSION',
                             app.session_data_manager.getSessionData)
Example #5
0
def installExternalMethods(context):
    site = context.getSite()

    if not hasattr(site, 'UWOshSuccess_installInitialStructure'):
        manage_addExternalMethod(site, 'UWOshSuccess_installInitialStructure',
                                 'UWOshSuccess_installInitialStructure',
                                 'Products.UWOshSuccess.initialstructure',
                                 'installInitialStructure')
Example #6
0
def install_external_method(folder, id, description, module, function):
    if not hasattr(folder, id):
        try:
            manage_addExternalMethod(folder, id, description, module, function)
        except Exception, inst:
            LOG('UWOshOIE install problem:', INFO,  "Adding external method: type: " + str(type(inst)) + 
                                                    ", args: " + str(inst.args) + 
                                                    ", inst: " + str(inst))
Example #7
0
def install_external_method(folder, id, description, module, function):
    if not hasattr(folder, id):
        try:
            manage_addExternalMethod(folder, id, description, module, function)
            folder[id].manage_permission("View", roles=["musicFacultyMember", "Manager"], acquire=0)
            folder[id].manage_permission("Access contents information", roles=["musicFacultyMember", "Manager"], acquire=0)
        except:
            logger.info("Error attempting to install %s external method" % (id))
Example #8
0
 def setUpPloneSite(self, portal):
     # we create a front-page document that will be modified in setup
     _createObjectByType('Document', portal, id='front-page')
     portal.setDefaultPage('front-page')
     manage_addExternalMethod(portal, 'import_scanned', 'import_scanned', 'imio.dms.mail.demo', 'import_scanned')
     manage_addExternalMethod(portal, 'create_main_file', 'create_main_file', 'imio.dms.mail.demo',
                              'create_main_file')
     # install dmsmail (apply profile)
     super(DmsmailLayer, self).setUpPloneSite(portal)
Example #9
0
def install_external_method(folder, id, description, module, function):
    if not hasattr(folder, id):
        try:
            manage_addExternalMethod(folder, id, description, module, function)
        except Exception, inst:
            LOG(
                'UWOshOIE install problem:', INFO,
                "Adding external method: type: " + str(type(inst)) +
                ", args: " + str(inst.args) + ", inst: " + str(inst))
Example #10
0
 def setUp(self):
     MeetingCommunesTestCase.setUp(self)
     # add the ExternalMethod export_orgs in Zope
     manage_addExternalMethod(self.portal.aq_inner.aq_parent, 'export_orgs',
                              '', 'Products.MeetingCommunes.utils',
                              'export_orgs')
     # add the ExternalMethod import_orgs in Zope
     manage_addExternalMethod(self.portal.aq_inner.aq_parent, 'import_orgs',
                              '', 'Products.MeetingCommunes.utils',
                              'import_orgs')
Example #11
0
def installExternalMethods(context):
    site = context.getSite()

    if not hasattr(site, 'UWOshSuccess_installInitialStructure'):
        manage_addExternalMethod(site,
                                 'UWOshSuccess_installInitialStructure',
                                 'UWOshSuccess_installInitialStructure',
                                 'Products.UWOshSuccess.initialstructure',
                                 'installInitialStructure'
                                 )
Example #12
0
def install(self, reinstall=False):
    """ 
        Specific installation steps
    """
    portal = getToolByName(self, 'portal_url').getPortalObject()
    #Add of some external methods
    # pack_db method must not be added here
    for method in ('object_info', 'audit_catalog'):
        method_name = 'cputils_'+method
        if not hasattr(portal.aq_inner.aq_explicit, method_name):
            logger.info("REALLY Adding external method '%s'" % method_name)
            #without aq_explicit, if the id exists at a higher level, it is found !
            manage_addExternalMethod(self, method_name, '', 'CPUtils.utils', method)
Example #13
0
    def setUpPloneSite(self, portal):
        setattr(portal, '_TESTING_SITE_', True)
        setLocal('request', portal.REQUEST)
        applyProfile(portal, 'Products.CMFPlone:plone')
        #        applyProfile(portal, 'Products.CMFPlone:plone-content')  # could be done too
        manage_addExternalMethod(portal, 'lock-unlock', '',
                                 'imio.project.pst.robot', 'lock')
        manage_addExternalMethod(portal, 'robot_init', '',
                                 'imio.project.pst.robot', 'robot_init')

        super(PSTLayer, self).setUpPloneSite(portal)
        setRoles(portal, TEST_USER_ID, ['Manager'])
        portal.portal_setup.runAllImportStepsFromProfile(
            'profile-imio.project.pst:demo')
Example #14
0
def addExternalMethod(self, out):
    """ Add external method to portal root directory """

    if not hasattr(self, EXTERNAL_METHOD):
        manage_addExternalMethod(self,
                                id=EXTERNAL_METHOD,
                                title=EXTERNAL_METHOD,
                                module=PROJECTNAME+'.'+'getMemberData',
                                function='getMemberData')
        method = getattr(self, EXTERNAL_METHOD)
        if method:
            method.manage_permission('View', ['Manager',], acquire=0)
            out.write('%s external method added to portal\n' % EXTERNAL_METHOD)
        else: out.write('installation procedure could not create external method\n')
    else: out.write('%s external method already exists in portal\n' % EXTERNAL_METHOD)
 def test_34_executiondate_when_script_working(self,):
     """
     """
     scriptsholder = self.portal.portal_maintenance.scripts
     # Plone Catalog update script
     manage_addExternalMethod(scriptsholder,'workingScript',
         'Working Script',
         PROJECTNAME+'.MaintenanceToolbox',
         'workingScript')
     content_id = "task1"
     addMaintenanceTask(self.portal, content_id, title = 'Task 1')
     task=getattr(self.portal, content_id)
     task.setScript_name('workingScript')
     current_date=DateTime('2006/05/12 16:17')
     self.failUnless(task.isPending(current_date))
     last_execution_date = task.last_execution_date
     self.portal.portal_maintenance.runTasks()
     task.runTask()
     self.failUnless(task.last_execution_date!=last_execution_date)
Example #16
0
 def afterSetUp(self):
     from Products.PloneGazette import NewsletterTheme
     """
     """        
     CPUtilsTestCase.afterSetup(self)
     
     self.loginAsPortalOwner()
     method = 'install'
     method_name = 'cputils_'+method
     manage_addExternalMethod(self.app, method_name, '', 'CPUtils.utils', method)
     self.app.cputils_install()
     
     """from Products.Five import zcml
     from Products.Five import fiveconfigure
     fiveconfigure.debug_mode=True
     import Products.PloneGazette
     zcml.load_config('configure.zcml', Products.PloneGazette)
     fiveconfigure.debug_mode=False
     self.addProduct(name)"""
     qi = self.portal.portal_quickinstaller
Example #17
0
def install(self, reinstall=0):
    installation=Installation(self)
    out = installation.out

    installation.setupTypesandSkins(fti_list, skin_name, install_globals, [])

    # Disallow adding MaintenanceTask
    ttool = getToolByName(self, 'portal_types')
    typeinfo = getattr(ttool, 'MaintenanceTask')
    try:
        typeinfo.manage_changeProperties({"global_allow":0})
    except:
        typeinfo.manage_changeProperties(global_allow=0) # Doesn't work with Plone 2.0.5
   
    if not reinstall:
        setupTools(self)

        mainttool = getToolByName(self, 'portal_maintenance')
        scriptsholder = mainttool.scripts

        # Plone Catalog update script
        manage_addExternalMethod(scriptsholder,'updateCatalog',
            'Update the portal catalog',
            PROJECTNAME+'.MaintenanceToolbox',
            'updateCatalog')

        # Plone Catalogs rebuilds script
        manage_addExternalMethod(scriptsholder,'rebuildCatalogs',
            'PloneArticle-aware Rebuild of all Catalogs',
            PROJECTNAME+'.MaintenanceToolbox',
            'rebuildCatalogs')

        # Pack DB script
        manage_addExternalMethod(scriptsholder,'packDB',
            'Pack the main DB or any specified one',
            PROJECTNAME+'.MaintenanceToolbox',
            'packDB')

        # Archive expired content script
        manage_addExternalMethod(scriptsholder,'archiveExpiredContent',
            'Archive expired content script',
            PROJECTNAME+'.MaintenanceToolbox',
            'archiveExpiredContent')
    else:
        updateTaskProperties(self)
            
    return installation.report()
Example #18
0
def addUpgradeExternalMethods(portal):
    '''
    add upgrade external methods in site root.
    '''
    from Products.ExternalMethod.ExternalMethod import manage_addExternalMethod
    # this function is DEPRECATED since we change the process of creating new instances.
    # TODO: Remove starting from July 2013.
    # manage_addExternalMethod(portal, '0_create_first_doctor', 'Create First Doctor', 'wres.policy.create_first_doctor', 'main')
    manage_addExternalMethod(portal, '0_upgrade', 'Cmed Automatic Upgrade', 'wres.policy.upgrade', 'main')
    manage_addExternalMethod(portal, 'z_export', 'Export Cmed', 'wres.policy.exporter', 'main')
    manage_addExternalMethod(portal, 'z_import', 'Import Cmed', 'wres.policy.importer', 'main')
Example #19
0
def addUpgradeExternalMethods(portal):
    '''
    add upgrade external methods in site root.
    '''
    from Products.ExternalMethod.ExternalMethod import manage_addExternalMethod
    # this function is DEPRECATED since we change the process of creating new instances.
    # TODO: Remove starting from July 2013.
    # manage_addExternalMethod(portal, '0_create_first_doctor', 'Create First Doctor', 'wres.policy.create_first_doctor', 'main')
    manage_addExternalMethod(portal, '0_upgrade', 'Cmed Automatic Upgrade',
                             'wres.policy.upgrade', 'main')
    manage_addExternalMethod(portal, 'z_export', 'Export Cmed',
                             'wres.policy.exporter', 'main')
    manage_addExternalMethod(portal, 'z_import', 'Import Cmed',
                             'wres.policy.importer', 'main')
Example #20
0
from Products.ExternalMethod.ExternalMethod import manage_addExternalMethod
# we add the external method cputils_install
if not hasattr(app, 'cputils_install'):
    manage_addExternalMethod(app, 'cputils_install', '', 'CPUtils.utils', 'install')
# we run this method
app.cputils_install(app)
# we add the properties hiddenProducts, shownProducts
#from Products.CPUtils.hiddenProductsList import dic_hpList
# to be continued
Example #21
0
def setupTrackback_workflow(wf):
    "..."
    wf.setProperties(title="TrackBack Workflow")

    for s in ["new", "pending", "published"]:
        wf.states.addState(s)
    for t in ["retract", "publish", "make_pending"]:
        wf.transitions.addTransition(t)
    for v in ["action", "review_history", "comments", "actor", "time"]:
        wf.variables.addVariable(v)
    for l in []:
        wf.worklists.addWorklist(l)
    for p in ("Access contents information", "Modify portal content", "View"):
        wf.addManagedPermission(p)

    # from Products.PythonScripts.PythonScript import manage_addPythonScript
    # for p in ['notifyTrackBack']:
    #    manage_addPythonScript(wf.scripts, p)
    #    srcdef = wf.scripts['notifyTrackBack']
    #    srcdef.ZPythonScript_edit('', script_notifyTrackBack)
    #    srcdef._proxy_roles = ( "Manager", )
    #    #roles = ("Manager",)
    #    #srcdef.manage_proxy(roles)

    from Products.ExternalMethod.ExternalMethod import manage_addExternalMethod

    manage_addExternalMethod(
        wf.scripts, id="notifyTrackBack", title="", module="SimpleBlog.utils", function="notifyTrackBack"
    )

    ## Initial State
    wf.states.setInitialState("new")

    ## States initialization
    sdef = wf.states["new"]
    sdef.setProperties(title="""""", transitions=("make_pending",))
    sdef.setPermission("Access contents information", 1, [])
    sdef.setPermission("Modify portal content", 1, [])
    sdef.setPermission("View", 1, [])

    sdef = wf.states["pending"]
    sdef.setProperties(title="""""", transitions=("publish",))
    sdef.setPermission("Access contents information", 0, ["Manager", "Owner"])
    sdef.setPermission("Modify portal content", 0, ["Manager", "Owner"])
    sdef.setPermission("View", 0, ["Manager", "Owner"])

    sdef = wf.states["published"]
    sdef.setProperties(title="""Public""", transitions=("retract",))
    sdef.setPermission("Access contents information", 1, ["Anonymous", "Manager"])
    sdef.setPermission("Modify portal content", 0, ["Manager", "Owner"])
    sdef.setPermission("View", 0, ["Anonymous", "Authenticated", "Manager"])

    ## Transitions initialization
    tdef = wf.transitions["retract"]
    tdef.setProperties(
        title="""Member retracts published item""",
        new_state_id="""pending""",
        trigger_type=1,
        script_name="""""",
        after_script_name="""""",
        actbox_name="""Retract""",
        actbox_url="""%(content_url)s/content_retract_form""",
        actbox_category="""workflow""",
        props={"guard_roles": "Owner; Manager"},
    )

    tdef = wf.transitions["publish"]
    tdef.setProperties(
        title="""Reviewer publishes content""",
        new_state_id="""published""",
        trigger_type=1,
        script_name="""""",
        after_script_name="""""",
        actbox_name="""Publish""",
        actbox_url="""%(content_url)s/content_publish_form""",
        actbox_category="""workflow""",
        props={"guard_roles": "Manager; Owner"},
    )

    tdef = wf.transitions["make_pending"]
    tdef.setProperties(
        title="""Make pending""",
        new_state_id="""pending""",
        trigger_type=0,
        script_name="""notifyTrackBack""",
        after_script_name="""""",
        actbox_name="""""",
        actbox_url="""""",
        actbox_category="""workflow""",
        props=None,
    )

    ## State Variable
    wf.variables.setStateVar("review_state")

    ## Variables initialization
    vdef = wf.variables["action"]
    vdef.setProperties(
        description="""The last transition""",
        default_value="""""",
        default_expr="""transition/getId|nothing""",
        for_catalog=0,
        for_status=1,
        update_always=1,
        props=None,
    )

    vdef = wf.variables["review_history"]
    vdef.setProperties(
        description="""Provides access to workflow history""",
        default_value="""""",
        default_expr="""state_change/getHistory""",
        for_catalog=0,
        for_status=0,
        update_always=0,
        props={"guard_permissions": "Request review; Review portal content"},
    )

    vdef = wf.variables["comments"]
    vdef.setProperties(
        description="""Comments about the last transition""",
        default_value="""""",
        default_expr="""python:state_change.kwargs.get('comment', '')""",
        for_catalog=0,
        for_status=1,
        update_always=1,
        props=None,
    )

    vdef = wf.variables["actor"]
    vdef.setProperties(
        description="""The ID of the user who performed the last transition""",
        default_value="""""",
        default_expr="""user/getId""",
        for_catalog=0,
        for_status=1,
        update_always=1,
        props=None,
    )

    vdef = wf.variables["time"]
    vdef.setProperties(
        description="""Time of the last transition""",
        default_value="""""",
        default_expr="""state_change/getDateTime""",
        for_catalog=0,
        for_status=1,
        update_always=1,
        props=None,
    )
Example #22
0
def create(app, admin_username="******"):
    out = []
    oids = app.objectIds()

    # these are the two set elements...
    # (accessRule.py external method and SiteRoot)
    eid = "accessRule.py"
    pid = "Plone"
    emod = "CMFPlone.accessRule"
    efn = "accessRule"
    sid = "SiteRoot"

    if pid in oids:
        out.append("A Plone site already exists")
        return out

    # 1 .get the admin user (dont bother making it, it's done before you
    #                        get a chance)

    acl_users = app.acl_users
    #    info = User.readUserAccessFile('inituser')
    #    if info:
    #        acl_users._doAddUser(info[0], info[1], ('manage',), [])

    user = acl_users.getUser(admin_username)
    if user:
        user = user.__of__(acl_users)
        newSecurityManager(None, user)
        out.append("Retrieved the admin user")
    else:
        out.append("Retrieving admin user failed")

    # 2. create the access rule external method
    if eid not in oids:
        # this is the actual access rule
        manage_addExternalMethod(app, eid, "Plone Access Rule", emod, efn)
        out.append("Added external method")
        # this sets the access rule
        manage_addAccessRule(app, eid)
        out.append("Set an access rule")
    ##         if user:
    ##             getattr(app, eid).changeOwnership(user)

    # 3. actually add in Plone
    if pid not in oids:
        factory = app.manage_addProduct["CMFPlone"]
        factory.addPloneSite(pid, create_userfolder=1)
        out.append("Added Plone")
    ##         if user:
    ##             getattr(app, pid).changeOwnership(user, recursive=1)

    # 4. adding the site root in
    plone = getattr(app, pid)
    if sid not in plone.objectIds():
        manage_addSiteRoot(plone)
        out.append("Added Site Root")
    ##         if user:
    ##             getattr(plone, sid).changeOwnership(user)

    # 5. add in products
    qit = plone.portal_quickinstaller

    products_to_install = ["kupu"]
    ids = [x["id"] for x in qit.listInstallableProducts(skipInstalled=1)]
    for product in products_to_install:
        if product in ids:
            qit.installProduct(product)

    # 6. commit
    transaction.commit()

    noSecurityManager()
    out.append("Finished")
    return out
Example #23
0
    def setUpPloneSite(self, portal):
        setLocal('request', portal.REQUEST)
        manage_addExternalMethod(portal, 'import_scanned', 'import_scanned',
                                 'imio.dms.mail.demo', 'import_scanned')
        manage_addExternalMethod(portal, 'import_scanned2', 'import_scanned2',
                                 'imio.dms.mail.demo', 'import_scanned2')
        manage_addExternalMethod(portal, 'create_main_file',
                                 'create_main_file', 'imio.dms.mail.demo',
                                 'create_main_file')
        manage_addExternalMethod(portal, 'activate_group_encoder',
                                 'activate_group_encoder',
                                 'imio.dms.mail.demo',
                                 'activate_group_encoder')
        manage_addExternalMethod(portal, 'delete-category', '',
                                 'imio.dms.mail.robot', 'delete_category')
        manage_addExternalMethod(portal, 'lock-unlock', '',
                                 'imio.dms.mail.robot', 'lock')
        manage_addExternalMethod(portal, 'robot_init', '',
                                 'imio.dms.mail.robot', 'robot_init')
        manage_addExternalMethod(portal, 'video_doc_init', '',
                                 'imio.dms.mail.robot', 'video_doc_init')

        sp = portal.portal_properties.site_properties
        sp.default_language = 'fr'
        # we create a front-page document that will be modified in setup
        _createObjectByType('Document', portal, id='front-page')
        portal.setDefaultPage('front-page')
        _createObjectByType('Folder',
                            portal,
                            id='Members',
                            title='Users',
                            description="Site Users")
        members = getattr(portal, 'Members')
        members.setTitle(
            translate(u'members-title',
                      target_language='fr',
                      domain='plonefrontpage',
                      default='Users'))
        members.setDescription(
            translate(u'members-description',
                      target_language='fr',
                      domain='plonefrontpage',
                      default="Site Users"))
        members.unmarkCreationFlag()
        members.setLanguage('fr')
        members.reindexObject()

        # install dmsmail (apply profile)
        super(DmsmailLayer, self).setUpPloneSite(portal)
        applyProfile(portal, 'collective.MockMailHost:default')
        api.content.transition(obj=members, transition='show_internally')

        # copy template
        setRoles(portal, TEST_USER_ID, ['Manager'])
        folder_uid = portal['contacts']['plonegroup-organization'][
            'direction-generale']['secretariat'].UID()
        newobj = api.content.copy(portal['templates']['om']['main'],
                                  portal['templates']['om'][folder_uid])
        newobj.title = u'Modèle type'
        newobj.reindexObject()

        # avoid redirection after document generation
        from imio.dms.mail.browser.documentgenerator import OMPDGenerationView
        OMPDGenerationView.redirects = lambda a, b: None

        setRoles(portal, TEST_USER_ID, ['Member'])
Example #24
0
def setupTrackback_workflow(wf):
    "..."
    wf.setProperties(title='TrackBack Workflow')

    for s in ['new', 'pending', 'published']:
        wf.states.addState(s)
    for t in ['retract', 'publish', 'make_pending']:
        wf.transitions.addTransition(t)
    for v in ['action', 'review_history', 'comments', 'actor', 'time']:
        wf.variables.addVariable(v)
    for l in []:
        wf.worklists.addWorklist(l)
    for p in ('Access contents information', 'Modify portal content', 'View'):
        wf.addManagedPermission(p)


    #from Products.PythonScripts.PythonScript import manage_addPythonScript
    #for p in ['notifyTrackBack']:
    #    manage_addPythonScript(wf.scripts, p)
    #    srcdef = wf.scripts['notifyTrackBack']
    #    srcdef.ZPythonScript_edit('', script_notifyTrackBack)
    #    srcdef._proxy_roles = ( "Manager", )
    #    #roles = ("Manager",)
    #    #srcdef.manage_proxy(roles)

    from Products.ExternalMethod.ExternalMethod import manage_addExternalMethod
    manage_addExternalMethod(wf.scripts, 
                             id='notifyTrackBack', 
                             title='',
                             module='SimpleBlog.utils',
                             function='notifyTrackBack')

    ## Initial State
    wf.states.setInitialState('new')

    ## States initialization
    sdef = wf.states['new']
    sdef.setProperties(title="""""",
                       transitions=('make_pending',))
    sdef.setPermission('Access contents information', 1, [])
    sdef.setPermission('Modify portal content', 1, [])
    sdef.setPermission('View', 1, [])

    sdef = wf.states['pending']
    sdef.setProperties(title="""""",
                       transitions=('publish',))
    sdef.setPermission('Access contents information', 0, ['Manager', 'Owner'])
    sdef.setPermission('Modify portal content', 0, ['Manager', 'Owner'])
    sdef.setPermission('View', 0, ['Manager', 'Owner'])

    sdef = wf.states['published']
    sdef.setProperties(title="""Public""",
                       transitions=('retract',))
    sdef.setPermission('Access contents information', 1, ['Anonymous', 'Manager'])
    sdef.setPermission('Modify portal content', 0, ['Manager', 'Owner'])
    sdef.setPermission('View', 0, ['Anonymous', 'Authenticated', 'Manager'])


    ## Transitions initialization
    tdef = wf.transitions['retract']
    tdef.setProperties(title="""Member retracts published item""",
                       new_state_id="""draft""",
                       trigger_type=1,
                       script_name="""""",
                       after_script_name="""""",
                       actbox_name="""Retract""",
                       actbox_url="""%(content_url)s/content_retract_form""",
                       actbox_category="""workflow""",
                       props={'guard_roles': 'Owner; Manager'},
                       )

    tdef = wf.transitions['publish']
    tdef.setProperties(title="""Reviewer publishes content""",
                       new_state_id="""published""",
                       trigger_type=1,
                       script_name="""""",
                       after_script_name="""""",
                       actbox_name="""Publish""",
                       actbox_url="""%(content_url)s/content_publish_form""",
                       actbox_category="""workflow""",
                       props={'guard_roles': 'Manager; Owner'},
                       )

    tdef = wf.transitions['make_pending']
    tdef.setProperties(title="""Make pending""",
                       new_state_id="""pending""",
                       trigger_type=0,
                       script_name="""notifyTrackBack""",
                       after_script_name="""""",
                       actbox_name="""""",
                       actbox_url="""""",
                       actbox_category="""workflow""",
                       props=None,
                       )

    ## State Variable
    wf.variables.setStateVar('review_state')

    ## Variables initialization
    vdef = wf.variables['action']
    vdef.setProperties(description="""The last transition""",
                       default_value="""""",
                       default_expr="""transition/getId|nothing""",
                       for_catalog=0,
                       for_status=1,
                       update_always=1,
                       props=None)

    vdef = wf.variables['review_history']
    vdef.setProperties(description="""Provides access to workflow history""",
                       default_value="""""",
                       default_expr="""state_change/getHistory""",
                       for_catalog=0,
                       for_status=0,
                       update_always=0,
                       props={'guard_permissions': 'Request review; Review portal content'})

    vdef = wf.variables['comments']
    vdef.setProperties(description="""Comments about the last transition""",
                       default_value="""""",
                       default_expr="""python:state_change.kwargs.get('comment', '')""",
                       for_catalog=0,
                       for_status=1,
                       update_always=1,
                       props=None)

    vdef = wf.variables['actor']
    vdef.setProperties(description="""The ID of the user who performed the last transition""",
                       default_value="""""",
                       default_expr="""user/getId""",
                       for_catalog=0,
                       for_status=1,
                       update_always=1,
                       props=None)

    vdef = wf.variables['time']
    vdef.setProperties(description="""Time of the last transition""",
                       default_value="""""",
                       default_expr="""state_change/getDateTime""",
                       for_catalog=0,
                       for_status=1,
                       update_always=1,
                       props=None)