使用另一个跟踪器的 tiki-wiki 跟踪器条目验证
tiki-wiki tracker entry validation using another tracker
情况是这样的:我有两个 Tiki-Wiki 跟踪器:一个称为订单,另一个称为客户。将新项目添加到订单跟踪器时,必填字段之一是从客户跟踪器中选择的客户。有时我们有拖欠客户,需要 "blacklist" 他们,防止为该客户创建新的订单项目。 完成此任务的最佳方法是什么?
我想出了构建自定义验证器的最佳方法,如下所示:
https://doc.tiki.org/Tracker+Field+Validation。然后我会在客户跟踪器中有一个新字段,指示他们是否在黑名单中。验证器会查找客户,如果他们被列入黑名单,则不允许输入新订单。
我的(糟糕的)尝试如下:
<?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;
}
?>
我认为验证器不是正确的方法(抱歉,不允许发表评论,但希望能有所帮助)。这肯定是一个权限问题。
假设客户跟踪器是 "User Tracker" 并且这些用户已登录,您可以使用禁止系统来阻止这些用户使用 Tiki 的各个部分,例如追踪器。更多信息:http://doc.tiki.org/Banning
或者,您将他们放在 "Blacklisted" 组中,并取消从他们创建新跟踪器项目的权限(或者甚至发现他们首先看到订单)。
但是如果这些客户没有登录(这很奇怪)并且订单跟踪器中的客户字段是一个 ItemLink,您可以将其设置为仅接受字段选项中的 "open" 状态客户项目,并将列入黑名单的客户的状态设置为 "closed"。这实际上 "validate" 为您提供了该字段,而无需编写新代码。
好的,所以我确实设法使用验证器解决了这个问题:
<?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;
}
?>
还有一个问题是我的字段类型(项目 Link)正在传递未定义的 $input。一些挖掘表明 validatorslib.php 没有将项目 Link 作为下拉类型处理(项目 Link 的字母键是 'r'):
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') {
// Let's handle drop-down style fields
$validationjs .= 'return $(\'select[name="'.$prefix.$field_value['fieldId'].'"] option:selected\').text(); ';
} else { // Let's handle text style fields
$validationjs .= 'return $("#'.$prefix.$field_value['fieldId'].'").val(); ';
我把第一行改成了:
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') {
现在一切似乎都在工作(而且我不认为我在此过程中破坏了任何其他功能。)当我有时间时,我可能会使其更加健壮(将跟踪器和字段作为参数等。 ).
情况是这样的:我有两个 Tiki-Wiki 跟踪器:一个称为订单,另一个称为客户。将新项目添加到订单跟踪器时,必填字段之一是从客户跟踪器中选择的客户。有时我们有拖欠客户,需要 "blacklist" 他们,防止为该客户创建新的订单项目。 完成此任务的最佳方法是什么?
我想出了构建自定义验证器的最佳方法,如下所示: https://doc.tiki.org/Tracker+Field+Validation。然后我会在客户跟踪器中有一个新字段,指示他们是否在黑名单中。验证器会查找客户,如果他们被列入黑名单,则不允许输入新订单。
我的(糟糕的)尝试如下:
<?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;
}
?>
我认为验证器不是正确的方法(抱歉,不允许发表评论,但希望能有所帮助)。这肯定是一个权限问题。
假设客户跟踪器是 "User Tracker" 并且这些用户已登录,您可以使用禁止系统来阻止这些用户使用 Tiki 的各个部分,例如追踪器。更多信息:http://doc.tiki.org/Banning
或者,您将他们放在 "Blacklisted" 组中,并取消从他们创建新跟踪器项目的权限(或者甚至发现他们首先看到订单)。
但是如果这些客户没有登录(这很奇怪)并且订单跟踪器中的客户字段是一个 ItemLink,您可以将其设置为仅接受字段选项中的 "open" 状态客户项目,并将列入黑名单的客户的状态设置为 "closed"。这实际上 "validate" 为您提供了该字段,而无需编写新代码。
好的,所以我确实设法使用验证器解决了这个问题:
<?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;
}
?>
还有一个问题是我的字段类型(项目 Link)正在传递未定义的 $input。一些挖掘表明 validatorslib.php 没有将项目 Link 作为下拉类型处理(项目 Link 的字母键是 'r'):
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') {
// Let's handle drop-down style fields
$validationjs .= 'return $(\'select[name="'.$prefix.$field_value['fieldId'].'"] option:selected\').text(); ';
} else { // Let's handle text style fields
$validationjs .= 'return $("#'.$prefix.$field_value['fieldId'].'").val(); ';
我把第一行改成了:
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') {
现在一切似乎都在工作(而且我不认为我在此过程中破坏了任何其他功能。)当我有时间时,我可能会使其更加健壮(将跟踪器和字段作为参数等。 ).