Skip to content

Commit 6688dd7

Browse files
committed
Changed display conditions
I was trying to solve issue with display conditions when using simple view in ticket menu The issue was that when you add a container, field to it, and then create display condition, the condition will not work as expected in simple view of ticket creation. The condition will never be satisfied and your field will always stay visible, no matter what condition you created Turned out, GLPI_POST_ITEM HOOK send item parameter without 'type' and 'itilcategory_id', those fields were contained in options parameter. This is small work around, works fine for my use case
1 parent ebd334f commit 6688dd7

2 files changed

Lines changed: 33 additions & 4 deletions

File tree

inc/containerdisplaycondition.class.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,16 +406,19 @@ public function computeDisplayContainer($item, $container_id)
406406

407407
if (count($found_dc)) {
408408
$display = true;
409+
409410
foreach ($found_dc as $data) {
410411
$displayCondition->getFromDB($data['id']);
411412
$result = $displayCondition->checkCondition($item);
413+
412414
if (!$result) {
413415
return $result;
414416
}
415417
}
416418

417419
return $display;
418420
} else {
421+
Toolbox::logInFile("FIELDS_LOG","no condition found -> display container");
419422
//no condition found -> display container
420423
return true;
421424
}
@@ -425,10 +428,13 @@ public function checkCondition($item)
425428
{
426429
$value = $this->fields['value'];
427430
$condition = $this->fields['condition'];
428-
$searchOption = Search::getOptions(get_class($item))[$this->fields['search_option']];
431+
432+
$searchOption = Search::getOptions(get_class($item))[$this->fields['search_option']];
429433

430434
$fields = array_merge($item->fields, $item->input);
431435

436+
Toolbox::logInFile("FIELDS_LOG", " [ WE NEED TO CHECK {$value} ({$condition}) {$fields[$searchOption['linkfield']]} ] ");
437+
432438
switch ($condition) {
433439
case self::SHOW_CONDITION_EQ:
434440
// '='

inc/field.class.php

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,18 @@ public static function showDomContainer($id, $item, $type = 'dom', $subtype = ''
886886
public static function showForTab($params)
887887
{
888888
$item = $params['item'];
889+
// var_dump($item);
890+
if($item->fields['type'] == "")
891+
{
892+
$item->fields['type'] = $params['options']['type'];
893+
}
894+
if($item->fields['itilcategories_id'] == "")
895+
{
896+
$item->fields['itilcategories_id'] = $params['options']['itilcategories_id'];
897+
}
898+
// var_dump($item->fields);
899+
// var_dump($params);
900+
Toolbox::logInFile("FIELDS_LOG", "[ Recieved parameters got item type ({$item->fields['type']}) ] ");
889901

890902
$functions = array_column(debug_backtrace(), 'function');
891903
$subtype = isset($_SESSION['glpi_tabs'][strtolower($item::getType())]) ? $_SESSION['glpi_tabs'][strtolower($item::getType())] : '';
@@ -956,7 +968,7 @@ public static function showForTab($params)
956968
}
957969

958970
$html_id = 'plugin_fields_container_' . mt_rand();
959-
if (strpos($current_url, 'helpdesk.public.php') !== false) {
971+
if (strpos($current_url, 'helpdesk.public.php') !== false || strpos($current_url, 'tracking.injector.php') !== false) {
960972
echo "<div id='{$html_id}' class='card-body row mx-0' style='border-top:0'>";
961973
echo "<div class='offset-md-1 col-md-8 col-xxl-6'>";
962974
$field_options = [
@@ -967,7 +979,12 @@ public static function showForTab($params)
967979
echo "<div id='{$html_id}'>";
968980
}
969981
$display_condition = new PluginFieldsContainerDisplayCondition();
970-
if ($display_condition->computeDisplayContainer($item, $c_id)) {
982+
983+
Toolbox::logInFile("FIELDS_LOG", "[ Item with Container ID {$c_id} and type ({$item->fields['type']}) ] ");
984+
985+
if ($display_condition->computeDisplayContainer($item, $c_id))
986+
{
987+
Toolbox::logInFile("FIELDS_LOG", " [ WE COMPUTED THAT WE NEED TO SHOW CONTAINER OAOAOOA ] ");
971988
self::showDomContainer(
972989
$c_id,
973990
$item,
@@ -976,14 +993,20 @@ public static function showForTab($params)
976993
$field_options ?? [],
977994
);
978995
}
979-
if (strpos($current_url, 'helpdesk.public.php') !== false) {
996+
else
997+
{
998+
Toolbox::logInFile("FIELDS_LOG", " [ NO NEED TO SHOW CONTAINER AAAAAARGHHHHHH ] ");
999+
}
1000+
if (strpos($current_url, 'helpdesk.public.php') !== false || strpos($current_url, 'tracking.injector.php') !== false) {
9801001
echo '</div>';
9811002
}
9821003
echo '</div>';
9831004

9841005
//JS to trigger any change and check if container need to be display or not
9851006
$ajax_url = Plugin::getWebDir('fields') . '/ajax/container.php';
9861007
$items_id = !$item->isNewItem() ? $item->getID() : 0;
1008+
1009+
9871010
echo Html::scriptBlock(
9881011
<<<JAVASCRIPT
9891012
function refreshContainer() {

0 commit comments

Comments
 (0)