Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用另一个跟踪器验证tiki wiki跟踪器条目_Php_Tiki Wiki - Fatal编程技术网

Php 使用另一个跟踪器验证tiki wiki跟踪器条目

Php 使用另一个跟踪器验证tiki wiki跟踪器条目,php,tiki-wiki,Php,Tiki Wiki,情况是这样的:我有两个Tiki Wiki跟踪器:一个叫订单,另一个叫客户。将新项目添加到订单跟踪器时,所需字段之一是从客户跟踪器中选择的客户。偶尔我们会有拖欠的客户,需要将他们列入“黑名单”,以防止为该客户创建新订单项目实现这一目标的最佳方法是什么? 我认为最好的方法是构建一个自定义验证器,如下所示: . 然后,我会在客户跟踪器中有一个新字段,指示他们是否在黑名单上。验证器将查找客户,如果他们被列入黑名单,则不允许输入新订单 我(拙劣的)尝试如下: <?php function

情况是这样的:我有两个Tiki Wiki跟踪器:一个叫订单,另一个叫客户。将新项目添加到订单跟踪器时,所需字段之一是从客户跟踪器中选择的客户。偶尔我们会有拖欠的客户,需要将他们列入“黑名单”,以防止为该客户创建新订单项目实现这一目标的最佳方法是什么?

我认为最好的方法是构建一个自定义验证器,如下所示: . 然后,我会在客户跟踪器中有一个新字段,指示他们是否在黑名单上。验证器将查找客户,如果他们被列入黑名单,则不允许输入新订单

我(拙劣的)尝试如下:

 <?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') {