WikiBox(维基框)

摘要:允许通过电子邮件发布到PmWiki并从中阅读
版本:2008-08-17
先决条件:2.2.x beta,PHP5
状态:Alpha
维护人员:彼得·鲍尔斯
用户:+4(查看/编辑)

这个食谱回答的问题

此部分是可选的;用它来指出这个食谱要回答的问题类型(如果有的话)。

  • 如何通过电子邮件发布到wiki页面?
  • 如何通过在电子邮件中以附件形式发送文件来上传?
  • 如何通过电子邮件获取页面内容(源代码或HTML)?

描述

允许通过电子邮件发布和阅读PmWiki页面。

嘿!www.qdk.org正在进行一项alpha测试(实际上可能现在还处于beta测试阶段)。如果你有兴趣参加(或者至少看看现实生活中的wikibox是什么样子的),请随时查看。您可以发送电子邮件至wikibox@qdk.org用“用法”这一主题来概括。或者你可以去参观http://www.qdk.org/pmwiki/pmwiki.php?n=WikiBox.WikiBox如果您想快速了解测试是如何组织的,涉及哪些页面,等等。

安装

include_one(“$FarmD/cookbook/toolbox.php”);include_once(“$FarmD/cookbook/SecLayer.php”);include_one(“$FarmD/cookbook/wikibox.php”);include_once(“$FarmD/cookbook/wikimail.php”);$wbModerator='主持人@localhost';  // 将其替换为主持人的电子邮件地址//如果超过1,也可以将其设置为地址数组#通常,对wmMkProfilePOP3()的此调用将在单行上wmMkProfilePOP3(“wikibox”,//配置文件的名称-必须是wikibox,除非您更改$wbPOP3Profile“pop3.mydomain.com”,//WikiBox将在其中接收邮件“myusername”,//用户名WikiBox将用于拾取邮件“机密”);//WikiBox将用于接收邮件的密码#您还可以在概要文件中设置其他几个可选参数,但这3个参数通常就足够了

注意需要从当前主持人@localhost无论你用什么。

  • 创建页面SiteAdmin。WikiBoxPageAuth授权您感兴趣的页面。以下内容将授予测试组中任何文件的完全权限:
全部=覆盖、插入、创建、读取编辑=覆盖、创建、插入测试*:全部
  • 创建页面SiteAdmin。WikiBoxEmailAuth定义了至少一个将成为主持人的电子邮件地址(电子邮件地址必须与此人电子邮件的“发件人”字段中收到的内容相匹配,并且“xyz”应替换为此人的wikibox-passwd,这是一个用于验证的非关键密码)
主持人@localhost:::1:0:xyz:::::

确保更换主持人@localhost上面的地址与您在上面的$wbModerator中使用的地址相同!您可能想要一个比xyz稍好的密码,但这取决于您…:-)

  • 将标记(:wikibox PROCESS verbose=2:)放置在页面上(可选(:条消息:)标记在同一页上)。你可以选择你想要的任何页面,但WikiBox除外。检查是标准。
    • 您可以将详细信息设置为1,也可以将其忽略在一起,这取决于您需要多少信息。(:条消息:)提供了大量信息(可能是更高的调试级别),而verbose=2是非常合理和有用的。
  • 安全默认值可以修改如下(如果您不喜欢默认值,请选择后两个选项之一):
$wbControl['Write']=数组('Receive','UserConfirm','Mediate','Complete');//违约$wbControl['Write']=数组('Receive','UserConfirm','Complete');//无主持人要求$wbControl['Write']=数组('Receive','Complete');//无主持人或用户确认要求
  • 您还可以更改$wbControl['Usage']、$wbControl['Subscribe']、$wbControl['Unsubscribe'],$wbControl['Blacklist'],$wbControlCenter['Write']和$wbCtrl['Read']
  • 可以通过修改$wbRequire[]和$wbPrepFor[]数组来实现更精细的配置控制,但这需要另一天进行记录。
  • 你会想要你的WikiBox。定期检查加载的页面。为此,您需要某种方式按照给定的时间表自动加载网页(例如,工作时间每10分钟、晚上每小时和周末,诸如此类)。克罗恩wget公司是linux环境中的工具,可以很好地实现这一点。为了在www.qdk.org上运行测试版,我使用了这个脚本(名为/usr/local/bin/checkqdk,并且具有可执行权限):
