2015-06-12 34 views
0

所以情況如下:我有兩個Tiki-Wiki跟蹤器:一個叫Orders,另一個叫Customers。將新項目添加到訂單跟蹤器時,所需的其中一個字段是從客戶跟蹤器中選擇的客戶。偶爾我們會有違規客戶,需要將他們「黑名單」,防止爲此客戶創建新的訂單項目。 完成此操作的最佳方法是什麼?使用另一個跟蹤器的tiki-wiki跟蹤器條目驗證

我想通過這種方法來構建自定義驗證器的最佳方法,如下所示: 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; 
} 
?> 
+0

更確切地說是什麼問題? – Alioza

+0

基本上我該如何做到這一點?上面的代碼不起作用。我一直在尋找詳細說明PHP函數無用的文檔。 – mrtc

回答

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

還有在我的字段類型(項鍊接)路過未定義$輸入的問題。一些挖顯示validatorslib.php沒有處理項目鏈接的下拉類型(項鍊接是「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') { 

現在一切似乎都在奏效(我不認爲我在這個過程中打破了其他任何功能)。當我有時間的時候,我可能會讓這更強大(以跟蹤器和字段爲參數等)。

0

我不認爲驗證是正確的方式去(對不起,不允許發表評論,但希望能幫助)。這肯定是一個權限問題。

假設客戶跟蹤器是「用戶跟蹤器」,並且這些用戶已登錄,則可以使用禁止系統來防止這些用戶使用Tiki的各個部分,例如,跟蹤器。更多此處:http://doc.tiki.org/Banning

或者,您將它們置於「黑名單」組中,並刪除從其創建新跟蹤器項目的權限(或者甚至可以發現他們首先看到訂單表單)。

如果這些客戶沒有登錄(這可能很奇怪),訂單跟蹤器中的客戶字段是ItemLink,您可以將其設置爲只接受字段選項上的「打開」狀態客戶項目,並設置被列入黑名單的客戶的狀態爲「關閉」。這實際上可以「驗證」該字段,而無需編寫新的代碼。

+0

這是一個很好的響應,不幸的是它不是一個用戶跟蹤器,只是一個普通的跟蹤器。 – mrtc