26. Usar contenido generado¶
¿Cómo hacer que los potenciales ponentes envíen sus charlas? Dejamos que se registren en el sitio y se le otorgan derecho a crear tipos de contenidos Talk. Para ello volvemos a cambiar el sitio a través de la Web.
En este capítulo vamos a:
Permitir auto registro de usuario.
Restringir tipos de contenidos en la carpeta
talks
de las charlas.Otorgar roles locales.
Crear un flujo de trabajo para los tipos de contenidos Talk.
Auto-registro¶
Valla al panel de control de Seguridad en la dirección URL http://localhost:8080/Plone/@@security-controlpanel y Habilitar auto-registro
Deja “Habilitar carpetas de usuario” apagado a menos que quieras un sitio comunitario.
Restringir tipos de contenidos¶
En la carpeta
talks
seleccione Restricciones… en el menú Añadir nuevo.... Solo permita agregar tipos de contenidosTalks
.
Otorgar roles locales¶
Valla a la pestaña Compartir y otorgar el rol Puede agregar al grupo Usuarios conectados. Ahora cualquier usuario puede agregar contenido en esta carpeta (y solamente en esta carpeta).
Ahora todos los Usuarios conectados pueden crear y enviar charlas en esta carpeta con el permiso del flujo de trabajo por defecto.
Un flujo de trabajo personalizado para las charlas¶
Todavía tenemos que solucionar un problema: los usuarios autenticados pueden ver todos los tipos de contenidos talks
, incluso los de otros usuarios en el estado privado. Ya que no queremos que esto vamos a crear un flujo de trabajo modificado para los tipos de contenidos talks
. El nuevo flujo de trabajo sólo les permitirá ver y editar los tipos de contenidos talks
que han creado ellos mismos y no los de otros usuarios.
Valla a la herramienta
ZMI
>portal_workflow
Ver como los tipos de contenidos
talks
tiene el mismo flujo de trabajo como la mayoría del contenido(Por defecto)
Valla a la pestaña Contents, marque la casilla próxima a
simple_publication_workflow
, haga clic enCopy
yPaste
.Renombrar el nuevo flujo de trabajo desde copy_of_simple_publication_workflow a talks_workflow.
Edite el flujo de trabajo haciendo clic en: Change the Title to Talks Workflow.
Haga clic en la pestaña States y haga clic en private y edite este estado. En la próximo vista seleccione en la pestaña Permissions.
Encuentra en la columna de la tabla para el rol Colaborador y quitar los permisos para
Access contents information
yView
. Tenga en cuenta que el rol Propietario (es decir, el rol Creador) todavía tiene algunos permisos.Hacer lo mismo para el estado pending.
Valla a la herramienta portal_workflow y establecer el nuevo flujo de trabajo
talks_workflow
para los tipos de contenidostalks
. Haga clic Change y entonces Update security settings.
Nota
El complemento plone.app.workflowmanager provee una más agradable de interfaz de usuario para esto. El problema es que necesita una pantalla grande para él y que puede ser muy confuso también.
Hecho.
Mover los cambios el sistema de archivo.¶
No queremos hacer estos pasos para cada nueva conferencia manualmente para que nos movemos los cambios en nuestro paquete.
Flujo de trabajo¶
Exporte el paso GenericSetup Workflow Tool en la siguiente dirección URL http://localhost:8080/Plone/portal_setup/manage_exportSteps.
Lance el archivo
workflows.xml
dentro del directorioprofiles/default
.Lance el archivo
workflows/talks_workflow/definition.xml
enprofiles/default/workflows/talks_workflow/definition.xml
. Los otros son sólo definiciones de los flujos de trabajo por defecto y sólo queremos cosas en nuestro paquete que cambia Plone.
Auto-registro¶
Esto tiene que suceder en Python en una archivo setuphandler.py personalizable, ya que aún no existe un entorno exportable para esto.
Registrar un paso de importación en el archivo configure.zcml
. Será ejecutará automáticamente al volver a instalar el complemento.
1 2 3 4 5 6 7 | <genericsetup:importStep
name="ploneconf.site"
title="ploneconf.site special import handlers"
description=""
handler="ploneconf.site.setuphandlers.setupVarious">
<depends name="typeinfo"/>
</genericsetup:importStep>
|
Tenga en cuenta que el módulo setuphandler
tiene una dependencia en typeinfo porque sólo permitirá la creación de tipos de contenidos talks
. Para este tipo ya tiene que existir.
Crear un nuevo archivo setuphandlers.py
, agregando el siguiente código Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # -*- coding: UTF-8 -*-
from plone.app.controlpanel.security import ISecuritySchema
from plone import api
import logging
PROFILE_ID = 'profile-ploneconf.site:default'
logger = logging.getLogger('ploneconf.site')
def setupVarious(context):
# Ordinarily, GenericSetup handlers check for the existence of XML files.
# Here, we are not parsing an XML file, but we use this text file as a
# flag to check that we actually meant for this import step to be run.
# The file is found in profiles/default.
if context.readDataFile('ploneconf.site_various.txt') is None:
return
site = api.portal.get()
set_up_security(site)
def set_up_security(site):
secSchema = ISecuritySchema(site)
secSchema.set_enable_self_reg(True)
|
Agregue el archivo marcador profile/default/ploneconf.site_various.txt
usado en la linea 18, usando el código anterior, con el siguiente contenido:
The ploneconf.site_various step is run if this file is present in the profile
Otorgar roles locales¶
Ya que se aplica sólo a una determinada carpeta en el sitio nosotros normalmente no escribe código para ello.
Pero podemos añadir fácilmente un método para el módulo setuphandler
el cual cree la carpeta y se establece un cierto ajuste por ello.
Aquí hay un ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | # -*- coding: UTF-8 -*-
from plone.app.controlpanel.security import ISecuritySchema
from plone import api
from Products.CMFPlone.interfaces.constrains import ISelectableConstrainTypes
from plone.app.dexterity.behaviors import constrains
import logging
PROFILE_ID = 'profile-ploneconf.site:default'
logger = logging.getLogger('ploneconf.site')
def setupVarious(context):
# Ordinarily, GenericSetup handlers check for the existence of XML files.
# Here, we are not parsing an XML file, but we use this text file as a
# flag to check that we actually meant for this import step to be run.
# The file is found in profiles/default.
if context.readDataFile('ploneconf.site_various.txt') is None:
return
site = api.portal.get()
set_up_security(site)
set_up_content(site)
def set_up_security(site):
secSchema = ISecuritySchema(site)
secSchema.set_enable_self_reg(True)
def set_up_content(site):
"""Create and configure some initial content"""
if 'talks' in site:
return
talks = api.content.create(
container=site,
type='Folder',
id='talks',
title='Talks')
api.content.transition(talks, 'publish')
api.group.grant_roles(
groupname='AuthenticatedUsers',
roles=['Contributor'],
obj=talks)
# Enable constraining
behavior = ISelectableConstrainTypes(talks)
behavior.setConstrainTypesMode(constrains.ENABLED)
behavior.setLocallyAllowedTypes(['talk'])
behavior.setImmediatelyAddableTypes(['talk'])
logger.info("Created and configured %s" % talks.absolute_url())
|