首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用另一个跟踪器进行tiki-wiki跟踪器条目验证

使用另一个跟踪器进行tiki-wiki跟踪器条目验证
EN

Stack Overflow用户
提问于 2015-06-12 15:19:14
回答 2查看 154关注 0票数 0

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

我想出了最好的方法来构建一个定制的验证器,如下所示:https://doc.tiki.org/Tracker+Field+Validation。然后,我将在客户追踪器中有一个新的字段,显示他们是否在黑名单上。验证器会查找客户,如果他们被列入黑名单,则不允许输入新订单。

我的(可怜的)尝试如下:

代码语言:javascript
复制
 <?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;
 }
 ?>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-16 20:31:44

好吧,所以我用一个验证器解决了这个问题:

代码语言:javascript
复制
 <?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;
 }
 ?>

在我的字段类型(项目链接)传递未定义的$input时,也存在一个问题。一些深入研究表明,validatorslib.php并没有将项目链接作为下拉类型处理(项目链接的字母键是'r'):

代码语言:javascript
复制
                    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(); ';

我把第一行改为:

代码语言:javascript
复制
                    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') {

现在一切似乎都正常了(我不认为我破坏了这个过程中的任何其他功能)。当我有时间(以跟踪器和字段作为参数等)时,我可能会使它更加健壮。

票数 0
EN

Stack Overflow用户

发布于 2015-06-13 14:13:31

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

假设客户跟踪器是一个“用户跟踪器”,并且这些用户是登录的,您可以使用禁止系统来阻止这些用户使用Tiki的各个部分,例如跟踪器。这里有更多关于这个的信息:http://doc.tiki.org/Banning

或者,您可以将它们放到“黑名单”组中,并删除创建新跟踪项的权限(甚至可以首先发现它们看到订单)。

但是,如果这些客户没有登录(这将是奇怪的),并且订单跟踪器中的Customer字段是ItemLink,则可以将其设置为只接受字段选项中的“打开”状态客户项,并将黑名单客户的状态设置为“已关闭”。这实际上是为您“验证”该字段,而不需要编写新代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30806658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档