[ZBXNEXT-210] "resolve" user macro functionality Created: 2010 Jan 26  Updated: 2015 Sep 11  Resolved: 2015 Sep 11

Status: Closed
Project: ZABBIX FEATURE REQUESTS
Component/s: Frontend (F)
Affects Version/s: None
Fix Version/s: 2.5.0

Type: New Feature Request Priority: Major
Reporter: richlv Assignee: Unassigned
Resolution: Fixed Votes: 18
Labels: macros, patch, unsquashable, usability, usermacros
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Attachments: File ZBXNEXT-210-2.0.9-1.patch     PNG File ZBXNEXT-210-2.0.9-1.png     PNG File ZBXNEXT-210-2.0.9-2.png     File ZBXNEXT-210-2.0.9-4.patch     PNG File ZBXNEXT-210-2.0.9-4.png     File ZBXNEXT-210-2.0.9-5.patch     PNG File ZBXNEXT-210-2.0.9.png     PNG File ZBXNEXT-210_2.2.1-example.png     Text File ZBXNEXT-210_show_all_macro_values-2.2.1.patch     File ZBXNEXT-210_show_all_macro_values-2.4.2.patch     PNG File macro_resolving.png     PNG File macro_resolving_2.png     Text File zbxNext210-2.2.5-2.patch     File zbxNext210-2.2.5.patch    
Issue Links:
Duplicate
duplicates ZBXNEXT-1674 Sort by template Name instead of Temp... Open
is duplicated by ZBXNEXT-1529 Help on adding macros to hosts Closed
is duplicated by ZBXNEXT-880 add a way of viewing all the defined ... Closed
is duplicated by ZBXNEXT-2412 Show effective macros Closed
is duplicated by ZBXNEXT-2050 Show inherited macros on templates an... Closed

 Description   

currently there is no easy way to determine what a user macro will resolve to. this requires checking three locations if looking at a host linked to a single template (global, template, host), but if nested templates are used, this becomes a hard task.

a macro resolution feature would help. probably available on a host/template level, it would show value macro would have and where the value originates.
ideally it would also warn if macro resolving is ambiguous - for example, same macro is defined in multiple same level templates that are linked to a single host.

Specification



 Comments   
Comment by Marc [ 2013 Jul 19 ]

Why not adding a new tab beside the existing 'Macros' tab in 'CONFIGURATION OF TEMPLATES' and 'CONFIGURATION OF HOSTS'?
There could all at the respective level available user macros be listed and evaluated.

Comment by richlv [ 2013 Jul 20 ]

i believe that could fit quite well even in the existing macro tab - just show all macros that affect current host/template, and where they come from

Comment by Marc [ 2013 Jul 20 ]

That was my first intention too. But for cases where a lot user macros are inherited I thought it could become uncomfortable to manage the individual ones.
My final intention was to have one tab for individual user macro management and one tab that provides a uniform view about all macros on the respective level.

If implemented in the existing tab, then I would appreciate having the ability to toggle between 'All' and 'Current Host/Template'.

Comment by Oleksii Zagorskyi [ 2013 Jul 20 ]

Mark, about the "All" (you mentioned in previous comment) - remember that not superadmins do not have access to global macros.

Comment by Marc [ 2013 Jul 20 ]

Yes I do. The "All" was meant in read-only context.

Comment by Oleksii Zagorskyi [ 2013 Jul 20 ]

But not superadmins should not know any global macros value.
Actually there is some hackish approach to get a global macro value if I know its name

Comment by richlv [ 2013 Jul 20 ]

i think we can safely allow anybody (at least with admin privs) to know all global macros.
it's not too hackish even, just create items that expose params - and that's it
it is also very susceptible to bruteforce - create such items with api. we should not rely on any macro/variable as being secret, ever

Comment by Marc [ 2013 Jul 20 ]

Oleksiy, I see. But if this is desired, what I appreciate, then this should be solved by design and not by hiding. Maybe by a flag on (global) user macro level that does not allow value evaluation at any site.

But that would lead more to a re-design of macro evaluation similar to ZBXNEXT-1660.

Comment by Jens Berthold [ 2013 Oct 29 ]

I think the information is already very good, but should not all be visible (page looks overloaded).
For an end user it is enough to see at first glance what the effective value is.

Then e.g. in a popup the detailed information about the macro "value hierarchy" could be shown.

