有没有办法将PloneFormGen中的当前数据(作为.csv文件)附加到邮件程序?

时间:2015-09-22 00:17:43

标签: plone plone-4.x ploneformgen

我们使用PloneFormGen 1.7.12使用Plone 4.3.3。我有一个请求,要将当前数据包含在表单发送的电子邮件中。我们通常会让编辑访问要下载的数据,但他想发送给他们的人不是编辑,我也不想给他们编辑权限。

如果无法将其添加到邮件程序中,我想我可以创建一个角色并为经过身份验证的用户提供足够的权限来下载数据。是否可以将经过身份验证的权限复制到新角色并添加PloneFormGen:Download Saved Input权限?我真的不想创造额外的角色。此外,我们需要为这些人设置帐户。

2 个答案:

答案 0 :(得分:2)

AFAIK不是没有编码: - )

  1. 创建新的DataSaveAdapter内容类型

    最好的方法是继承现有的并添加一个新字段:

  2. from Products.PloneFormGen.content.saveDataAdapter import FormSaveDataAdapter
    
    
    SendDataAdapterSchema = FormSaveDataAdapter.schema.copy() + atapi.Schema((
        atapi.StringField(
            name='csv_recipients',
            required=False,
            widget=atapi.LinesWidget(
                label=_(u'label_csv_recipients', default=u'CSV recipients'),
            )
        )
    ))
    
    class SendDataAdapter(FormSaveDataAdapter):
        implements(IPloneFormGenActionAdapter)
        ...
        schema = SendDataAdapterSchema
        ...
    
    1. SaveDataAdapter提供onSuccess方法,您可以在其中挂接并发送电子邮件
    2. class SendDataAdapter(FormSaveDataAdapter):
      ...
      
          def onSuccess(self, fields, REQUEST=None, loopstop=False):
              """ saves input data and initiates mail"""
              super(SendDataAdapter, self).onSuccess(fields, REQUEST, loopstop)
              self.send_csv()  # This is where you may implement sending the email.
      

      当然需要完成一些工作(注册内容类型等),但这应该指向正确的方向。

答案 1 :(得分:0)

不确定您的要求,但如果您想在提交表单时将CSV格式的单记录作为邮件发送,您可以自定义邮件程序适配器,像这样:

    <tal:block repeat="field options/wrappedFields | nothing">
        "<span tal:replace="structure python:field.htmlValue(request)" />",
    </tal:block>

请注意,这只有在邮件格式为HTML的情况下才能使用明文tal:repeat,在这些值之间添加换行符。

如果您想授予一组用户查看和下载保存适配器的权限,请转到PFG的控制面板(将/prefs_pfg_permits附加到该网站的网址),其中显示“下载已保存的输入“选中”阅读器“框,然后通过保存适配器的共享选项卡将”可以编辑“-permissioins分配给您希望获得特权的用户和组。