Php 使用另一个跟踪器验证tiki wiki跟踪器条目
情况是这样的:我有两个Tiki Wiki跟踪器:一个叫订单,另一个叫客户。将新项目添加到订单跟踪器时,所需字段之一是从客户跟踪器中选择的客户。偶尔我们会有拖欠的客户,需要将他们列入“黑名单”,以防止为该客户创建新订单项目实现这一目标的最佳方法是什么? 我认为最好的方法是构建一个自定义验证器,如下所示: . 然后,我会在客户跟踪器中有一个新字段,指示他们是否在黑名单上。验证器将查找客户,如果他们被列入黑名单,则不允许输入新订单 我(拙劣的)尝试如下:Php 使用另一个跟踪器验证tiki wiki跟踪器条目,php,tiki-wiki,Php,Tiki Wiki,情况是这样的:我有两个Tiki Wiki跟踪器:一个叫订单,另一个叫客户。将新项目添加到订单跟踪器时,所需字段之一是从客户跟踪器中选择的客户。偶尔我们会有拖欠的客户,需要将他们列入“黑名单”,以防止为该客户创建新订单项目实现这一目标的最佳方法是什么? 我认为最好的方法是构建一个自定义验证器,如下所示: . 然后,我会在客户跟踪器中有一个新字段,指示他们是否在黑名单上。验证器将查找客户,如果他们被列入黑名单,则不允许输入新订单 我(拙劣的)尝试如下: <?php function
<?php
function validator_Blacklist($input, $parameter = '', $message = '')
{
$trklib = TikiLib::lib('trk');
//parse_str($parameter, $arr);
//$info = $trklib->get_tracker_field($arr['fieldId']);
$bl = $trklib->get_item(4,204,$input);
if($bl>=1)
return tra("Customer is blacklisted.");
return true;
}
?>
我认为验证器不是正确的选择(对不起,不允许评论,但希望能有所帮助)。这当然是一个权限问题 假设客户跟踪器是“用户跟踪器”,并且这些用户已登录,您可以使用禁止系统阻止这些用户使用Tiki的各个部分,例如跟踪器。更多关于这一点: 或者,您将他们放入“黑名单”组,并从中删除创建新跟踪器项目的权限(甚至可以让他们首先看到订单)
但是,如果这些客户没有登录(这可能很奇怪),并且订单跟踪器中的Customer字段是ItemLink,则可以在字段选项中将其设置为仅接受“打开”状态的Customer项目,并将黑名单客户的状态设置为“关闭”。实际上,这将在不需要编写新代码的情况下为您“验证”该字段。好的,所以我使用验证程序解决了这个问题:
<?php
function validator_Blacklist($input, $parameter = '', $message = '')
{
$trklib = TikiLib::lib('trk');
$query = strtoupper(trim($input)); //$input has a trailing space which affects the query, strtoupper probably not needed
$result = $trklib->get_item_id(4,14,$query,false); //usage: get_item_id(tracker_id,field_id,string_query,partial_match);
$info = $trklib->get_tracker_item($result); //pass item id retrieved above to get all it's fields
$status = intval($info[204]); //array item 204 has the customer service status, 205 has a descriptive comment
if ($status==1) {
return tra("<strong><font color=red>DO NOT SERVICE: " . $info[205] . "</font></strong>");
}
return true;
}
?>
我将第一行更改为:
if ( $field_value['type'] == 'g' or $field_value['type'] == 'e' or $field_value['type'] == 'y' or $field_value['type'] == 'd' or $field_value['type'] == 'D' or $field_value['type'] == 'r') {
现在一切似乎都在运行(我不认为我在这个过程中破坏了任何其他功能。)我可能会在有时间的时候使它更健壮(将跟踪器和字段作为参数,等等) 更确切地说,问题是什么?基本上我是如何做到这一点的?上面的代码不起作用。我一直在寻找详细说明PHP函数所做工作的文档,但毫无用处。这是一个很好的响应,不幸的是,它不是一个用户跟踪器,只是一个普通的跟踪器。
if ( $field_value['type'] == 'g' or $field_value['type'] == 'e' or $field_value['type'] == 'y' or $field_value['type'] == 'd' or $field_value['type'] == 'D' or $field_value['type'] == 'r') {