Comment by Marc [ 2013 Oct 29 ]

I had similar thoughts. But instead of using a popup menu I thought about hiding them in a way it is done for ZBXNEXT-1796

Comment by Marc [ 2013 Oct 30 ]

Without the 'Template name' heading it looks much better to me.

Comment by Marc [ 2013 Nov 03 ]

Attached patch:
ZBXNEXT-210-2.0.9-4.patch

separates the regular macro view and the resolved user macro view.
Switching between both views happens via radio buttons.
The heading 'Template name' is removed
The arrow used for template names is changed to be consistent with the view of 'History inventory' tab.
Macro names and values are strike through when macro is set on host/template level.
Beside of that a proper tool-tip is shown on mouse-over.

Comment by Marc [ 2013 Nov 03 ]

Attached patch:
ZBXNEXT-210-2.0.9-5.patch

displays hyperlinks for every template name.

Comment by Jens Berthold [ 2013 Nov 04 ]

Separating the views using different tabs sounds reasonable.

But I still think the most often needed information when administrating Zabbix is: macro name and macro value.
So there should be a very simple view where I can see (in one column) all available macro values, regardless of where they are defined.
Details can then be e.g. on another tab.

(Zabbix' one big drawback is IMHO the lack of intuitive GUI elements, so when introducing new features I thinks it's a good thing to bear intuitivity and efficient use in mind)

Comment by John Hayes [ 2013 Nov 30 ]

I like some of the suggested implementations above.

I'm not sure if separate tabs is needed (though it probably doesn't do any harm), for me the important feature is to see which macros currently apply to the host, regardless of where they are from.

Comment by Corey Shaw [ 2013 Dec 10 ]

Attached a port of this patch to 2.2.1. It is mostly the same as the 2.0.9-1.png example, but it contains some elements from the 2.0.9-5 patch.

Comment by Corey Shaw [ 2013 Dec 10 ]

I re-attached a new screenshot and patch with slightly larger text boxes.

Comment by Corey Shaw [ 2014 Jan 30 ]

Attached a new version of the 2.2.1 patch. It fixed a minor error that only showed up when creating a new host (it was a benign error).

Comment by Pavels Jelisejevs (Inactive) [ 2014 Jan 31 ]

Corey, I've quickly tested the 2.2.1 patch. It doesn't seem to work for templates. A lot of undefined indexes are displayed in the configuration form and it doesn't display any inherited macros.

Regarding the idea as a whole: I like the idea of displaying macros, inherited from the linked templates. But I'm not sure that we should display global macros. Some users have installations with a lot of global macros, most of which will be irrelevant for the current host. The user will then be forced to find his way through tens or even hundreds of global macros that he doesn't need.

Comment by Corey Shaw [ 2014 Jan 31 ]

Pavels - Thanks for the feedback. I'll certainly take a look at fixing those template errors that show up. As for the global macros, that's a very good point.

Comment by Corey Shaw [ 2014 Jan 31 ]

Added a slightly modified patch to fix the index error when editing templates. Please note, this page still doesn't have inherited macros show up when editing templates. I'm not sure why yet.

Comment by Corey Shaw [ 2014 Feb 07 ]

I have attached another fixed version of the patch that now works properly for templates as well. Also, as requested, I removed global macros from being shown on the pages. The relevant code is simply commented out, so it would be easy to add in the future if required.

Comment by Marc [ 2014 Apr 07 ]

jelisejev, I thought about your comment for awhile.
I'd still prefer to (optionally) see any global user macro. I see that opinions about it are different and that there is probably no ideal solution to suit them all.

Anyhow, to me efficiency beats nice look. Having a separate tab to optionally show all macros sounds sufficient to me.
People initially see only host level macros as it is done now. But the option to resolve User macros is aimed to have a complete overview and not to provide a nice looking but inconsistent compromise.

Even when there are hundreds or thousands of user macros at host level (btw, I expect to have hundreds globals), then there has to be a way to see them all.
This assures that a Zabbix-Admin is always aware about available/valid user macros and avoids creation of redundant macros due to ignorance.

Comment by Jamshid Damanpour [ 2014 Apr 17 ]

1. Is it possible to add update the triggers page so that macros are displayed similar to ZBXNEXT-210_2.2.1-example.png?

2. Is it possible to toggle evaluation of macros in trigger expressions so that we can switch between

