[TikiWiki-commits] [Git][tikiwiki/tiki][master] [FIX] Trackers Rules: fix all the fields of a Tracker on which the Rules do not work
"luci \(@luciash\) via TikiWiki-cvs" <[email protected]>
| Newsgroups | gmane.comp.cms.tiki.cvs |
|---|---|
| Message-ID | <689329fce2b45_2cd5ee4695c0@gitlab-sidekiq-low-urgency-cpu-bound-v2-78cc7c49f-skwkj.mail> |
luci pushed to branch master at Tiki Wiki CMS Groupware / Tiki
Commits:
8786ba5b by Joel Mpunga at 2025-08-06T10:01:58+00:00
[FIX] Trackers Rules: fix all the fields of a Tracker on which the Rules do not work
---
* [FIX]Trackers Rules :fix all the fields of a Tracker on which the Rules do not work
See merge request tikiwiki/tiki!7353
- - - - -
9 changed files:
- lib/core/Services/Tracker/Controller.php
- lib/core/Tracker/Field/EmailFolder.php
- lib/core/Tracker/Field/GeographicFeature.php
- lib/core/Tracker/Rule/Rules.php
- lib/vue/vuejslib.php
- templates/trackerinput/autoincrement.tpl
- templates/trackerinput/statictext.tpl
- templates/trackeroutput/computed.tpl
- templates/trackeroutput/usergroups.tpl
Changes:
=====================================
lib/core/Services/Tracker/Controller.php
=====================================
@@ -1326,7 +1326,8 @@ class Services_Tracker_Controller
}
if ($prefs['tracker_field_rules'] === 'y') {
- $js = TikiLib::lib('vuejs')->generateTrackerRulesJS($definition->getFields());
+ $js = TikiLib::lib('vuejs')->generateTrackerRulesJS(fields: $definition->getFields(), isInEditContext: true);
+ //$js = TikiLib::lib('vuejs')->generateTrackerRulesJS($definition->getFields(), '', true);
TikiLib::lib('header')->add_jq_onready($js);
}
=====================================
lib/core/Tracker/Field/EmailFolder.php
=====================================
@@ -249,7 +249,11 @@ class Tracker_Field_EmailFolder extends Tracker_Field_Files implements \Tracker\
public function renderInput($context = [])
{
- return tr("Emails can be copied or moved here via the Webmail interface.");
+ $ins_id = $this->getInsertId();
+ //This input is useful for facilitating the execution of rules
+ $hiddenInput = "<input type='hidden' name='$ins_id'>";
+ $translatedText = tr("Emails can be copied or moved here via the Webmail interface.");
+ return $hiddenInput . $translatedText;
}
public function renderOutput($context = [])
=====================================
lib/core/Tracker/Field/GeographicFeature.php
=====================================
@@ -43,7 +43,11 @@ class Tracker_Field_GeographicFeature extends \Tracker\Field\AbstractItemField i
public function renderInput($context = [])
{
- return tr('Feature cannot be set or modified through this interface.');
+ $ins_id = $this->getInsertId();
+ //This input is useful for facilitating the execution of rules
+ $hiddenInput = "<input type='hidden' name='$ins_id'>";
+ $translatedText = tr("Feature cannot be set or modified through this interface.");
+ return $hiddenInput . $translatedText;
}
public function renderOutput($context = [])
=====================================
lib/core/Tracker/Rule/Rules.php
=====================================
@@ -39,7 +39,7 @@ class Rules
*
* @return string
*/
- public function getJavaScript(string $parentSelector, array $field): string
+ public function getJavaScript(string $parentSelector, array $field, $isInEditContext = false): string
{
global $prefs;
@@ -70,8 +70,14 @@ class Rules
$operator = ' || ';
}
+ if ($isInEditContext) {
+ $selectorAttribute = 'name';
+ } else {
+ $selectorAttribute = 'name^';
+ }
+
foreach ($this->conditions->predicates as $predicate) {
- $selector = '[name=\'' . $predicate->target_id . '\']' . $conditionQualifier;
+ $selector = "[$selectorAttribute='{$predicate->target_id}']$conditionQualifier";
$selectors[] = $selector;
if (
in_array($field['type'], ['R', 'M']) ||
@@ -92,7 +98,8 @@ class Rules
foreach ($this->actions->predicates as $predicate) {
if ($predicate->operator_id !== 'NoOp') {
- $targetSelector = "\$(\"[name='{$predicate->target_id}']\", $(this).closest(\"form\")).last()";
+ $targetSelector = "\$(\"[{$selectorAttribute}='{$predicate->target_id}']\", \$(this).closest(\"form\")).last()";
+
$actions[]
= " if ($targetSelector.length === 0) { console.error('Tracker Rules: element $predicate->target_id not found'); return; }";
if (strpos($predicate->operator_id, 'Required') === false) {
@@ -113,7 +120,7 @@ class Rules
if ($this->else->predicates) {
foreach ($this->else->predicates as $predicate) {
if ($predicate->operator_id !== 'NoOp') {
- $targetSelector = "\$(\"[name='{$predicate->target_id}']\", $(this).closest(\"form\")).last()";
+ $targetSelector = "\$(\"[{$selectorAttribute}='{$predicate->target_id}']\", \$(this).closest(\"form\")).last()";
$else[]
= " if ($targetSelector.length === 0) { console.error('Tracker Rules: element $predicate->target_id not found'); return; }";
if (strpos($predicate->operator_id, 'Required') === false) {
=====================================
lib/vue/vuejslib.php
=====================================
@@ -162,7 +162,7 @@ class VueJsLib
return '<div id="' . $singleSpaDomId . '" class="tracker-rules"></div>';
}
- public function generateTrackerRulesJS($fields, $parentSelector = '.tracker-field-group:first')
+ public function generateTrackerRulesJS($fields, $parentSelector = '.tracker-field-group:first', $isInEditContext = false)
{
$js = '';
@@ -172,7 +172,7 @@ class VueJsLib
foreach (array_filter($fields) as $field) {
if (! empty($field['rules']) && $field['rules'] !== '{"conditions":null,"actions":null,"else":null}') {
$rules = Tiki\Lib\core\Tracker\Rule\Rules::fromData($field['fieldId'], $field['rules']);
- $js .= $rules->getJavaScript($parentSelector, $field);
+ $js .= $rules->getJavaScript($parentSelector, $field, $isInEditContext);
}
}
=====================================
templates/trackerinput/autoincrement.tpl
=====================================
@@ -1,3 +1,4 @@
+<input type="hidden" name="{$field.ins_id}">
{if !empty($item.itemId)}
<div{if $field.options_map.prepend or $field.options_map.append} class="input-group"{/if}>
{if !empty($field.options_map.prepend)}
=====================================
templates/trackerinput/statictext.tpl
=====================================
@@ -1,3 +1,4 @@
+<input type="hidden" name="{$field.ins_id}">
{if $field.options_array[0] eq 1 or $field.options_array[0] eq 2}
{$field.value}
{elseif $field.options_array[1] ne '' and $list_mode eq 'y'}
=====================================
templates/trackeroutput/computed.tpl
=====================================
@@ -1,3 +1,4 @@
+<input type="hidden" name="{$field.ins_id}">
{if $prefs.trackerfield_computed eq 'y'}
{if isset($field.computedtype) and $field.computedtype eq 'duration'}
{if !empty($field.value)}
=====================================
templates/trackeroutput/usergroups.tpl
=====================================
@@ -1,3 +1,4 @@
+<input type="hidden" name="{$field.ins_id}">
{foreach from=$field.groups item=val name=ix}
<div>
{$val|escape}
View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/8786ba5b10235b51c272fd41d3efd9065097b78d
--
View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/8786ba5b10235b51c272fd41d3efd9065097b78d
You're receiving this email because of your account on gitlab.com.
_______________________________________________
TikiWiki-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs