[Plone-IT] Custom Archetype history aware.

SauZheR sauzher a gmail.com
Gio 17 Set 2009 14:46:47 UTC


allora.
io ho fatto riferimento alla classe
plone.app.controlpanel.types.TypesControlPanel.

Estrapolando un metodo di servizio e sostituendo una costante ho
ricopiato il codice, sicuramente sovrabbondante, da inglobare in un
import_step del profilo del tuo prodotto.

#####
#setuphandler.py
#####
from Products.CMFCore.utils import getToolByName
from plone.app.controlpanel.types import VERSION_POLICIES

MY_TYPE = 'tipo mio' # il portal_type del tuo tipo

def setupVarious(context):
    site = context.getSite()

    portal_types = getToolByName(site, 'portal_types')
    portal_repository = getToolByName(site,
                                        'portal_repository')
    portal_properties = getToolByName(site,
                                        'portal_properties')
    site_properties = getattr(portal_properties, 'site_properties')

    type_id = MY_TYPE

    fti = getattr(portal_types, type_id)

    # Set FTI properties

    version_policy = 'automatic'
    current_version_policy= ''

    if type_id not in portal_repository.getVersionableContentTypes():
        current_version_policy = "off"
        policy = set(portal_repository.getPolicyMap().get(type_id, ()))
        for info in VERSION_POLICIES:
            if set(info["policy"]) == policy:
                current_version_policy = info["id"]
        current_version_policy = None


    if version_policy!=current_version_policy:
        newpolicy=[p for p in VERSION_POLICIES if p["id"]==version_policy][0]

        versionable_types = list(portal_repository.getVersionableContentTypes())
        if not newpolicy["policy"]:
            if type_id in versionable_types:
                versionable_types.remove(type_id)
        else:
            if type_id not in versionable_types:
                versionable_types.append(type_id)

        for policy in portal_repository.listPolicies():
            policy_id = policy.getId()
            if policy_id in newpolicy["policy"]:
                portal_repository.addPolicyForContentType(type_id, policy_id)
            else:
                portal_repository.removePolicyFromContentType(type_id,
policy_id)

        portal_repository.setVersionableContentTypes(versionable_types)
#####
#####

ripeto,
magari si puo' raffinare un tantino, ma di funzionare funziona :)

bye




Il 17 settembre 2009 14.11, Luca <lucafbb a gmail.com> ha scritto:
> 2009/9/17 SauZheR <sauzher a gmail.com>:
>> mi ha risposto Aspeli sulla lista product developer.
>>
>> La cosa e' tremendamente semplice... (e ti pareva).
>> Non c'entra la storia historyaware. Basta andare nel pannello di
>> controllo dei tipi in plone, selezionare il proprio tipo dalla
>> tendina, e flaggare la checkbox relativa al versionamento.
>>
>> Il resto va da se.
>>
>
> :-)
>
> Ma per farlo automaticamente all'installazione del prodotto?!
>
> --
> -- luca
>


-- 
  bye
SauZheR
************************************
l'iterazione  umana...
la ricorsione, Divina!
************************************
reply to: sauzher AT gmail DOT com




Maggiori informazioni sulla lista Plone-IT