RT::Extension::ConditionalCustomFields - CF conditionned by the value of another CF
Provide the ability to display/edit a custom field conditioned by the value of another (select) custom field for the same object, which can be anything that can have custom fields (ticket, queue, user, group, article or asset).
If a custom field is based on another (parent) custom field which is conditioned by, this (child) custom field will of course also be conditioned by (with the same condition as its parent).
If the condition custom field is a multivalued select, the condition for an object is met as soon as the condition is met by at least one value of the instanciated custom field for this object.
From version 0.07, the condition can be multivalued, that is: the conditioned custom field can be displayed/edited if the condition custom field has one of these values (In other words: there is an OR bewteen the values of the condition). The condition custom field can be a select custom field with values defined by CustomFieldValues or an external custom field.
OR
Note that version 0.07 is a complete redesign: the API described below has changed; also, the way that ConditionedBy property is store has changed. If you upgrade from a previous version, you have to reconfigure the custom fields which are conditionned by.
Works with RT 4.2 or greater
perl Makefile.PL
make
make install
May need root permissions
ConditionalCustomFields requires a small patch to add necessary Callbacks on versions of RT superior to 4.2.3. (The patch has been submitted to BestPractical in order to be included in future RT releases, as of RT 4.4.2, some parts of the patch are already included, but some other parts still required to apply this patch.)
For RT 4.2, apply the included patch:
cd /opt/rt4 # Your location may be different patch -p1 < /download/dir/RT-Extension-ConditionalCustomFields/patches/4.2-add-callbacks-to-extend-customfields-capabilities.patch
For RT 4.4.1, apply the included patch:
cd /opt/rt4 # Your location may be different patch -p1 < /download/dir/RT-Extension-ConditionalCustomFields/patches/4.4.1-add-callbacks-to-extend-customfields-capabilities.patch
For RT 4.4.2, apply the included patch:
cd /opt/rt4 # Your location may be different patch -p1 < /download/dir/RT-Extension-ConditionalCustomFields/patches/4.4.2-add-callbacks-to-extend-customfields-capabilities.patch
If you are using RT 4.2 or greater, add this line:
Plugin('RT::Extension::ConditionalCustomFields');
For RT 4.0, add this line:
Set(@Plugins, qw(RT::Extension::ConditionalCustomFields));
or add RT::Extension::ConditionalCustomFields to your existing @Plugins line.
RT::Extension::ConditionalCustomFields
@Plugins
rm -rf /opt/rt4/var/mason_data/obj
ConditionalCustomFields adds a ConditionedBy property, that is a CustomField and a value, along with the following methods, to RT::CustomField objets:
Set the ConditionedBy property for this CustomField object to CustomFieldValue CF with value set to VALUE. CF should be an existing CustomField object or the id of an existing CustomField object, or the name of an unambiguous existing CustomField object. VALUE should be a string. Current user should have SeeCustomField and ModifyCustomField rights for this CustomField and SeeCustomField right for the CustomField which this CustomField is conditionned by. Returns (1, 'Status message') on success and (0, 'Error Message') on failure.
CF
VALUE
SeeCustomField
ModifyCustomField
Returns the current ConditionedBy property for this CustomField object as a hash with keys CF containing the id of the CustomField which this CustomField is recursively conditionned by, and val containing the value as string. If neither this CustomField object nor one of its ancestor is conditioned by another one, that is: if their ConditionedBy property is not (recursively) defined, returns undef. Current user should have SeeCustomField right for both this CustomField and the CustomField which this CustomField is conditionned recursively by. "Recursively" means that this method will search for a ConditionedBy property for this CustomField object, then for the CustomField this one is BasedOn, and so on until it find an acestor Category with a ConditionedBy property or, the CustomField which is being looked up, is not based on any ancestor Category.
ConditionedBy
val
undef
BasedOn
Category
Also, ConditionalCustomFields allows to set the ConditionedBy property when creating CustomFields from an initialdata file, with one of the following syntaxes:
@CustomFields = ( { Name => 'Condition', Type => 'SelectSingle', RenderType => 'Dropdown', Queue => [ 'General' ], LookupType => 'RT::Queue-RT::Ticket', Values => [ { Name => 'Passed', SortOrder => 0 }, { Name => 'Failed', SortOrder => 1 }, ], Pattern => '(?#Mandatory).', DefaultValues => [ 'Failed' ], }, { Name => 'Conditioned with cf name and value', Type => 'FreeformSingle', Queue => [ 'General' ], LookupType => 'RT::Queue-RT::Ticket', ConditionedByCF => 'Condition', ConditionedBy => 'Passed', }, { Name => 'Conditioned with cf id and value', Type => 'FreeformSingle', Queue => [ 'General' ], LookupType => 'RT::Queue-RT::Ticket', ConditionedByCF => 66, ConditionedBy => 'Passed', }, );
This examples creates a select CustomField Condition which should have the value Passed, for CustomFields Conditioned with cf name and value and Conditioned with cf id and value to be displayed or edited.
Condition
Passed
Conditioned with cf name and value
Conditioned with cf id and value
Additional fields for an element of @CustomFields are:
@CustomFields
ConditonedByCF
The CustomField that this new CustomField should conditionned by. It can be either the id or the Name of a previously created CustomField. This implies that this CustomField should be declared before this one in the initialdata file, or it should already exist. When ConditionedByCF attribute is set, ConditionedBy attribute should always also be set.
id
Name
ConditionedByCF
ConditonedBy
The value as a string of the CustomField defined by the ConditionedByCF attribute (which is mandatory).
string
Gérald Sédrati-Dinet <gibus@easter-eggs.com>
https://github.com/gibus/RT-Extension-ConditionalCustomFields
All bugs should be reported via email to
bug-RT-Extension-ConditionalCustomFields@rt.cpan.org
or via the web at
rt.cpan.org.
This software is Copyright (c) 2017 by Gérald Sédrati-Dinet, Easter-Eggs
This is free software, licensed under:
The GNU General Public License, Version 3, June 2007
To install RT::Extension::ConditionalCustomFields, copy and paste the appropriate command in to your terminal.
cpanm
cpanm RT::Extension::ConditionalCustomFields
CPAN shell
perl -MCPAN -e shell install RT::Extension::ConditionalCustomFields
For more information on module installation, please visit the detailed CPAN module installation guide.