使用其他跟踪器进行tiki-wiki跟踪器条目验证

时间:2015-06-12 15:19:14

标签: php tiki-wiki

所以情况就是这样:我有两个Tiki-Wiki跟踪器:一个叫Orders,另一个叫Customer。将新项目添加到订单跟踪器时,所需的其中一个字段是从客户跟踪器中选择的客户。偶尔我们会拖欠客户并需要"黑名单"它们,阻止为该客户创建新的订单商品。 实现这一目标的最佳方法是什么?

我认为这是构建自定义验证器的最佳方法,如下所示: 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;
 }
 ?>

2 个答案:

答案 0 :(得分:0)

我不认为验证器是正确的方法(抱歉,不允许发表评论,但希望提供帮助)。这肯定是一个权限问题。

假设客户跟踪器是&#34;用户跟踪器&#34;并且这些用户已登录,您可以使用禁止系统来阻止这些用户使用Tiki的各个部分,例如跟踪器。更多内容:http://doc.tiki.org/Banning

或者你把它们放入&#34;黑名单&#34;分组并删除从中创建新跟踪器项目的权限(或者甚至发现他们首先看到订单表单)。

但是,如果这些客户未登录(这将是奇怪的)并且订单跟踪器中的客户字段是ItemLink,您可以将其设置为仅接受&#34;打开&#34; status字段选项上的客户项目,并将列入黑名单的客户的状态设置为&#34;已关闭&#34;。那将实际上&#34;验证&#34;那个字段,无需编写新代码。

答案 1 :(得分:0)

好的,所以我确实设法使用验证器来解决这个问题:

 <?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;
 }
 ?>

还有一个问题,我的字段类型(Item Link)传递了未定义的$ input。一些挖掘表明,validatorslib.php没有将Item Link作为下拉类型处理(Item 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') {

现在一切似乎都在工作(我认为我在这个过程中没有打破任何其他功能。)当我有时间(将跟踪器和字段作为参数等)时,我可能会更加强大。