echo“正在检查…”wget-N--无缓存-E“http://www.qdk.org/pmwiki/pmwiki.php?n=WikiBox.检查“>/dev/null 2>&1#sed-n-e’s/<[^>]*>//g’-e’/WIKIBOX PROCESSING/,/WIKIBOX COMPLETE/p’pmwiki.php\?n=WikiBox。支票.html

(如果您是从命令行而不是通过CRON运行最后一行,那么最后一行很有用——如果您删除最后一行开头的“#”,那么它将在运行期间为您提供wikibox输出的快速摘要。)

然后在/etc/crontab中需要这样的条目:

#周一至周五上午8点至下午5点每15分钟0,15,30,45 8-17**1-5根/usr/local/bin/checkqdk#周一至周五上午8点前和下午5点后每30分钟0,30 0-8,17-23**1-5根/usr/local/bin/checkqdk#周末每小时0 0-23**6-7根/usr/local/bin/checkqdk

显然,您需要确定适合您的时间表。

请注意,虽然这个cron作业可以位于托管服务器上,但它决不能位于该计算机上。您可以从家中的机器、朋友的装有linux的机器等运行该脚本。唯一的要求是(a)机器必须保持运行,(b)必须是装有cron的机器(通常是linux,尽管cygwin可能有windows?)和(c)它必须能够通过网络访问您的站点(通常这意味着只需连接到internet)。

笔记

电子邮件由主题和正文组成。对于WikiBox,主题变成了一个命令,指定电子邮件正文应放置在给定页面的何处以及如何放置。电子邮件的正文应该是纯文本,因为它将被插入到页面字符中,就像它出现在电子邮件正文中一样。

以下是各种有效的启动命令(置于主题中):

  • 使用
    • 不需要安全或确认-将通过回复邮件返回一条简单的使用消息
  • 订阅
    • 安全性当前需要用户确认和主持人确认
    • 满足所有安全要求后,原始发送电子邮件将添加到SiteAdmin。WikiBox电子邮件授权
  • 退订
    • 安全性当前需要用户确认
    • 满足所有安全要求后,原始发送电子邮件将在SiteAdmin中标记为非活动。WikiBox电子邮件授权
  • 黑名单
    • 安全性当前需要用户确认
    • 满足所有安全要求后,原始发送电子邮件将在SiteAdmin中标记为黑名单。WikiBox电子邮件授权
  • 写入[[Test.Foo]]
  • 覆盖[[Test.Foo]]
  • 附加到[[Test.Foo]]
  • 在前面加上[[Test.Foo]]
  • 插入到[[Test.Foo]]在/此模式/i之后
  • 插入到[[Test.Foo]]before/此模式/
  • 插入到[[Test.Foo]]替换/此模式/
  • 插入到[[Test.Foo]]而不是/这种模式/
    • 默认情况下,所有写操作的安全性都需要用户确认和主持人确认
    • 满足所有安全要求后,电子邮件正文将写入指定位置中指定的页面
  • 从中读取[[Test.Foo]]规则集=源|text|full fmt=html|text|两者
    • 默认情况下,读取操作的安全性要求对发起的电子邮件进行适当的密码身份验证
    • 满足所有安全要求后,将通过返回电子邮件返回请求的页面
    • 规则集=x和fmt=x的选项是可选的
      • ruleset=source-返回页面的未修改源
      • ruleset=text-run、(:comment:)和(:include:)规则,以便更好地表示页面的文本
      • ruleset=full-fun所有标记规则(最好设置fmt=html)

每个写命令都由一个主命令、可选填充词、一个页面名称,然后(如果主命令是“insert”)一个位置和一个模式组成。

主写入命令

  • “写入”、“覆盖”和“替换”是同义词。如果页面不存在,他们将创建一个页面,如果页面已经存在,则覆盖任何现有内容。
  • “附加”在页面中任何现有文本的末尾添加电子邮件正文(如果不存在,则创建页面)
  • “Prepend”在页面中任何现有文本之前添加电子邮件正文(如果不存在,则创建页面)
  • “插入”允许在电子邮件正文中相对于页面上现有文本的某些模式放置文本。如果“插入”是主命令,则必须指定位置子命令和模式
    • 位置子命令
      • “之后”-找到图案并插入紧跟其后的文本
      • “之前”-找到图案并在图案前插入文字
      • “replacement”(或同义词“not”)用电子邮件正文替换模式
    • 图案
      • 模式可以是preg_match可以接受的任何有效正则表达式。模式修饰符(i、m、s等)也有效。
      • 页面上的模式应该是唯一的,否则电子邮件正文的文本将被多次插入,每次模式匹配时插入一次。

填充词

主命令和页面名称之间的填充词,如“on”、“in”、“to”、“into”、“at the top of”、“the bottom of”等是可选的,将被忽略。它们只是使命令更具可读性。请注意,填充词实际上被忽略了。“在顶部插入[[页码]]“不是”的前缀[[页码]]“--前者仍需要位置子命令和模式,而您所说的“在顶部”将被完全忽略。

第页

页面必须指定为[[组页]]。这是必需的。这是电子邮件正文中的文本将放置到的页面。

电子邮件正文

仅在当前时间显示文本。我想这是不言而喻的,但标记是文本,所以任何有效的pmwiki标记都可以放在电子邮件正文中。

如果您发送HTML或其他格式的电子邮件,则只会提取文本部分。如果要格式化页面,请在文本中放置pmwiki标记。

附件可以自动上传到正在写入的任何页面(仅对写入页面的请求有效)。只需遵循以下说明:

  1. 附加文件,注意文件名的准确拼写
  2. 包括文本wikibox-附件:文件名在一条线上身体(确保你得到了文件名的准确拼写和大小写)。这一行不会写入页面,但它表明该附件是您有意上传的。
  3. 通常,您会希望包括一个“附件:文件名Δ“标记也一样,但这取决于你——它可以防止你在没有链接的情况下“孤立”上传。。。
  4. 假设您的wikibox帐户有密码(应该有密码),然后确保不要忘记指定密码

以下是上述示例,您可以发送一封带有附件“prettypture.jpg”的电子邮件:

主题: 写入[[Test.ShowThePicture]]

wikibox-passwd:mysecretpasswikibox-attach:预类型.jpg嘿!看看这张漂亮的照片!附:prettypture.jpg(此行下面的所有内容都是为了好玩,以显示可以包含并写入其他标记的可能性页面——上面的前三行,结合主题和附件,是需要制作的通过附件上传。)*和**一个***列表“”黑体“”和“”字母化“”文本[[Test.Link|+]]放置链接以及我想做的任何其他标记

标记/用法

在加载带有适当标记的页面之前,Wikibox不会执行任何操作。使用的标记是(:wikibox:)带有可能的参数(特别是(:wikibox进程详细信息=2:)这将是规范)。目前,只有在加载此页面时才会处理电子邮件(“PROCESS”是必需的参数)。错误将记录到SiteAdmin。WikiBoxErrorLog-应该定期检查此页面,尤其是当您没有得到预期结果时。如果你真的遇到麻烦,你可以设置$DebugLevel=2并确保(:条消息:)标记存在于页面上,然后您需要尝试完成调试跟踪语句。

如果你想在某个页面上放置一个注册表单(WikiBox.signup是标准和推荐的),那么只需创建该页面并放置(:wikibox注册:)作为该页面上的唯一标记。然后,用户将能够在那里注册一个wikibox帐户(作为向您的网站的主wikibox地址发送主题为“订阅”的消息的替代方法,然后进行仲裁等)。

请注意,用户使用(:wikibox:)标记无关——每个电子邮件地址都链接到一组授权(用户通过表单界面注册时内存中的密码)。这些授权(属于电子邮件地址用户)将临时替换加载页面的真实用户的授权。这使得管理员可以加载页面,而不必担心可能发生非法操作,也可以允许特权用户进行更改(或请求特权读取),而无需具有这些特定特权的人加载页面。

发行说明

如果配方有多个版本,则可以在此处放置版本注释。请注意,人们通常更容易使用“发布日期”而不是“版本号”。

  • 2008-08-17大量小错误修复和改进。我们已经达到了相当好的稳定性。这里最大的变化是mime功能,因此可以处理附件和接收HTML电子邮件。此外,如果用户使用表单界面注册,则会生成其当前授权的快照,并用于将来从该电子邮件地址进行的任何读取/编辑操作。
  • 2008-08-08发布,与wikimail保持同步。其他一般改进、错误修复等。
  • 2008-08-02次要版本,与wikimail中的函数名称更改相对应。这里实现的文档有两个版本,完全错误:-(
  • 2008-06-15执行拒绝命令,删除收件箱。允许不检查空密码。主持人的预期发件人设置。
  • 2008-06-12完全重新编码、重新设计等,仍然只允许使用明文电子邮件,不支持附件。在安全性等方面具有更好的粒度和可配置性。
  • 2008年5月18日首次发布。只允许明文电子邮件,不支持附件。

另请参阅

贡献者

路线图

  • 记录如何通过cron运行标记,以便人们可以使用它。(是不是就这样?)
  • 重新实现表单界面(不再工作)
    • 在表单中,自动转到消息的下一页,而不是要求用户单击“下一步”。
  • 找出SASL并记录下来。
  • 允许对任何标题元素进行验证(即。,$ValidHeaders['from']=数组('me@mydomain.com', 'you@yourdomain.com');)
  • 除了基于表单的接口和基于cron的接口之外,还允许每个页面加载几秒的处理选项(可能有一次是n秒?)。。。这与当前处理ImportText或更新页面缓存类似。

评论

在我的config.php中,调用wmMkProfilePOP3的行似乎有问题。当我的wiki出现时,它将变为空白并停止运行(HTTP 500内部服务器错误)。我已经检查过几次了,还使用了直接从这个页面复制出来的行——虽然配置不正确,但仍然会产生一个功能站点。可能出了什么问题?我如何测试它?戴维·巴斯勒2009年2月27日上午08:49

你是PHP5还是PHP4?PHP5是此配方的要求。请给我写封信,或者给我留下一些方式与你联系,我们可以一起追查。。。彼得·鲍尔斯2009年2月27日下午02:06

我想出来了。顺便说一句,我在标准godaddy托管帐户上使用PHP5。我打开了php5.ini文件的错误报告,发现php没有找到烹饪书文件。我用双引号替换了config.php中include_once语句中路径名周围的单引号,就像我的include_once语句的其余部分一样,它也起到了作用。戴维·巴斯勒2009年3月3日上午08:21

你完全正确。我已经在上面的示例配置中修复了这些问题。

现在我得到了以下错误:wbWriteToPage():RetrieveAuthPage(。)失败。返回FALSE戴维·巴斯勒2009年3月3日上午09:11

请登录WikiBox。ErrorLog并查看那里的错误消息是否有助于澄清任何问题。通常这是一个授权问题。

我可以不将wikibox用于受密码保护的页面吗?戴维·巴斯勒2009年3月3日下午01:46

是的,你可以。但您用于提交更改的ID必须具有适当的授权。通过电子邮件而不是表单界面注册的用户没有授权(就像他根本没有登录一样)。而通过表单界面注册的用户可以获得注册时存在的任何授权。注意“标记”部分下面的第2和第3段。同时引用发行说明:
此外,如果用户使用表单界面注册,则会生成其当前授权的快照,并用于将来从该电子邮件地址进行的任何读取/编辑操作。
话虽如此,我不得不为这个食谱的文档道歉。这需要做很多工作……非常感谢您做出的任何改进。

太棒了!让它工作起来。现在我必须完成我的CRON脚本。这将彻底改变我的日志。我会尽力整理文件。大卫·贝斯勒

我的cron脚本不断出现此错误:

/home/content/a/b/c/abcusername/html/abcusername/wiki/mywiki后置检查器:第2行:1:重定向不明确

(我已经匿名了路径和文件名)有什么主意吗?戴维·巴斯勒2009年3月3日下午09:57

你能给我看更多你的cron脚本吗?你在什么操作系统下运行。(您提到的cron建议使用linux,但我只是想确认一下。)您的cron是在托管pmwiki安装的同一台机器上运行还是远程运行?您是尝试使用wget加载页面,还是尝试使用适当的设置直接在pmwiki.php上调用php?我已经在不同的环境中成功地使用了wget,但我从未尝试过后者,尽管一旦你弄清了输入和输出,它应该会工作得很好(而且效率更高)。wget可以很简单,比如单词wget后面跟一个空格,后面跟您在地址栏中放置的任何URL,以便使用标记访问页面。。。但无论wget使用什么,都需要从网址://或其他。。。

由于某些原因,尝试直接cron脚本会产生“file not found”错误,我无法通过该错误。我将script/wget方法与以下内容一起使用:

wget“(wget)http://wiki.xxxxxxxxx.com/pmwiki.php?n=WikiBox.Check(检查)"

这是有效的。所以现在,看起来我把整个事情都安排好了。非常感谢你的帮助。戴维·巴斯勒2009年3月4日凌晨02:32

很高兴最终能成功,希望你能继续做得好。FYI cron在运行脚本时有一个非常简约的环境。也就是说,您可能没有适当的$PATH,甚至可能没有运行bash——您可能正在运行一些精简的shell。如果您有兴趣查找它,请告诉我找不到哪个文件,我们可以跟进。如果你对现在的工作方式感到满意,那么我也很高兴。
PS如果您决定持续使用此功能,您可以确保在WikiBox-Users页面上“签名”吗?(它还没有完全实现,但看起来这是未来最有可能对食谱进行评级的方式……)谢谢!

  • 如何指定远程SMTP主机(具有相应的登录信息),而不是依赖本地传输?塔穆斯2011年6月13日下午08:15
我已经有一段时间没有使用这个食谱了,所以细节有点模糊,但看看维基邮件配置,您将看到的设置$WikiMailSMTP。如果不起作用,请告诉我,我会详细调查的。
谢谢,我会调查的。

我一定是把配置搞砸了。发送给用户或审阅者以执行操作的邮件的发件人:和回复收件人:设置为_www@portfolio.paladin.local网站,这是我mac上的本地web服务器。这不应该设置为邮箱WikiBox吗。检查一下?

以下是我的config.php部分:

##为wikibox添加内容-允许通过电子邮件添加wiki页面##http://www.pmwiki.org/wiki/Cookbook/WikiBox包含一次(“$农场D/cookbook/toolbook.php“);包含一次(“$农场D/烹饪书/SecLayer.php“);包含一次(“$农场D/烹饪书/wikibox.php“);包含一次(“$农场D/烹饪书/wikimail.php”);$wbModerator='塔马拉@localhost';  // 将其替换为主持人的电子邮件地址//如果超过1,也可以将其设置为地址数组#通常,对wmMkProfilePOP3()的此调用将在单行上wmMkProfilePOP3(“wikibox”,//配置文件的名称-必须是wikibox,除非您更改$wbPOP3Profile“localhost”,//主机WikiBox将在其中拾取邮件“testwiki”,//用户名WikiBox将用于拾取邮件------);            // WikiBox用来接收邮件的密码

我的网站管理员。WikiBoxEmailAuth包含:

塔马拉@locahost:::1:0:--------::::::

(我一点也不清楚密码字段是什么用的…)没关系,我想出来了。它会出现在要上传的任何页面的消息正文中。塔穆斯2011年6月14日12:49 AM

塔穆斯2011年6月14日12:47 AM


用户注释+4:如果你使用、使用或复习了这个食谱,你可以添加您的姓名这些统计数据显示在Cookbook列表中,将帮助新手浏览wiki。