{cpu.last(#1)}>85 and {cpu.last(#1)}

>{$CPU_TOTAL}?

Comment by Marc [ 2014 Aug 16 ]

Attached patch zbxNext210-2.2.5.patch ports ZBXNEXT-210-2.0.9-5.patch to release 2.2.5 as seen here (e.g. incl. radio buttons):

Comment by Tatapoum [ 2014 Aug 19 ]

Thank you for this great patch Marc.
I wonder if it could pose some security risks. A Zabbix user with the profile "administrator" doesn't have access to the Administration tab and the global macro configuration view. He could also not have access to the templates configuration view, but have access to some specific hosts configuration.
However, with your patch, the global macros and the macros inherited from the templates appear in the hosts configuration view. These could include global SNMP communities or passwords, as Zabbix doesn't offer some kind of keychain mechanism.
To my mind, this can be dangerous. Maybe you should add an on/off switch for this feature in the Administration/General tab.

Comment by Marc [ 2014 Aug 19 ]

Attached patch zbxNext210-2.2.5-2.patch fixes the inability of un-linking a template when editing a host.

Comment by Marc [ 2014 Aug 19 ]

tatapoum, my pleasure!

See discussion starting at: https://support.zabbix.com/browse/ZBXNEXT-210?focusedCommentId=84601

Any Zabbix-Admin user may access every global macro without much effort (e.g. by brute-forcing them via the API).

Any information disclosed by this patch is get by using the API with the respective user (privileges).

Comment by Oleksii Zagorskyi [ 2014 Aug 19 ]

Also note that starting from 2.4 global macro may be (I didn't test it from permission point of view) accessed for notifications - ZBXNEXT-751.
Of course it's slower than by API, but still ...

Comment by richlv [ 2014 Sep 30 ]

attached patches seem to use red colour or strikeout to identify macros that are overridden on host/template, but they use "-" to identify undefined macro.
that wouldn't work that well if the macro value was "-". macros also may hold an empty value.
maybe a grey font text "UNDEFINED" or similar could be used to identify them ?

Comment by Corey Shaw [ 2014 Nov 12 ]

Ported the latest patch from Marc to 2.4.2.

I have also updated the patch to use an italicized "Undefined" for values that haven't been set as richlv suggested. I'm not sure if my method for doing that is correct, but it appears to work....

I should also mention that I found a strange bug with Firefox v31. When doing a page refresh on a host configuration page, the "Macros" tab will remember the last "type" of macros that you looked at (host/inherited). If the last "type" that you looked at was "inherited" it will have that button highlighted, but still show the host macros (not inherited ones). Clicking on either of the buttons will cause the page to start working properly again. I could not duplicate this in Chrome.

Comment by Jens Berthold [ 2015 Mar 24 ]

I'd like to discuss another idea:
I think a host-based macro overview should only contain macros that are actually used in items linked to that host. Or at least should mark them.
This would be a huge improvement as it prevents the painful manual lookup and leads through the possibly large list of macros.

Comment by richlv [ 2015 Mar 24 ]

jens, sounds like a good idea, but usermacros can be used also in triggers, lld rules, webscenarios... we would have to parse a large amount of places to see whether a macro is used or not. and then users would likely want to know at least the type of entity that uses those macros

it seems to me that it might be better submitted as a separate feature request, unless developers decide to include it in this issue

Comment by Alexander Vladishev [ 2015 Apr 07 ]

The prototype is available in the development branch svn://svn.zabbix.com/branches/dev/ZBXNEXT-210.

Comment by richlv [ 2015 Apr 07 ]

this implementation looks nice functionally, thanks
a few quick remarks on some details :

  • maybe "Global value" should be a link to admin -> general -> macros for superadmins ?
  • clicking on the template in the small tooltip opens general template properties - can we focus on the macros tab ?
  • having higher level to the right is the opposite of "parent..." line in templated items, triggers etc - seems to have a slight potential for confusion. not sure how that could be improved. how would the macro page look if swapped left/right ?
  • placing global/template fields on the left hand side would put the fields with arrows closer to other fields, not on the other side of "change/remove" links, so it might look even better
  • one thing i wanted to see on some hosts - which macros does a specific template provide. it would be nice to have a dropdown with all template names that would filter to show only the macros that come (or are changed) in that template. but it might be too complicated to add at this time
Comment by Alexander Vladishev [ 2015 Apr 08 ]

richlv, thanks for the remarks! It will be discussed together with a specification.

Comment by Alexander Vladishev [ 2015 Apr 08 ]

The prototype has been updated in r53011. richlv, please take a look.

Comment by richlv [ 2015 Apr 09 ]

(1) it would be nice to link to global macro config here. making the header clickable could be confusing, as it could imply sorting. how about placing the link in the parenthesis ? so the header would be (italicised text would be a link) :
Global value (configure)

sasha RESOLVED in r53329:53330,53335.

iivs CLOSED.

Comment by richlv [ 2015 Apr 09 ]

(2) clicking on the template name currently opens general template properties - focus on the macros tab would be better, but there does not seem to be a decent solution for that at this time

sasha It is too hard to implement now. WON'T FIX

Comment by richlv [ 2015 Apr 09 ]

(3) it would be nice to filter provided upstream macros by template, but that has been decided to be out of scope at this time

sasha Out of scope. WON'T FIX

Comment by richlv [ 2015 Apr 09 ]

(4) having higher level to the right is the opposite of "parent..." line in templated items, triggers etc - seems to have a slight potential for confusion.
placing global/template fields on the left hand side would put the fields with arrows closer to other fields, not on the other side of "change/remove" links, so it might look even better.

an idea for the field ordering (based on the initial design) :

it would keep control links (change/remove) on the right hand side.

issues raised :

  • action "Remove" is visually connected to all data (i.e. to the Global and Template values)
  • column "Value" "jumps" when switching mode

the first one is a bit less of a concern with the macro name being between host and upstream values. as for column moving, switching between the modes takes some 5 seconds, so i don't really notice that

and based on the new design :

sasha After discussion, decided to stay on the first design because it has less issues described above.

WON"T FIX

Comment by Marc [ 2015 Apr 10 ]

richlv, your last/new design proposal looks very reasonable to me. The layout is clean and more intuitive. Although I'm a bit uncertain regarding the Global/Template value visualization.

Another thing that I have in mind, but that's probably a more general issue, is a refactoring the object used to fill the tabs.
It always reserves space on the left for optional field labels. This leads to wasting space when the rest of the area is not large enough.

Comment by Alexander Vladishev [ 2015 Apr 23 ]

Available in the development branch svn://svn.zabbix.com/branches/dev/ZBXNEXT-210

Comment by Ivo Kurzemnieks [ 2015 Apr 30 ]

(5) String changes?

Removed strings:

  • Cannot add macro.
  • Cannot remove macro.
  • Cannot update macro.

New strings:

  • Effective value
  • Global value
  • Host macros
  • Inherited and host macros
  • Template value
  • configure

sasha RESOLVED

iivs CLOSED.

Comment by Ivo Kurzemnieks [ 2015 Apr 30 ]

(6) Administration > General > Macros

Suppose we have 9 macros in the list. "Remove" action contains indexes 0 to 8. Pressing "Add" will insert a blank field with index 9. Type in a macro and press "Update". Now the list contains 10 macros, but "Remove" action contains IDs 32,33,20,21, etc. Press "Add" again and see that the next number is lower than current ID and it is now 10. When we remove blank fields several times and press "Add" several times, we come to the point that new blank field will have same index that some existing macro ID. This will result in many different problems like:

  • typing a macro in blank field and pressing "Update" will replace the one with same ID and index;
  • pressing remove on blank fields that have same IDs and indexes, the confirm message will display will display a lot more macros to be deleted, when actually they will not be deleted even pressing "Update";
  • adding two same macros like {$AAA} => 1 and {$AAA} => 2, can result in strange list reordering having one placed on top of the list and the other one at the end of the list;
  • a blank field my appear somewhere in the middle depeding on the row index and may even give error "Empty macro".

In addition to that if I update without changes, nothing is displayed. Suppose that is OK for a change and actually nothing is updated. But adding a blank field at the end and updating the list does not remove the empty field. Previously empty field was removed at all times. Add as many empty fields as you want, now they will stay on page.

sasha RESOLVED in r53499.

iivs CLOSED.

Comment by Ivo Kurzemnieks [ 2015 Apr 30 ]

(7) Configuration > Hosts > Macros > Inherited and host macros

  • If host nas no macros, then switching "Inherited and host macros" empty field gets submitted and the empty field is now on top. Adding another blank field, the new one is at the bottom. That looks strange.
    Adding several blank fields in "Inherited and host macros" and switching to "Host macros", blank fields are transmitted there too. Is that a feature or should empty fields be removed and left with only one blank field?

sasha RESOLVEd in r53494.

  • More strangely when on IE11 the blank field is not on top, but in the middle of the list.

sasha Dropped support of placeholders in IE8 and IE9. RESOLVED in r53496.

  • Click "Change" for readonly field that comes from a global macro or a template, enter a different value or leave it as is and then click "Update". It gives the "Wrong fields for macro" error. Same error can be raised when I do the following: add a macro with same name as global macro (possible both ways via "Host macros" or "Inherited and host macros") and then switch to "Inherited and host macros" and press "Update". And another way is to create a macro on a template with same name as in host, link the template to host and go to "Inherited and host macros" section and clicking "Update".

sasha RESOLVED in r53493.

  • Adding two same macros and adding another blank field, it will result in error, which is OK, but the blank field is now on top.

sasha RESOLVED in r53494.

  • No warning message about macro deletion. Should be the same as in global macros maybe?

sasha Already was discussed long time ago. WON'T FIX

iivs CLOSED.

Comment by Ivo Kurzemnieks [ 2015 Apr 30 ]

(8) Administration > Audit log

  • It looks strange for example when using usermacro.updateglobal API method and updating only the value, audit log will show description without name and the value that it was changed to. I think that "Description" column should contain the macro name that was created or updated and "Details" column should contain the value that was added or updated to. Probably also containing some prefix name like "value: %s" or "value [%s]". Otherwise we have too many different formats.
    Also if a macro is deleted, there is probably no need for the arrow symbol, just the macro name that was deleted.

sasha That is out of scope for this issue. I didn't change any audit log strings. WON'T FIX

  • usermacro.updateglobal API documentation states that "Only the passed properties will be updated, all others will remain unchanged." When ever I pass only "macro" parameter
    {
    "globalmacroid":"38",
    "macro":"{$Z}"
    }
    

    without "value" parameter, the name gets updated, but the value is removed. Previously it worked. Specification does not say anything about API changes.

sasha RESOLVED in r53489.

iivs CLOSED.

Comment by Ivo Kurzemnieks [ 2015 May 05 ]

(9) Configuration > Hosts > Host prototypes
If no macros exist on a host, then in Host prototypes > Macros tab we see message "No macros found.". It's not entirely true, since we have global macros and we should be able to see them too. As soon as a macro is added, the buttons "Host macros" and "Inherited and host macros" are available in that form.

sasha RESOLVED in r53486.

iivs CLOSED.

Comment by Ivo Kurzemnieks [ 2015 May 06 ]

(10) Open LLD created host in edit form, go to "Macros" tab click "Inherited and host macros" button. Now press "Full clone". Page is reloaded with large empty form and no tabs.

sasha RESOLVED in r53500.

iivs If a host prototype had linked templates, and we open LLD created host in edit form, then "Macros" tab and then click on "Inherited and host macros", we don't see any inherited macros and when we switch back to "Templates" tab, the list is now empty.

REOPENED.

sasha RESOLVED in r53502.

iivs Still some problems with those hosts. Full clone a LLD created host, change name, change visible name, change some groups, change some interfaces, change proxy, change data in IPMI tab and swich to different host inventory mode. Go to "Macros" and "Inherited host macros". It may look OK, but user doesn't know that almost all fields have been reset. The only information that was remebered, was checkbox and description.

Another thing is that when I try to add a template, it reloads page, but it does not add it, nor I can remove a template.

REOPENED.

sasha RESOLVED in r53587.

iivs Now all interfaces cannot be dragged when cloning or full cloning a discovered host

REOPENED.

sasha RESOLVED in r53621.

iivs CLOSED.

Comment by Ivo Kurzemnieks [ 2015 May 07 ]

(11) Delete all global macros, open host create form, click "Macros" > "Inherited and host macros"
observe error:

Undefined index: type [hosts.php:902 → CView->render() → include() → CView->render() → include() in include\views\hostmacros.php:56]
Undefined index: type [hosts.php:902 → CView->render() → include() → CView->render() → include() in include\views\hostmacros.php:67]
Undefined index: type [hosts.php:902 → CView->render() → include() → CView->render() → include() in include\views\hostmacros.php:75]
Undefined index: type [hosts.php:902 → CView->render() → include() → CView->render() → include() in include\views\hostmacros.php:80]
Undefined index: type [hosts.php:902 → CView->render() → include() → CView->render() → include() in include\views\hostmacros.php:88]
Undefined index: type [hosts.php:902 → CView->render() → include() → CView->render() → include() in include\views\hostmacros.php:91]

sasha RESOLVED in r53503.

iivs CLOSED.

Comment by Ivo Kurzemnieks [ 2015 May 11 ]

(12) Coding style and various improvements.

  • hostmacros.js.php
    • Lines 5-7, 16-18: the code should be written in different format like so
      <?php if ($data['show_inherited_macros']): ?>
      	<input id="macros_#{rowNum}_type" type="hidden" value="2" name="macros[#{rowNum}][type]">
      <?php endif ?>
      

      https://zabbix.org/wiki/PHP_coding_guidelines#Using_PHP_in_HTML_or_JavaScript

    • Lines 30, 32, 41: usage of /* comments */ is not good. Could we use constants/defines?
    • Lines 14, 34, 46: short tag usage should be similar. There should be space after ; before closing tag and it will looke better if there will be extra space after =. This
      <?= _('Remove'); ?>

      looks more readable.

    • Line 11: "value" should be translatable just like other placeholders
  • hostmacros.php
    • Line 20: missing another new line
    • Line 64: Seems like usage of $macro['hostmacroid'] originates from host_prototypes:295 but is it not in API request.
    • Lines 134-136: can be written in one line
      $buttons_row = new CRow($buttons_column, null, 'row_new_macro');

      and we probably can get rid of the variable $buttons_row after that.

    • Lines 144, 148: for buttons or inputs the correct syntax is this.form.submit(). It will also help to avoid problems with open console in IE.
  • adm.macros.php
    • Lines 53, 54: can be written in one line and extra space on line 55
    • Lines 133-136: uses different syntax than, for example configuration.host.edit.php:849. Probably it would be good to unify similar lines like so
      $data['macros'][] = ['macro' => '', 'value' => ''];
    • Lines 53-55, 69-71: could be written in one line, just like in hosts.php:184
  • administration.general.macros.edit.js.php
    • Line 8: "value" should be translatable.
    • Lines 11, 32: Use new shorthand syntax.
    • Line 18: No real reason to assing object to a variable for only one single usage.
  • hosts.inc.php
    • Lines 775, 926, 961: correct syntax is array $parameter
    • Line 922: only one parameter is described
  • CUserMacro.php
    • Line 812: overflow
  • configuration.host.prototype.edit.php
    • Line 283: overflow
  • administration.general.macros.edit.php
    • Line 64: we can get rid of extra variable
    • Lines 72-74: can be written in one line
      $buttons_row = new CRow($buttons_column, null, 'row_new_macro');

      and we probably can get rid of the variable $buttons_row after that.

sasha RESOLVED in r53572. (except host_prototypes:295 - 'hostmacroid' is not needed here)

iivs I added one missed constant in r53601; slightly improved js code in r53604 and removed some comments in r53607

sasha Thanks! CLOSED

Comment by Ivo Kurzemnieks [ 2015 May 15 ]

TESTED

Comment by Alexander Vladishev [ 2015 May 15 ]

Available in pre-2.5.0 r53633.

Comment by Alexander Vladishev [ 2015 May 15 ]

(13) Documentation

martins-v Updated documentation:

RESOLVED.

sasha Thanks! CLOSED

sasha REOPENED, martins-v, please add screenshot of the macros in Configuring a template

martins-v RESOLVED.

sasha Thanks! CLOSED

Comment by Martins Valkovskis [ 2015 Jul 30 ]

(14) In template properties these two strings seem potentially misleading: "Host macros" and "Inherited and host macros"

It seems like "Template macros" and "Inherited and template macros" would be much better.

gunarspujats Added translation strings:
1) Template macros
2) Inherited and template macros

gunarspujats RESOLVED in r55067.

sasha CLOSED

Please take a look at my changes in r55191,55192.

gunarspujats CLOSED

gunarspujats Available in pre-2.5.1 (trunk) r55239.

Generated at Sat Apr 20 09:36:11 EEST 2024 using Jira 9.12.4#9120004-sha1:625303b708afdb767e17cb2838290c41888e9ff0.