[TikiWiki-commits] [Git][tikiwiki/tiki][30.x] [FIX] ItemLink: Enhance multi-value selection handling in item link selector
"Victor Emanouilov \(@kroky\) via TikiWiki-cvs" <[email protected]> Thu, 02 Jul 2026 12:38:06 +0000
| Newsgroups | gmane.comp.cms.tiki.cvs |
|---|---|
| Message-ID | <6a465bae4bef_3819a078279ae@gitlab-sidekiq-low-urgency-cpu-bound-v2-65d6798dbd-4c6pb.mail> |
Victor Emanouilov pushed to branch 30.x at Tiki Wiki CMS Groupware / Tiki
Commits:
812a2822 by Steven ngesera at 2026-07-02T12:30:21+00:00
[FIX] ItemLink: Enhance multi-value selection handling in item link selector
---
* [FIX] ItemLink: Add option to force object selector for multi-value selection
(cherry picked from commit 48e67b24ae9683b6a5d979485b9bc164ce1e524e)
* [FIX] ItemLink: Enhance multi-value selection handling in item link selector
(cherry picked from commit 7d2d5055799cc57e68235d556bbcebda081be6aa)
See merge request tikiwiki/tiki!10638
- - - - -
2 changed files:
- lib/core/Tracker/Field/ItemLink.php
- templates/trackerinput/itemlink_selector.tpl
Changes:
=====================================
lib/core/Tracker/Field/ItemLink.php
=====================================
@@ -284,6 +284,16 @@ class Tracker_Field_ItemLink extends \Tracker\Field\AbstractItemField implements
],
'legacy_index' => 12,
],
+ 'forceObjectSelector' => [
+ 'name' => tr('Force object selector'),
+ 'description' => tr('Override the automatic widget selection. 1 forces the object selector (search panel with checkboxes for multi-select). 2 forces the dropdown. 0 lets the system decide (default behavior).'),
+ 'filter' => 'int',
+ 'options' => [
+ 0 => tr('System default'),
+ 1 => tr('Yes'),
+ 2 => tr('No'),
+ ],
+ ],
'indexRemote' => [
'name' => tr('Index remote fields'),
'description' => tr('Index one or multiple fields from the master tracker along with the child, separated by |'),
@@ -344,8 +354,16 @@ class Tracker_Field_ItemLink extends \Tracker\Field\AbstractItemField implements
'value' => $value,
];
- if ($this->canHaveMultipleValues() && ! is_array($data['value'])) {
- $data['value'] = explode(',', $data['value']);
+ if ($this->canHaveMultipleValues()) {
+ if (isset($requestData[$string_id])) {
+ $parts = is_array($data['value']) ? array_values($data['value']) : preg_split('/[\s,]+/', $data['value'], -1, PREG_SPLIT_NO_EMPTY);
+ if (array_filter($parts, fn($v) => str_starts_with($v, 'trackeritem:'))) {
+ $parts = array_values(array_filter(array_map(fn($v) => preg_replace('/^trackeritem:/', '', trim($v)), $parts)));
+ }
+ $data['value'] = $parts;
+ } elseif (! is_array($data['value'])) {
+ $data['value'] = explode(',', $data['value']);
+ }
}
return $data;
@@ -383,6 +401,15 @@ class Tracker_Field_ItemLink extends \Tracker\Field\AbstractItemField implements
return false;
}
+ $force = (int) $this->trackerField->getOption('forceObjectSelector');
+ if ($force === 1) {
+ return true;
+ }
+ if ($force === 2) {
+ return false;
+ }
+
+ // Default: preserve existing behaviour — multiselect stays on dropdown
if ($this->canHaveMultipleValues()) {
return false;
}
@@ -427,13 +454,14 @@ class Tracker_Field_ItemLink extends \Tracker\Field\AbstractItemField implements
$sort = TikiLib::lib('trk')->get_default_sort_order($trackerId, true, true);
$template = $this->renderTemplate('trackerinput/itemlink_selector.tpl', $context, [
- 'placeholder' => $placeholder,
- 'status' => $status,
- 'selector_value' => $value,
- 'selector_id' => 'item' . $this->getItemId() . $this->getInsertId(),
- 'format' => $format,
- 'createTrackerItems' => $trackerPerms->create_tracker_items,
- 'sort' => $sort,
+ 'placeholder' => $placeholder,
+ 'status' => $status,
+ 'selector_value' => $value,
+ 'selector_id' => 'item' . $this->getItemId() . $this->getInsertId(),
+ 'format' => $format,
+ 'createTrackerItems' => $trackerPerms->create_tracker_items,
+ 'sort' => $sort,
+ 'selectMultipleValues' => (bool) $this->trackerField->getOption('selectMultipleValues'),
]);
return $template;
=====================================
templates/trackerinput/itemlink_selector.tpl
=====================================
@@ -1,5 +1,9 @@
<div class="item-link">
- {object_selector _id=$data.selector_id _simplevalue=$field.value _simplename=$field.ins_id _placeholder=$data.placeholder type="trackeritem" tracker_id=$field.options_map.trackerId tracker_status=$data.status _format=$data.format _sort=$data.sort}
+ {if !empty($data.selectMultipleValues)}
+ {object_selector_multi _id=$data.selector_id _name=$field.ins_id _placeholder=$data.placeholder _format=$data.format _sort=$data.sort type="trackeritem" tracker_id=$field.options_map.trackerId tracker_status=$data.status}
+ {else}
+ {object_selector _id=$data.selector_id _simplevalue=$field.value _simplename=$field.ins_id _placeholder=$data.placeholder type="trackeritem" tracker_id=$field.options_map.trackerId tracker_status=$data.status _format=$data.format _sort=$data.sort}
+ {/if}
{if $field.options_map.addItems and $data.createTrackerItems}
<a class="btn btn-primary insert-tracker-item" href="{service controller=tracker action=insert_item trackerId=$field.options_map.trackerId}" role="button">{tr}{$field.options_map.addItems|escape}{/tr}</a>
{jq}
View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/812a28222b14bfab2f76c7cab8c0c93828021b3c
--
View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/812a28222b14bfab2f76c7cab8c0c93828021b3c
You're receiving this email because of your account on gitlab.com. Manage all notifications: https://gitlab.com/-/profile/notifications | Help: https://gitlab.com/help
_______________________________________________
TikiWiki-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs