2015-06-12 1 views
0

Итак, вот так: у меня есть два трекера Tiki-Wiki: один называется Orders, а другой называется Customer. Когда новый элемент добавляется в Trackers Orders, одним из необходимых полей является клиент, выбранный из трекера Customer. Иногда у нас есть делинквентные клиенты и им необходимо «занести в черный список» их, предотвращая создание новых заказов для этого клиента. Каков наилучший способ сделать это?Проверка входа в систему 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; 
} 
?> 

Был также вопрос, где мой тип поля (пункт Link) проезжал неопределенный $ ввод. Некоторое рытье показало, что validatorslib.php не обрабатывал Item Link в качестве типа выпадающего (буквенную клавишу для товара Ссылки быть «г»):

    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

Я не думаю, что валидатор правильный путь (извините, не разрешено комментировать, но в надежде помочь). Это, безусловно, вопрос разрешения.

Предполагая, что трекер Customer является «User Tracker», и эти пользователи вошли в систему, вы можете использовать систему запрета, чтобы эти пользователи не могли использовать различные части Tiki, например. Трекеры. Подробнее здесь: http://doc.tiki.org/Banning

В качестве альтернативы вы помещаете их в группу «Черный список» и удаляете разрешение на создание из них новых элементов трекера (или даже обнаружите, что они видят форму заказа в первую очередь).

Если, однако, эти клиенты не вошли в систему (что было бы странно), а поле «Клиент» в треке «Заказы» - это ItemLink, вы можете установить это, чтобы принимать только «открытые» состояния. Элементы клиента в параметрах поля и устанавливать статус «закрытых» клиентов «закрыто». Это фактически «подтвердило» это поле для вас, без необходимости писать новый код.

+0

Это отличный ответ, к сожалению, это не трекер пользователя, просто обычный. – mrtc

Смежные вопросы